해결했습니다

조회수 789회

해결했습니다 감사합니다


* 내용복구

1583년 이후 인 두 개의 연도를 입력 받아, 빠른 연도의 1월1일부터 늦은 연도의 1월1일까지의 경과일을 출력하시오. 두 연도가 같을 때까지 반복 실행된다.

연도를 입력하시오: 2016
연도를 입력하시오: 2017
2016년 1월1일 ~ 2017년 1월1일: 366일
연도를 입력하시오: 2016
연도를 입력하시오: 2010
2010년 1월1일 ~ 2016년 1월1일: 2191일
연도를 입력하시오: 2500
연도를 입력하시오: 2000
2000년 1월1일 ~ 2500년 1월1일: 182622일
연도를 입력하시오: 2010
연도를 입력하시오: 2019
2010년 1월1일 ~ 2019년 1월1일: 3287일
연도를 입력하시오: 2019
연도를 입력하시오: 2019

*윤년도 고려해야하고 datetime 도 사용하면 안된다고 합이다 ㅠㅠㅠㅠㅠㅠㅠㅠㅠ 코드를 모르겠습니다 ㅠㅠㅠ

2 답변

  • 반복문도 필요 없어요. 윤년이라는 것의 정의를 생각해 보면, 이 문제는 계산 공식이 있는 문제입니다.

    1. 더 큰 연도의 수를 b, 더 작은 연도의 수를 a라고 한다.
    2. ab 사이의 수 중 4로 나누어 떨어지는 수의 갯수를 c라고 한다.
    3. ab 사이의 수 중 100으로 나누어 떨어지는 수의 갯수를 d라고 한다.
    4. ab 사이의 수 중 400으로 나누어 떨어지는 수의 갯수를 e라고 한다.
    5. 그러면 a년과 b년 사이에 있는 날의 수는 365*(b-a) + c - d + e
      • 365 * (b-a) : 윤년을 계산하지 않았을 때의 기본값
      • + c : 윤년이 끼어 있는 횟수만큼 하루를 추가
      • - d : '100년에 한 번씩 윤년 취소'를 하므로 그 취소되어야 하는 윤년의 수만큼 하루를 배제
      • + e : '400년에 한 번씩 취소한 윤년을 다시 추가'하므로 그 재설정된 윤년의 수만큼 하루를 추가

    이제 이 공식을 파이썬으로 구현하시면 됩니다! 방금 데모를 짜보았는데 주어진 예시대로 잘 계산됩니다. 직접 해보세요!

  • for문으로 빠른연도 ~ 느린연도까지 반복문돌려주면서 i = 연도라고 생각하시고 4로 나누어 떨어지면 366을 더하시고 4로어 나누어 떨어지지만 100으로 나누어 떨어지면 365를 더한값을 보여주면 되지 않을까요?

    for i := 빠른연도 to 느린연도 do
    begin
      if (i mod 4) = 0 then
      begin
        if (i mod 100) = 0 then
          sumday := sumday + 365
        else sumday := sumday+ 366;
      end;
    end;
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)