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일같은 날짜는 주어지지 않습니다)
✅ 1월 1일이 금요일부터 시작하므로
FRI
~THU
까지 순서대로day[]
에 입력해준다. 특정일의 요일을 구하기 위해서는 1월 1일부터 a월 b일까지의 일수total
을 구해 7로 나머지 연산을 수행하여 나머지만큼 인덱스를 이동해주면 된다.
이 때, 월이 바뀌는 경우에는 각 월의 일수(29, 30, 31)를 한꺼번에 더해주면 편하므로, switch~case문을 통해 a-1월까지의 일수를 더해준다. 그 후 a월이 됐을 때 b일만큼 지났으므로total
에 b일만큼 더 더해주면 된다. 이 때, 1월 1일은 포함하지 않으므로b
가 아닌b-1
을 더해주어야 한다. 최종적으로total
을 7로 나머지 연산한 값을day[]
의 인덱스로 넣어 요일을 리턴한다.
class Solution {
public String solution(int a, int b) {
String[] day = {"FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"};
int total = 0;
for(int i=1; i<a;i++) {
switch(i) {
case 1 :
case 3 :
case 5 :
case 7 :
case 8 :
case 10 :
case 12 : total += 31; break;
case 4 :
case 6 :
case 9 :
case 11 : total += 30; break;
default : total += 29;
}
}
total += b - 1;
return day[total % 7];
}
}
➕ 다른 사람의 코드 1 : 각 월의 일수를 switch~case문이 아닌 배열에 담아서 해결한 코드가 있었다! 확실히 가독성이 좋아졌다,,
class Solution {
public String solution(int a, int b) {
String[] day = {"FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"};
int[] date = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int total = 0;
for(int i=0; i<a-1;i++) {
total += date[i];
}
total += b - 1;
return day[total % 7];
}
}