안녕하세요. 민쯔입니다.😊
프로그래머스 문제를 일주일에 하나씩 풀다 보니까 진도가 못 나가는 기분이 들어서 이제는 틈만 나면 풀려고요!!😤
이번에는 2016년 문제를 풀었는데요. 이번 문제는 단순하게 생각하면 정말 쉬운 문제인 것 같아서
그래서 저도 빠르게 푼 것 같아요.
그럼 해결방안에 대해 설명하겠습니다~
function solution(a, b) {
let mDArr = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
let dW = ['FRI','SAT', 'SUN', 'MON','TUE','WED','THU'];
let sum = 0;
for(let i=0; i<a-1; i++){
sum += mDArr[i];
}
sum = (sum + b - 1) % 7;
return dW[sum];
}
문제 설명
- 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요?
제한 조건
- 2016년은 윤년입니다.
- 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일 같은 날짜는 주어지지 않습니다)
이 해결방안을 이해하려면 윤년이 뭔지부터 알아야 됩니다.
윤년을 검색해 보니
보통 2월은 28일까지 있는데 윤년은 4년마다 한번씩 2월이 28일이 아닌 29일까지 있는 날입니다.
그래서 2016년에 1월부터 12월까지 한 달에 며칠이 있나면
- 1월 31일
- 2월 29일
- 3월 31일
- 4월 30일
- 5월 31일
- 6월 30일
- 7월 31일
- 8월 31일
- 9월 30일
- 10월 31일
- 11월 30일
- 12월 31일
있습니다.
그리고 이 문제는 요일을 구해야 되는 게 문제잖아요?
1월 1일이 금요일이고 +7일마다 같은 요일로 돌아옵니다.
- 1월 1일 금요일
- 1월 8일 금요일
- 1월 15일 금요일
- 1월 22일 금요일
- 1월 29일 금요일
이거보다 보면 규칙이 보이지 않나요?
(7* n) + 1 = 금요일이라는 식이 이게 정말 중요한데 이건 밑에 테스트 1에서 보충해서 설명하겠습니다.
이제 앞에서 말한 정보 "2016년 1월 1일은 금요일입니다.", "2016년은 윤년", "1월부터 12월까지 한 달에 며칠 있는지", "(7* n) + 1 = 금요일"이 정보를 활용해서 2016년 a월 b일 무슨 요일인지를 테스트 1의 예제로 설명하자면
테스트 1

5월 24일의 일 수를 계산하면
1월 + 2월 + 3월 + 4월 + 24일 = 31일 + 29일 + 31일 + 30일 + 24일 = 145일
145일이 됩니다.
앞서 말한 "(7* n) + 1 = 금요일"에서 +1이 있으므로 총일수에 -1을 해줘야 됩니다.
그리고 7로 나눈 나머지 값에 따라 금요일부터 토, 일 이런 식으로 계산을 해주면 됩니다.
(145 -1) % 7 = 4
금요일 다음부터 +4일 -> 토 일 월 화
이렇게 최종적으로 화요일 됩니다.
이걸 코드로 작성하면
1월 ~ 12월 일 수를 배열에 넣기, 금요일 ~ 목요일 배열에 넣기
// 1월부터 12월까지의 일 수 넣기
let mDArr = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
// 금요일 부터 목용일 까지 넣기
let dW = ['FRI','SAT', 'SUN', 'MON','TUE','WED','THU'];
요일은 1월 1일이 금요일이라서 그 순서대로 넣었습니다.
a-1월까지의 일 수 구하기
// a-1월 까지의 일 수 구하기
for(let i=0; i<a-1; i++){
sum += mDArr[i];
}
여기까지가 a가 5라고 하면
1월 ~ 4월까지의 일 수 계산입니다.
최종 일 수 구한 뒤 요일 구하기
sum = (sum + b - 1) % 7;
return dW[sum];
sum + b = 최종 일 수
-1 : 기존 1월 1일의 1일 빼기
'코딩 > 프로그래머스 코딩테스트' 카테고리의 다른 글
[프로그래머스] 부족한 금액 계산하기 (0) | 2021.11.11 |
---|---|
[프로그래머스] 최소직사각형 (0) | 2021.11.09 |
[프로그래머스] 3진법 뒤집기 (0) | 2021.11.05 |
[프로그래머스] 소수 만들기 (0) | 2021.11.01 |
[프로그래머스] 실패율 (0) | 2021.10.25 |