반응형
문제는 2016년 a월 b일이 무슨 요일인지 맞추는 것입니다.
조건은, 2016년은 윤년이며, 1월 1일은 금요일입니다.
저는 날짜를
일월화수목금토일
1 2 3
4 5 6 7 8 9 10 11
이런식으로 써놓고, 계산을 미리 해봤습니다.
int[] days = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int[] month = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
String[] week = {"FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"};
위처럼 구성해놓고(월과 일은 귀찮아서 0을 앞에 붙였습니다..), 예를 들어, 2월 5일은 1월의 31일 +5일 => 36일입니다.
36일 / 일주일(7일) = 5... 1 이 됩니다. 즉, 요일이 한바퀴 돈 후 +1이 남는거죠.
여기서 문제!
날짜를 "배열"로 넣었기 때문에 1은 즉, 배열의 0번째를 나타내게 구성해놓는게 중요합니다!
따라서, 36/7 = 5...1 나머지 1일은 0번째 요일 즉, 금요일이 되는 것입니다.
이렇게 해놓고 토달 일을 구한 뒤, 토탈일수/7이 나머지가 0일때와 1일때만 구분해주면 답은 아래와 같습니다!
int[] days = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int[] month = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
String[] week = {"FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"};
int totalDay = 0;
for (int i = 0; i < month[a]; i++) {
totalDay += days[i];
}
if(((totalDay + b) % 7) == 0) {
return week[(totalDay + b) % 7 +6];
} else {
return week[(totalDay + b) % 7 - 1];
}
왜 0일때 +6을 해주었는가!?!? 라고 질문하시면, 생각해보세요. 0-1 = -1입니다. -1인 배열이 있을까요? 없지요?
그러므로 -1 대신 +6을 해주어 날짜를 맞춰주었습니다!!!
그럼 이상 문제풀이였습니다!!!(%와 /의 차이는 당연히 알거라 생각합니다.)
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
프로그래머스 level1 문제 : 완주하지 못한 선수(java) (0) | 2018.10.10 |
---|---|
프로그래머스 level1 문제 : 나누어 떨어지는 숫자 배열(java) (0) | 2018.06.01 |
프로그래머스 level1 문제 : 올바른 괄호(java) (0) | 2018.06.01 |
프로그래머스 level1 문제 : 같은 숫자는 싫어 (0) | 2018.05.31 |
프로그래머스 Level1 (0) | 2018.05.22 |