문제
2016년 1월 1일이 금요일일 때, 입력받은 날짜의 요일을 구하는 문제.
풀이 아이디어
- 각 월의 일수를 배열에 저장한다.
- 1월 1일부터 입력받은 날짜 전날까지의 총 일수를 계산한다.
- 총 일수를 7로 나눈 나머지를 이용해 요일 배열의 인덱스로 사용한다.
지난 날짜 수 = 이전 달들의 날짜 합 + (현재 날짜 - 1)
요일 배열
["FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"]
최종적으로
요일 = day[(지난 날짜 수) % 7]
배운 점
1. 월별 일수는 규칙으로 계산하면 안 된다.
처음에는 홀수 달은 31일, 짝수 달은 30일이라고 생각했지만 8월부터 규칙이 깨진다.
따라서 월별 일수를 배열에 저장하는 것이 가장 안전하고 간단하다.
vector<int> month = {31,29,31,30,31,30,31,31,30,31,30,31};
2. 배열 인덱스와 실제 월 번호는 다르다.
배열은 0부터 시작하지만 월은 1부터 시작한다.
따라서 이전 달의 날짜를 더할 때는
month[i - 1]
처럼 접근해야 한다.
3. % 연산으로 반복되는 패턴을 처리할 수 있다.
요일은 7일마다 반복된다.
예를 들어
- 0일 후 → 금요일
- 7일 후 → 금요일
- 14일 후 → 금요일
이므로
지난날짜수 % 7
의 결과는 항상 0~6 사이의 값이 되어 요일 배열의 인덱스로 바로 사용할 수 있다.
느낀 점
이번 문제는 날짜 계산 문제처럼 보였지만, 실제 핵심은 배열 인덱스와 나머지 연산을 이용한 순환 구조를 이해하는 것이었다.
앞으로 요일, 원형 배열, 순환 큐처럼 일정한 주기로 반복되는 문제에서는 % 연산을 먼저 떠올려 보는 습관을 가져야겠다.
'TIL' 카테고리의 다른 글
| [UE5] ProjectFT#1 UI 리팩터링 - WidgetSwitcher 적용 (0) | 2026.07.03 |
|---|---|
| TIL - 카드 뭉치 문제 풀이와 UI 구조 개선 방향 (0) | 2026.07.02 |
| [언리얼 GAS 이해하기] #7 GAS 전체 구조 한눈에 보기 (0) | 2026.06.30 |
| [언리얼 GAS 이해하기] #6 GameplayAbility는 네 요소를 어떻게 사용할까? (0) | 2026.06.29 |
| 트러블슈팅 - 레벨 전환/Restart 중 크래시 해결 (0) | 2026.06.27 |