https://school.programmers.co.kr/learn/courses/30/lessons/12901
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
하... 너무너무 귀찮아서 포스팅을 미뤘다...
그렇다고 문제를 안풀고 그냥저냥 방구석에서 굴러다닌 건 아니다. 풀어둔 문제로 앨범 두개 뚝딱 나올거 같다.
이제 밀린 포스팅 시작합니다
연, 월, 일 을 받아서 요일을 반환하는 문제다.
이 문제를 읽어보니 영화 썸머워즈가 생각난다.
주인공이 여주의 태어난 날의 요일을 맞추는 장면이 영화 초반에 등장한다.
나는 이 문제를 풀기 위해 요일 계산법을 찾아보았다.
https://blog.naver.com/akdlwng/221513865412?viewType=pc
암산으로 요일 계산하는 방법!!
어릴 적 어머니로부터 배운 지식입니다. 아무렇게나 한 날짜를 정해서 그 날의 요일을 맞추는 방법! 먼저, ...
blog.naver.com
이 블로그의 계산 방법을 활용했다.
먼저 144 025 036 146 이 숫자들을 외워야 한다.
각 1월 ~ 12월에 대응하는 숫자다.
이 월에 대응하는 숫자에 일을 더한다.
만약 1월 25일이라면
1(1월) + 25 = 26이 되는 것이다.
이제 이 더한 숫자에 7로 나누어 나머지를 구한다.
26 / 7 = 3 ... 5가 되어
최종 숫자는 5가 나온다.
이제 나오는 숫자 1 ~ 7(7은 0과 같이 취급)은
월 ~일요일까지 대응하는 숫자가 된다.
그래서 2019년 1월 25일은 숫자 5에 대응하는 금요일이다.
하지만 주의사항
연도에 따른 보정 숫자를 넣어줘야 한다. 이 보정숫자는 마지막 계산에 더해준다.
2019년 기준 보정 숫자가 0이다. 그리고 이 보정숫자는 매년 1씩 증가하고 7까지 증가한다.
그리고 윤년(2월에 29일까지 있음)도 있기 때문에 고려해주어야 한다.
4년 주기로 윤년이 돌기 때문에 2월 이후에는 1을 또 더해주어야 한다.
2019년 보증 숫자 0
2020년 2월까지 보증 숫자 1
2020년 3월부터 보정 숫자 2
2021년 보정 숫자 3
2022년 보정 숫자 4
2023년 보정 숫자 5
2024년 2월까지 보정 숫자 6
2024년 3월부터 보정 숫자 7(7 = 0)
2025년 보정 숫자 1
그래서 포스팅 기준 날짜인 2025년 1월 25일은
(1 + 25) / 7의 나머지 5에 1을 더해서 6
6에 대응하는 요일 토요일이 나오게 된다.
기준년을 하나 외워둔다면 어렵지 않게 쓸 수 있는 계산법이다.
// 프로그래머스 2016년
// 2016년의 월, 일이 매개변수로 주어진다 그날의 요일 반환
// 2016년은 윤년이라 2월에 29일까지 있음. 총 366일
// 날짜 구하는 공식을 이용함
// 144 025 036 146 각 월에 해당하는 날짜임
// 월에 해당하는 숫자 + 일
// 합계 % 7 의 값이 요일
// 2016년의 보증숫자 3 2월 이후에는 4
class Solution {
public String solution(int a, int b) {
String[] day = { "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT" };
int[] arr = { 1, 4, 4, 0, 2, 5, 0, 3, 6, 1, 4, 6 };
// 2월 이후로 1일씩 더 늘어나니까 1 더해줌
int tmp = a > 2 ? (arr[a - 1] + b + 4) % 7 : (arr[a - 1] + b + 3) % 7;
return day[tmp];
}
}
2019년이 보정 숫자가 0이었으니까
2018년은 6
2017년은 5
2016년 3월 이후 4
2016년 2월까지 3
이라는 보증 숫자를 넣어 계산했다.
'프로그래머스' 카테고리의 다른 글
[프로그래머스] 구명보트 (JAVA) (3) | 2025.01.25 |
---|---|
[프로그래머스] 이진 변환 반복하기 (JAVA) (3) | 2025.01.25 |
[프로그래머스] 덧칠하기 (JAVA) (2) | 2024.12.28 |
[프로그래머스] 추억 점수 (JAVA) (0) | 2024.12.28 |
[프로그래머스] 달리기 경주 (JAVA) (0) | 2024.12.28 |