• 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일같은 날짜는 주어지지 않습니다)

[입출력 예]

 

 

 


추측) 

달마다 28일인지 29일(윤년)인지 30일인지 31일인지를 구분할 수 있는게 먼저 필요하다. 그게 구분이 가능하다면 a월 전까지 모든 일수를 더하고 b까지를 더한다. 이를 7로 나누면 나머지가 나올텐데 이게 금요일로 부터 몇번째 날인지 일 것이다. 그것을 요일에 대입해 출력하면 될 듯 하다.

 

 

소스코드) 

class Solution {
    public String solution(int a, int b) {
        String answer = "";
        int[] days = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};	// 달마다 일수
        String[] dayWeek = {"FRI","THU","SUN","MON","TUE","WED","THU"};	// 요일
        int plusDays = 0;
        for (int i=0; i<a-1; i++){
            plusDays += days[i];		// a월 전까지 일수 더하기
        }
        plusDays = plusDays + b -1 ; 		// a월의 일수인 b까지 더하고 -1를 한다* 아래서 설명
        int day = (plusDays % 7);		// 7로 나눈 나머지가 금요일 당일로부터 몇번 날인지 출력
        answer = dayWeek[day];			// 거기에 맞는 요일을 출력
        return answer;
    }
}

 

리뷰) 

주어진 순서 그대로 하겠다고 했다가 너무 어렵게 생각한거 같다. 주어진 순서대로 요일에 숫자를 부여해 금요일에 시작하니 +5를 주고 거기에 7로 나눈 나머지를 더해 다시 7를 빼는 등의 시도도 해봤었다. 하지만 이쪽으로 풀이하면서 기준점을 잘 변경하는 것도 문제를 쉽게 만드는데 큰 도움을 준다는 걸 깨달았다. 결과값으로 나오는 값이 계속 그 다음 요일이여서 많이 고민했다. 왜 하루의 차이가 생길까. 그건 1월 1일이 만 하루가 지난 날이 아니기 때문이다.

이 식에서 -1을 해주지 않고  a=1, b=1 을 넣어 1월 1일을 넣었다면 결과값으로 dayWeek[1]이 나와 토요일이 나온다. 만하루가 지난 다음날이 나오기 때문 그래서 -1 값을 적용해 준다.

 

달리기반 첫문제였는데도 쉽지 않다. 정말 열심히 해야할 거 같다. ㅠ

 

+ Recent posts