#연습문제
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12901
풀이
- 날짜를 입력받으면 요일을 return하는 함수를 정의한다.
- 1월 1일을 기준으로 [총 날짜수 % 7]의 값에 따라 요일이 결정됨을 이용한다.
- 윤달 등을 고려하기 위해, 각 달마다 날짜 수를 배열로 저장했다.
- 나머지 값에 따른 요일명을 딕셔너리 형으로 저장했다.
- 이때 나머지 값은 0 ~ 6까지 나올 수 있고, 2016년 1월 1일이 금요일임을 참고해 0:"목" 부터 시작한다.
코드
def solution(a, b):
#나머지 별 요일 저장
day = {0:"THU", 1:"FRI", 2:"SAT",3:"SUN",4:"MON",5:"TUE",6:"WED"}
#각 달별 날짜 리스트로 저장
month = [31,29,31,30,31,30,31,31,30,31,30,31]
#전체 일수 = a *(29/30/31) (a월) + b (b일)
total = b
for m in range(a-1): #1월~a-1월 까지 (a는 포함X)
total+=month[m]
return day[total%7] #나머지에 따른 요일 반환
사실 day는 list로 지정해줘도 상관 없다. 하지만 딕셔너리 형에 익숙해지고자 사용했다.
다른 풀이
- sum()을 이용해 for문 없이 계산했다.
- 역시 예상했듯 요일을 list형에 저장해줬다.
months = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
...
return days[(sum(months[:a-1])+b-1)%7]
+
Sum(iterable)
- 매개변수로 보통 iterable한 자료형인 list가 들어간다. (or 튜플... 순환 접근 가능한 자료형)
- numeric 해야 함
- sum(list명, 디폴트 값)
- 즉, sum() method는 디폴트 값(=start value)부터 list 요소 값을 더한 최종 결과값을 return하는 것이다.
'Algorithm > Programmars' 카테고리의 다른 글
[JAVA] Lv.2 큰 수 만들기 - 프로그래머스 (1) | 2023.12.04 |
---|---|
[Python/Level.1] 두 정수 사이의 합 (0) | 2022.07.26 |
[Python/Level.1] 문자열 내 p와 y의 개수 (0) | 2022.07.12 |
[Python/Level.1] 약수의 개수와 덧셈 (0) | 2022.07.12 |
[Python/Level.1] 음양 더하기 (0) | 2022.07.09 |