
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12901
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
- 2016년 1월 1일은 금요일일 때, 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 반환
- 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT
예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환 - 제한 조건
2016년은 윤년 → 2월은 29일까지
2016년 a월 b일은 실제로 있는 날 (13월 26일이나 2월 45일같은 날짜는 주어지지 않음)
정답 코드
def solution(a, b):
# 각 월별 일수 (윤년이므로 2월은 29일)
days_in_month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# 요일 리스트 (2016년 1월 1일은 금요일)
week = ["FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"]
# 1월 1일부터 a월 b일까지의 총 일수 계산
total_days = sum(days_in_month[:a-1]) + b - 1
# 총 일수를 7로 나눈 나머지에 해당하는 요일 반환
return week[total_days % 7]
코드 설명
- week 리스트 : 계산의 편의를 위해 "FRI"부터 시작
- total_days 계산 :
- sum(month_days[:a-1]): 입력받은 a월 이전까지의 모든 달의 날짜 수 더하기
- + b: 현재 달의 날짜 b를 더하기
- - 1: 1월 1일을 기준으로 계산하기 때문에 1 빼기
- 요일 반환 :
- total_days % 7: 총 일수를 7로 나눈 나머지 (0부터 6까지의 값을 가지며, day_of_week 리스트의 인덱스 역할)
- day_of_week[...]: 계산된 인덱스에 해당하는 요일을 리스트에서 찾아 반환
첫 번째 시도 (정답, 개선 필요)
def solution(a, b):
days_in_month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
week = ["FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"]
days = sum(days_in_month[:(a-1)]) + b
return week[(days-1)%7]
- 불필요한 괄호 줄이기
- 직관적인 날짜 계산: b-1을 직접 사용하는 방식으로 코드의 가독성을 높이기
'코딩 테스트 연습 > [프로그래머스] Python' 카테고리의 다른 글
| [LV.3] 연습문제 > 과일 장수 (3) | 2025.07.29 |
|---|---|
| [LV.3] 연습문제 > 카드 뭉치 (2) | 2025.07.25 |
| [LV.3] 연습문제 > 명예의 전당 (1) ⭐️ (1) | 2025.07.21 |
| [LV.3] 연습문제 > 콜라 문제 (3) | 2025.07.17 |
| [LV.3] 연습문제 > 푸드 파이트 대회 (0) | 2025.07.15 |