728x90
반응형

https://www.acmicpc.net/problem/1924

 

1924번: 2007년

첫째 줄에 빈 칸을 사이에 두고 x(1 ≤ x ≤ 12)와 y(1 ≤ y ≤ 31)이 주어진다. 참고로 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다.

www.acmicpc.net

문제요약) 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 라이브러리의 간단한 사용법을 

한번 알아보았고, 라이브러리 없이도 푸는방법을 알아보았습니다. 

되도록 라이브러리 없이 풀 수 있는 것이 최선이 아닐까 싶네요!

 

그럼 도움이 되셨다면 공감과 댓글 그리고 구독을 부탁드립니다.!!

 

 

 

 

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기