0. 문제

1. 풀이
#include <bits/stdc++.h>
using namespace std;
string solution(int a, int b) {
string answer = "";
unordered_map<int, int> monthDay = {
{1, 31},{2, 29},{3, 31},{4, 30},{5, 31},{6, 30},{7, 31},{8, 31},
{9, 30},{10, 31},{11, 30},{12, 31}
};
string str[7]={"FRI","SAT","SUN","MON","TUE","WED","THU"};
int tmp=0;
for (int i=1;i<a;++i){
tmp+=monthDay[i];
}
tmp = (tmp+b-1)%7;
answer = str[tmp];
return answer;
}
딱 문제를 봤을 때, modular연산으로 찾아야겠다는 생각이 들었다.
그래서 직접 달력 날짜 그려서 한 번 해봤고, 잘 풀려서 그대로 코드로 구현했다.
우선 나의 경우는 월별 일자를 해시로 설정했다.
(그런데 다른 풀이 보니까 배열로 많이 구현하고 있었다. 월을 인덱스로 해서 배열로 하면 초기화는 훨씬 수월할 것 같다.)
그리고 요일을 배열로 했는데, 1월 1일이 금요일이라고 해서 시작 요일을 0번 인덱스로 잡았다.
주어진 값이 만약에 3월 14일이라면,
1월 1일부터 2월까지의 날짜를 모두 더하는 것이다. (31+29)
여기서 3월 14일이라는 날짜가 1월 1일부터 얼마나 떨어져 있나를 구한다. (31+29 -1)
그리고 나서 모듈러 연산을 해준다. 7로 나눈 나머지가 바로 요일의 인덱스가 되는 방식이다.!
'PS > Programmers' 카테고리의 다른 글
| [SQL] SQL NULL값인 컬럼 처리하기 (IFNULL) (0) | 2026.01.07 |
|---|---|
| [프로그래머스/C++] 가장 가까운 같은 글자 (lv1) (0) | 2025.10.21 |
| [프로그래머스/C++] 알고리즘 고득점 키트 - 베스트앨범 (1) | 2025.07.04 |
| [프로그래머스/C++] 알고리즘 고득점 키트 - 체육복 (0) | 2025.05.21 |
| [프로그래머스/C++] 알고리즘 고득점 키트 - K 번째 수 (0) | 2025.05.20 |