-
코딩테스트 연습> 연습문제> 2016년ALGORITHM/Programmers 2020. 6. 28. 21:11728x90
<문제링크: https://programmers.co.kr/learn/courses/30/lessons/12901>
문제설명: 2016년은 1월 1일이 금요일고, solution함수에 a,b로 월과 일이 주어진다. 2016년 기준으로 a월 b일이 무슨요일인지 반환하면 된다. 단, 문제에서 2016년은 윤년으로 2월 29일까지 있다.
[1차 시도]
def solution(a, b): answer = ['THU','FRI','SAT','SUN','MON','TUE','WED'] zero = [4,6,9,11] one = [1,3,5,7,8,10,12] days = 0 for i in range(1,a): if i in zero: days+=30 elif i in one: days+=31 else: days+=29 days+=b return answer[days%7]
풀이: 먼저 a월의 이전 달들의 날짜 수를 더해주어야 한다. 따라서 1월부터 a-1월까지 for문으로 돌아 만약 30일까지 있는 달의 배열인 zero에 속한다면 days에 30씩 더해주고, 31일까지 있는 달의 배열인 one에 속한다면 days에 31씩 더해준다. 둘 다 속하지 않는다면 해당 월이 2월이기 때문에 29일을 더해준다. 마지막으로 a달의 b일을 더해주면 된다.
모두 더한 날짜를 7로 나눈 나머지에 따라 요일의 위치들 찾을 수 있다. 1월 1일이 금요일이라고 했으므로, 나머지가 0인 목요일부터 시작해 모든 요일을 answer배열에 넣고, return값으로 answer의 days를 7로 나눈 나머지의 인덱스로 반환할 수 있다.
채첨결과: 정확성 테스트 14개가 정상적으로 잘 통과한다.
'ALGORITHM > Programmers' 카테고리의 다른 글
코딩테스트 연습> 연습문제> 핸드폰 번호 가리기 (0) 2020.07.01 코딩테스트 연습> 해시> 완주하지 못한 선수 (0) 2020.06.29 프로그래머스> 해시> 위장 (0) 2020.06.26 프로그래머스> 스택/큐> 프린터 (0) 2020.06.25 프로그래머스> 해시 > 전화번호 목록 (0) 2020.06.24