본문바로가기
[오일러 프로젝트] 21세기에서 매월 1일이 일요일인 경우는 몇 번일까?
수학동아 2020.11.27 12:55 조회 637

 

코.알.못 홍 기자의 코딩 도전기

코딩의 ‘코’자도 모르는 코.알.못. 홍 기자가 수학 문제를 코딩으로 푸는 오일러 프로젝트 문제를 하나하나 해결해 나갈 예정입니다. 오일러 프로젝트는 수학과 프로그래밍 실력을 모두 키울 수 있도록 2001년에 만든 수학 문제 웹사이트입니다. 홍 기자와 함께한다면 수학과 파이썬 모두 정복할 수 있지 않을까요?

 

 

몸짱 소방관 달력이나 몸짱 경찰관 달력을 들어보셨나요?

재능기부로 매년 달력을 만들고, 수익금을 소외계층에게 기부하는 ‘착한 달력’인데요,

수학자 레온하르트 오일러도 동참하겠다며 나섰습니다.

마음이 너그러워지는 연말이라지만, 오일러 달력 사고 싶은 분 있나요? 일단 저는 패스~!

 

 

<오일러 프로젝트 19번>

2000년 1월 1일은 토요일입니다.

2001년 1월 1일부터 2100년 12월 31일까지를 이르는 21세기에서

매월 1일이 일요일인 경우는 총 몇 번일까요?

 

다사다난했던 2020년이 가고 2021년이 다가옵니다. 올해 달력은 넣어두고 내년 달력을 가져와 살펴보는 때인데요, 오일러 프로젝트에도 달력과 관련된 문제를 골라봤습니다. 윤년에 맞춰 날짜 수가 바뀌는 2월을 유의하며, 문제를 풀어보겠습니다!

 

 

파이썬 완전정복! '코딩으로 미래의 달력 살펴보기'

 

1. 주어진 연도가 윤년인지 판단하기

윤년의 조건은 두 가지입니다. 하나는 400으로 나눠떨어지는 연도고, 다른 하나는 4로 나눠떨어지지만 100으로는 나눠떨어지지 않는 연도입니다. 연도를 변수 y로 둘 때, 두 조건을 연산자 or로 묶어 윤년을 찾는 is_leap 함수를 정의합니다.

 

 

2. 기준일부터 매달 1일까지의 날짜 수 세기

요일을 아는 2000년 1월 1일 토요일부터 매달의 날짜 수를 더해 연도 ym번째 달 1일까지의 날짜 수를 구합니다. ‘DAYS’라는 리스트에 월별 날짜 수를 미리 저장해뒀다가 불러오며, 윤년이라면 2월의 날짜 수에 1을 더합니다.

 

 

3. 매달 1일의 요일 찾기

일요일부터 토요일까지를 0번째부터 6번째 요일이라 정하고 각 순서를 변수 ‘dw’로 나타냅니다. 요일은 7일 단위로 반복되기 때문에, 매달 1일까지의 날짜 수를 7로 나눈 나머지를 구해 요일을 알아냅니다. 예를 들어 2000년 1월 1일 토요일부터 7일 뒤라면 나머지가 0이라 토요일이겠지만, 8일 뒤라면 나머지가 1이라 0번째 요일인 일요일이 되겠죠.

 

 

 

도전! 오일러 프로젝트 19번 문제 뽀개기

* 코딩 언어는 Python으로 두고 실행하세요!

 

 

#8 21세기에서 매달 1일이 일요일인 경우를 찾는 함수 e019를 정의합니다.

#9 기준일인 2000년 1월 1일은 토요일이므로 dw의 초깃값을 6으로 둡니다.

#10 매달 1일이 일요일인 경우의 수를 변수 cnt로 나타내고 초깃값을 0으로 합니다.

#11, 12 range 함수의 범위는 (시작 숫자, 마지막 숫자+1)이라는 점을 참고해 검색할 기간을 입력합니다.

#13 21세기는 2001년부터 시작하므로, 연도가 2000보다 크면서 매달 1일이 0번째 요일, 즉 일요일인 경우를 셉니다.

#14 한번 검사할 때마다 날짜를 한 달 뒤로 넘기고, 변수 dw를 해당 월 1일의 요일 값으로 바꿉니다.

#15 2000년부터 2100년까지 확인이 끝나면 최종 cnt 값을 돌려줍니다.

 

 

Bonus! 오일러 퀴즈

오일러 프로젝트 19번 문제를 위 코딩창에서 풀어보고, 다음 예제 문제에도 도전해보세요!

 

① 2001년 1월 1일부터 2100년 12월 31일까지 매달 1일이 월요일인 경우는 총 몇 번인지 구해보자.

    Hint. ⑥의 if문에서 dw 값을 바꿔보자.

 

② 2101년 1월 1일부터 2200년 12월 31일까지인 22세기에서 매달 1일이 일요일인 경우는 총 몇 번인지 구해보자.

    Hint. 2100년 1월 1일은 금요일이다.

 

 

2021년엔 조금 더 새로운 모습으로 오일러 프로젝트가 돌아옵니다!

기대해주세요~:)

미리 해피 뉴 이어!

 

  •  
    리퍼 Lv.6 2020.12.22 20:14 비밀댓글
    확인요청중
    비밀 댓글이 등록 되었습니다.
    댓글 작성하기 댓글수0
  • 폴리매스 문제는 과학기술진흥기금 및 복권기금의 재원으로 운영되고, 과학기술정보통신부와 한국과학창의재단의 지원을 받아 수행된 성과물로 우리나라의 과학기술 발전과 사회적 가치 증진에 기여하고 있습니다.

  • ☎문의 02-6749-3911