본문 바로가기

Algorithm/프로그래머스

프로그래머스 level1 문제 : 2016년

반응형

문제는 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을 해주어 날짜를 맞춰주었습니다!!!


그럼 이상 문제풀이였습니다!!!(%와 /의 차이는 당연히 알거라 생각합니다.)

반응형