해결했습니다
조회수 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 답변
-
반복문도 필요 없어요. 윤년이라는 것의 정의를 생각해 보면, 이 문제는 계산 공식이 있는 문제입니다.
- 더 큰 연도의 수를
b
, 더 작은 연도의 수를a
라고 한다. a
와b
사이의 수 중4
로 나누어 떨어지는 수의 갯수를c
라고 한다.a
와b
사이의 수 중100
으로 나누어 떨어지는 수의 갯수를d
라고 한다.a
와b
사이의 수 중400
으로 나누어 떨어지는 수의 갯수를e
라고 한다.- 그러면
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;
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
댓글 입력