https://www.acmicpc.net/problem/1924
문제요약) 2007년 1월 1일이 월요일일 때, 2007년 x월 y일이 무슨 요일인지 출력하는 문제입니다.
이 문제는 두가지 풀이가 있는데, 라이브러리를 사용하냐 안하냐의 차이가 있을 거 같습니다.
#풀이1 : 라이브러리 사용
파이썬의 calendar 라이브러리를 사용하는 방법인데요.
import calendar
arrList = ["MON","TUE","WED","THU","FRI","SAT","SUN"]
a,b = map(int,input().split())
Day = calendar.weekday(2007,a,b)
print(arrList[Day])
calendar.weekday(년도, 월, 일)
0 | 1 | 2 | 3 | 4 | 5 | 6 |
월 | 화 | 수 | 목 | 금 | 토 | 일 |
요일을 한글이나 영어가 아닌 위의 표에 맞는 숫자를 출력합니다.
+ calendar의 다른 명령어도 알아보겠습니다.
calendar.calendar(2007)
이 명령어는 무려 달력이 통째로 나옵니다.
calendar.monthrange(2021,2)
이 명령어는 입력한 '년도' '월'의 1일의 요일과 마지막 일을 출력합니다.
예를 들어 2021년 2월 이라고 하면
2021-02-01은 '월요일(0)' / 2021-02-28(마지막 날)의 '28일'이 됩니다.
-> 출력값 (0,28)
#풀이2: 라이브러리 사용 안하고 풀기
라이브러리를 사용하면 간단하긴 하지만, 막상 코딩테스트를 볼 때 라이브러리의 명령어를 떠올리기란 쉽지 않죠..ㅎㅎ
그렇다면 라이브러리를 사용안하고 문제를 푸는 방법도 한번 알아보겠습니다.
Day = 0
arrList = [31,28,31,30,31,30,31,31,30,31,30,31]
weekList = ["MON","TUE","WED","THU","FRI","SAT","SUN"]
a,b = map(int,input().split())
for i in range(a-1):
Day = Day + arrList[i]
Day = (Day+b) % 7
print(weekList[Day-1])
라이브러리를 사용했을 때보다 코드가 길어지긴했지만, 생각보다 코드양이 그렇게 많이 늘어나진 않았습니다.
간단한 원리로 문제를 해결할 수 있습니다.
먼저, 1월 1일부터 몇 '월'인지 입력받은 값으로 부터의 날짜를 모두 더해준다고 생각하면 되는데요.
그리고 몇 '일'인지 입력받은 값을 마지막에 더해줍니다.
예를 들어 3월 14일이면,
for문을 이용해 1월 + 2월의 날짜를 모두 더합니다. (31+28)
그리고 14일을 마지막에 더해주는데요.
그러면 1월 1일부터 3월 14일까지의 날짜를 모두 더한 값을 구할 수 있습니다.
이제 1월 1일이 월요일이라고 했으니까 7로 나누면 나머지 값에 따라 3월 14일이 무슨 요일인지 알 수가 있습니다.
(나머지가 0부터 6까지 일월화수목금토 순서이겠죠?)
백준 1924번문제를 calendar 라이브러리를 이용해서 푸는 방법과 더불어 calendar 라이브러리의 간단한 사용법을
한번 알아보았고, 라이브러리 없이도 푸는방법을 알아보았습니다.
되도록 라이브러리 없이 풀 수 있는 것이 최선이 아닐까 싶네요!
그럼 도움이 되셨다면 공감과 댓글 그리고 구독을 부탁드립니다.!!
'알고리즘 TIL' 카테고리의 다른 글
[파이썬python] 백준 10799번 - 쇠막대기 (3) | 2022.01.26 |
---|---|
[파이썬python] 백준 10989번 - 메모리 초과 (14) | 2022.01.25 |
[파이썬python] 백준 2751번 - merge sort (1) | 2022.01.25 |
[파이썬python] 백준 10992번 (2) | 2022.01.25 |
[파이썬python] 백준 10991번 - end옵션 (8) | 2022.01.22 |
최근댓글