본문 바로가기

Julia

오일러 프로젝트 19 (Julia)

이번 문제는 20세기에서 매 월의 1일이 일요일인 날의 수를 구하는 문제이다. 하루씩 날짜를 더해가면서 계산하는 방법도 있으나, 다른 블로그에서 소개한 적도 많으므로 간단히 Dates 모듈을 사용해서 푸는 방법을 알아보겠다. Dates 모듈은 날짜와 관련한 자료형과 함수를 제공한다. 기본적으로 Date를 사용해서 날짜 데이터를 만들 수 있다. Date에는 "yyyy-mm-dd" 형식으로 된 문자열을 넘겨줄 수도 있고 년, 월, 일을 정수로 각각 넘겨주는 것도 가능하다.

Dates.dayofweek() 함수는 주어진 날짜의 요일을 찾는다. 월요일=1, 화요일=2... 이런 식으로 매칭되어 있으므로 일요일은 7이다. 사실 줄리아의 요일 구성이 ISO 표준에 잘 들어맞는데, 요일 관련해서는 언어마다 규격이 다르고 뭔가 엉망진창이라 엄청 헷갈린다. 줄리아는 친절하게도 dayname()이라는 함수를 제공해서 요일을 이름으로 판단할 수 있게 해준다.

자, 그럼 문제를 풀어보면 1901년부터 2000년까지 매월 1일의 날짜에 대해서 일요일인 경우를 세면 되는 것이다. 풀이는 무척 간단하다. 조건에 맞는 경우에 대해서만 1을 배열에 넣고 합하면 개수가 된다.

using Dates

[1 for y=1901:2000, m=1:12 if Dates.dayname(Date(y, m, 1)) == "Sunday"] |> sum |> println