|
[제한조건]
- 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 값을 적용해 준다.
달리기반 첫문제였는데도 쉽지 않다. 정말 열심히 해야할 거 같다. ㅠ
'Coding Test > Algorithm' 카테고리의 다른 글
Programmers] 자릿수 더하기 (0) | 2022.11.18 |
---|---|
Programmers] 나누어 떨어지는 숫자 배열 (0) | 2022.11.18 |
Programmers] 완주하지 못한 선수 (0) | 2022.11.18 |
Programmers] 수박수박수박수박수박수? (0) | 2022.11.18 |
Programmers] 이상한 문자 만들기 (0) | 2022.11.18 |