TIL

TIL - 프로그래머스 「2016년」

think95592 2026. 7. 1. 20:35

문제

2016년 1월 1일이 금요일일 때, 입력받은 날짜의 요일을 구하는 문제.


풀이 아이디어

  1. 각 월의 일수를 배열에 저장한다.
  2. 1월 1일부터 입력받은 날짜 전날까지의 총 일수를 계산한다.
  3. 총 일수를 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 사이의 값이 되어 요일 배열의 인덱스로 바로 사용할 수 있다.


느낀 점

이번 문제는 날짜 계산 문제처럼 보였지만, 실제 핵심은 배열 인덱스나머지 연산을 이용한 순환 구조를 이해하는 것이었다.

앞으로 요일, 원형 배열, 순환 큐처럼 일정한 주기로 반복되는 문제에서는 % 연산을 먼저 떠올려 보는 습관을 가져야겠다.