티스토리 뷰

Python/Algorithm

백준 1924 : 2007년

채애 2021. 1. 21. 14:46

 Python3 

 

' 오늘은 2007년 ' ... 그럼 이 문제는 2007년에 만들어졌던걸까.

그걸 2021년에 풀고 있는 나란 사람. 갑자기 자괴감...

 

2007년 1월 1일은 월요일.

그렇다면 2007년 X월 Y일은 무슨 요일일까?

 

두 가지로 풀어볼 것이다. ( calendar module 사용했을 때, 사용하지 않았을 때 )

 

 

전체 코드 ( calendar module 사용 X ) :

m, d = map(int, input().split())	# X월 Y일 (month,day) 입력

dayList = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
weekList = ["SUN","MON","TUE","WED","THU","FRI","SAT"]
Day = 0

for i in range(m-1):
    Day = Day + dayList[i]
Day = (Day + d) % 7

print(weekList[Day])

 

코드를 뜯어 보면,

day 와 week 리스트를 미리 저장해둔다.

dayList = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
weekList = ["SUN","MON","TUE","WED","THU","FRI","SAT"]

dayList는 1월부터 12월까지 N일까지 있는 것을 저장.

weekList는 일요일~토요일까지 N요일까지 있는 것을 저장.

 

 

여기서 중요한 코드는 이 부분이다.

Day = 0

for i in range(m-1):
    Day = Day + dayList[i]
Day = (Day + d) % 7

range(m-1) 을 사용하여 변수 i 에는 0부터 m-1미만까지 들어간다.

     ...

예를 들어, m = 2 이고 d = 14일 때, i에는 0만 들어간다. 그럼 Day = Day + dayList[0] 이 들어가고,

dayList[0] 은 첫번 째 index인 31이다. 

다음 Day = (Day + d) % 7 에는 윗 줄의 Day + 14 가 7로 나눈 나머지가 Day에 대입된다.

 

#input
 3 14

#output
 WED

 

 

 


이제 파이썬에 있는 calendar module을 사용해 볼 것이다.

 

calendar module 사용

>> [Python/Function & Grammer] - Python : calendar - 달력 관련 라이브러리

 

Python : calendar - 달력 관련 라이브러리

▶ 달력 (calendar) 파이썬에는 날짜와 관련된 라이브러리가 있다. ( calendar module ) 캘린더 라이브러리를 사용하기 위해서는 일단 호출을 해야한다. ▶ 라이브러리 호출 import calendar ' import ' 를 이용

chae-developer.tistory.com

 

 

전체 코드 ( calendar module 사용  ) :

import calendar		# Python calendar module 사용

dayList = ["MON","TUE","WED","THU","FRI","SAT","SUN"]
m, d = map(int, input().split())

Day = calendar.weekday(2007, m, d)
print(dayList[Day])

 

calendar module을 사용하려면, 일단 라이브러리를 호출 해줘야 한다.

import calendar

' 달력 관련 라이브러리 ' 이다.

 

import calendar

#input
print(calendar.calendar(2020))
#output

                                  2020

      January                   February                   March
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
       1  2  3  4  5                      1  2                         1
 6  7  8  9 10 11 12       3  4  5  6  7  8  9       2  3  4  5  6  7  8
13 14 15 16 17 18 19      10 11 12 13 14 15 16       9 10 11 12 13 14 15
20 21 22 23 24 25 26      17 18 19 20 21 22 23      16 17 18 19 20 21 22
27 28 29 30 31            24 25 26 27 28 29         23 24 25 26 27 28 29
                                                    30 31

       April                      May                       June
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
       1  2  3  4  5                   1  2  3       1  2  3  4  5  6  7
 6  7  8  9 10 11 12       4  5  6  7  8  9 10       8  9 10 11 12 13 14
13 14 15 16 17 18 19      11 12 13 14 15 16 17      15 16 17 18 19 20 21
20 21 22 23 24 25 26      18 19 20 21 22 23 24      22 23 24 25 26 27 28
27 28 29 30               25 26 27 28 29 30 31      29 30

        July                     August                  September
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
       1  2  3  4  5                      1  2          1  2  3  4  5  6
 6  7  8  9 10 11 12       3  4  5  6  7  8  9       7  8  9 10 11 12 13
13 14 15 16 17 18 19      10 11 12 13 14 15 16      14 15 16 17 18 19 20
20 21 22 23 24 25 26      17 18 19 20 21 22 23      21 22 23 24 25 26 27
27 28 29 30 31            24 25 26 27 28 29 30      28 29 30
                          31

      October                   November                  December
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
          1  2  3  4                         1          1  2  3  4  5  6
 5  6  7  8  9 10 11       2  3  4  5  6  7  8       7  8  9 10 11 12 13
12 13 14 15 16 17 18       9 10 11 12 13 14 15      14 15 16 17 18 19 20
19 20 21 22 23 24 25      16 17 18 19 20 21 22      21 22 23 24 25 26 27
26 27 28 29 30 31         23 24 25 26 27 28 29      28 29 30 31
                          30

이렇게 이 라이브러리를 이용하면, 해당 년도의 깔끔한 달력을 볼 수도 있다. (TMI)

 

 

calendar.weekday() 함수 이용
dayList = ["MON","TUE","WED","THU","FRI","SAT","SUN"]
Day = calendar.weekday(2007, m, d)

2007년 m월 d일의 해당 요일을 Day에 대입한다.

요일은 ( 0 : 월요일 ~ 6 : 일요일 ) 이기 때문에, calendar module을 사용하지 않은 코드와 달리 dayList[] 가 월요일부터 시작한다.

 

 

이 라이브러리를 이용하여 더 짧고 간단한 파이썬의 장점을 활용해서 문제를 풀 수 있다.

 

 

 

 

 

 

 

 

해당 문제 : 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

 더 많은 입출력 예제는 위 사이트 클릭! 하면 볼 수 있다.

'Python > Algorithm' 카테고리의 다른 글

백준 10818 : 최소, 최대  (0) 2021.01.23
백준 8393 : 합  (0) 2021.01.21
백준 2739 : 구구단  (0) 2021.01.21
백준 2741,2742 : N 찍기, 기찍 N  (0) 2021.01.21
백준 11721 : 열 개씩 끊어 출력하기  (0) 2021.01.20
댓글