1. 문제
2016년 1월 1일은 금요일이다. 두 수 a ,b를 매개변수로 하여 2016년 a월 b일이 무슨 요일인지 리턴하는 함수를 만드시오.
2. 제한
2016년은 윤년입니다.
3. 정답
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};
int day = 1;
int count = 0;
int remainder;
for(int i = 0; i < a - 1; i++) {
count += days[i];
}
count += (b - day);
remainder = count % 7;
switch (remainder) {
case 0:
answer = "FRI";
break;
case 1:
answer = "SAT";
break;
case 2:
answer = "SUN";
break;
case 3:
answer = "MON";
break;
case 4:
answer = "TUE";
break;
case 5:
answer = "WED";
break;
case 6:
answer = "THU";
break;
}
return answer;
}
}
4. 설명
4-1. 2016년의 매월의 날짜들을 days라는 배열로 만든다.
4-2. days배열을 이용해 구하고자 하는 월(a)의 직전 월까지의 일수를 다 합한다. 합한 결과는 count에 넣는다.
4-3. 구하고자 하는 일자가 1일부터 몇일 떨어져있는지 계산하여 이를 count에 합친다.
4-4. count값을 7로 나눈 값을 remainder에 넣는다. remainder는 0~6까지의 값을 가질 수 있다.
4-5. remainder값이 0이면 1월1일과 같은 금요일이고, 1이면 토요일, .... , 6이면 목요일이다.
4-6. answer값을 출력한다.
5. 참고
5-1. 핵심은 구하고자 하는 a월 b일이 1월 1일로부터 몇일이 떨어져있는지를 구하는 것이다. 예를 들어 a월 b일이 1월 8일이면 1월 1일로부터 7일 떨어져 있으므로 7%7 == 0 이기 때문에 금요일인 것을 확인할 수 있다. 또 다른 예로 a월 b일이 5월 23일이면 31+29+31+30 = 121, 121 + 22 = 143일 떨어져 있으므로 143 % 7 == 3 이고 월요일이라는 것을 확인할 수 있다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
문자열 내 p와 y의 개수(JAVA) (0) | 2022.01.17 |
---|---|
나누어 떨어지는 숫자 배열(JAVA) (0) | 2022.01.17 |
내적(JAVA) (0) | 2022.01.17 |
부족한 금액 계산하기(JAVA) (0) | 2022.01.15 |
행렬의 덧셈(JAVA) (0) | 2022.01.15 |