시작하며...
모든 알고리즘 문제 풀이는 제가 직접 짜서 정답을 맞춘 결과만을 공유합니다.
마지막 'More Solution'은 다른 정답자들 풀이 중 생각지 못했던 부분들이나 좋게 느껴진 풀이법 몇개를 가져와서 공유하였습니다.
[Level 1] 2016년
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT
입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요.
제한 조건
- 2016년은 윤년입니다.
- 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다)
입출력 예
![](https://blog.kakaocdn.net/dn/b4HyGZ/btrVMZkrXrf/sKJXfBW57muyV6LGhs7dTK/img.png)
My Solution
def solution(a, b):
month_days = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
day = ['FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED', 'THU']
if a == 1:
days = b
else:
days = sum(month_days[:a-1]) + b
idx_day = days % 7 - 1
return day[idx_day]
- 일년 열두달의 일수를 담은 배열 month_days와 요일을 담은 day 변수를 생성해준다. 1월1일이 금요일이라고 하였으므로 FRI를 첫번째로 하고 순서대로 입력한다.
- 현재 월, 일이 매개변수 a와 b로 주어지므로 현재까지 경과한 일 수 days를 계산해준다.
- a가 1이라면 1월이므로 days는 b가 된다.
- 1월이 아니라면 month_days에서 현재 월의 전월까지 더해준 뒤(예 : 5월이라면 4월까지 전체 합) 현재 월의 흐른 일수 b를 더해주면 총 경과한 일수를 구할수있다. : sum(month_days[:a-1] + b
- 이제 day 배열에서 현재 요일이 무슨 요일인지 계산을 해주면 되는데, 구해진 days 를 7로 나눈 나머지 값을 이용한다.
- 1월1일인 1이 나오면 -1 을 해서 idx_day가 0이 되기때문에 금요일이 된다.
'Algorithm > Programmers' 카테고리의 다른 글
[Algorithm] 프로그래머스 - 최빈값 구하기 (0) | 2023.01.10 |
---|---|
[Algorithm] 프로그래머스 - 공 던지기 (0) | 2023.01.09 |
[Algorithm] 프로그래머스 - 숫자 문자열과 영단어 (0) | 2023.01.09 |
[Algorithm] 프로그래머스 - K번째수 (0) | 2023.01.09 |
[Algorithm] 프로그래머스 - 문자열 내 마음대로 정렬하기 (0) | 2023.01.06 |
댓글