[ 2016년 ]
https://programmers.co.kr/learn/courses/30/lessons/12901
윤년 구하는 방법
1. 연도가 4로 나누어 떨어지면 윤년
2. 연도가 4, 100으로 나누어 떨어지면 평년
2. 연도가 4, 100, 400으로 나누어 떨어지면 윤년
(2016(윤년))월별 일 수
월 | 1월 | 2월 | 3월 | 4월 | 5월 | 6월 | 7월 | 8월 | 9월 | 10월 | 11월 | 12월 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
일 | 31 | 29 | 31 | 30 | 31 | 30 | 31 | 31 | 30 | 31 | 30 | 31 |
- 입력 받은 일 수가 2016년 1월 1일(금요일)부터 며칠이 지나갔는지 확인
- 배열은 지나간 일 수를 표현해야하므로 위에 표와 다르게 한달 씩 미룬다
(2월1일은 1월1일로 부터 30일이 지났기 때문에)- 지나간 일 수를 7로 나누어 나머지를 확인한다.
- 7로 나눈 몫 만큼 '주'가 지나간 것이고 나머지는 1월 1일(금요일)부터 며칠이 흘렀는지 알 수 있다.
- 지나간 일 수(나머지)는 1월 1일(0일) 부터 시작 했으므로 지나간 일 수에 -1을 뺀다
- 나는 코드에서 금요일을 index=0 에 두었고, 지나간 일 수(나머지) 0에서 -1이 되면 -1이 나오는데 이를 조건문으로 그 전 날인 목요일로 바꿔준다.
public class Solution {
public String solution(int a, int b) {
int day = 0;
if(a>12 || b>31) {
System.exit(0);
}
String[] week = { "FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"};
int[] month = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30};
for(int i=0; i<a; i++) {
day += month[i];
}
day = ((day + b) % 7) - 1;
if(day== -1) {
day = 6;
}
String answer = week[day];
return answer;
}
}
이 문제는 다른 사람의 풀이를 참고하여 힌트를 얻어 풀었던거 같다.
배열을 통해 일 수의 흐름을 표현할 수 있었다는 점에서 아직 코드를 잘 못짜는 나에게 신기하게 다가왔고 배열을 이런 식으로 사용할 수 있음을 깨닳았다.