본문 바로가기
Coding Test

[프로그래머스] Lv.1 2016년

by pearhyunjin 2024. 4. 18.

 

 

프로그래머스 Lv1 중 서치 없이 푸는데 실패한 문제를 정리한 내용입니다.

정리 내용 출처는 아래를 참고해 주세요.

 


 

문제 설명

 

2016년 1월 1일은 금요일이다. 2016년 a월 b일은 무슨 요일일까?

두 수 a, b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하라.

요일의 이름은 일요일부터 토요일까지 각각 SUN, MON, TUE, WED, THU, FRI, SAT 이다.

예를 들어 a = 5, b = 24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환한다.

 

제한사항
  • 2016년은 윤년이다.
  • 2016년 a월 b일은 실제로 있는 날이다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않는다.

 

입출력 예
a b result
5 24 "TUE"

 

 

 

내가 푼 방식

 

문제에서 구하고자하는 년도가 2016년으로 제한되어 있기에 간단하게 풀 수 있는 방식이다.

2016년 1월 1일이 금요일이기 때문에 금요일을 시작으로 하는 요일 배열을 만들고, 각 월에 해당하는 일 수를 담은 배열을 만들어 이용한다.

입력값 a(월)을 이용해 month 배열에서 해당 월까지의 모든 월의 일 수를 더해주고, a월까지 도달하면 b(일)를 추가로 더해준다. 해당 값을 7로 나눈 나머지를 인덱스로 갖는 day 배열의 값을 return 하면 해당 월/일의 요일값을 구할 수 있다. 

 

class Solution {
    public String solution(int a, int b) {
        String[] day = {"FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"};
        int[] month = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 30};
        int answer = 0;
        
        for (int i = 0; i < a - 1; i++) {
            answer += month[i];
        }
        answer += b - 1;
        
        return day[answer % 7];
}

 

 

다른 방식 1

 

Calendar 클래스를 이용한 방식으로, Calendar 클래스의 Month는 0부터 시작함을 주의해야한다.

 

class Solution {
    public String solution(int a, int b) {
		 String day = "" ; 

		 Calendar cal = Calendar.getInstance(); 
		 cal.set(2016,a -1,b);
		 int dayNum = cal.get(Calendar.DAY_OF_WEEK); 
		 switch(dayNum){ 
		 	case 1: day = "SUN"; 
		 	break; 
		 	case 2: day = "MON"; 
		 	break; 
		 	case 3: day = "TUE"; 
		 	break; 
		 	case 4: day = "WED"; 
		 	break; 
		 	case 5: day = "THU"; 
		 	break; 
		 	case 6: day = "FRI";
		 	break; 
		 	case 7: day = "SAT"; 
            		break; 
		 } 
		 return day ;
	 }
}

 

 

 

다른 방식 2

 

Java 8부터 사용 가능한 Java.time.* 을 이용한 간단한 풀이

 

class Solution {
    public String solution(int a, int b) {
      return LocalDate.of(2016, a, b).getDayOfWeek().toString().substring(0,3);
  }
}



 

기억할 것

Calendar 클래스 - Date 클래스와 마찬가지로 날짜와 시간을 다루는 클래스.

https://pearhj.tistory.com/167

 

[JAVA] Calendar 클래스

Calendar Class Calendar 클래스는 Date 클래스처럼 날짜와 시간을 다루는 클래스로 java.util 패키지에 포함되어 있다. 해당 클래스가 새로 추가되면서 기존 Date 클래스의 대부분의 메소드는 deprecated되어

pearhj.tistory.com

Java.time 패키지

https://pearhj.tistory.com/168

 


* https://school.programmers.co.kr/learn/courses/30/lessons/12901 

* https://junghn.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-JAVA-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-2016%EB%85%84