Creative Commons License

Software Dev

프로그래밍기본
객체지향
프로젝트관리
알고리즘
데이타베이스

소프트웨어 개발에 필수적이고 필요한 주제에 대한 강의 및 공유

.

알고리즘

주어진 문제를 효과적으로 해결하기 위한 문제해결논리에 대해 다룹니다

[문제] 윤년 구하기

작성자 : 박종명
최초 작성일 : 2010-03-25 (목요일)
최종 수정일 : 2010-03-25 (목요일)
조회 수 : 8728

문제>
한 해의 날수가 365일인 해를 평년, 366일인 해를 윤년이라고 한다. 윤년을 판별하는 방법이 다음과 같을 때 서기 2001년부터 서기 2999년 사이에 윤년은 총 몇 번 있는가?(2.5점)

400으로 나누어 떨어지는 해는 윤년이다.
100으로 나누어 떨어지지 않고 4로 나누어 떨어지는 해는 윤년이다.
그 나머지 해는 평년이다.

------------------------------------------------------------------------------------------------------------------------------------

문제를 보면 2001년 ~ 2009년 사이에 윤년이 몇 번 있는지 알아내는 것이다
그리고 윤년의 기준을 설명하고 있다

그런데 윤년의 기준 설명을 보면 살짝 의도적으로 순서를 바꾼 느낌이다

우선, 어떤 수로 나누어 떨어진다는 말은 그 수의 배수라는 뜻이며
4의 배수라 함은 0,4,8,12,16,..  즉 4*n , n은 0을 포함한 양의 정수를 말한다

문제에서 제시한,
100으로 나누어 떨어지는 수와 400으로 나누어 떨어지는 수는 모두 4로도 나누어 떨어진다
왜냐하면 100, 400 모두 4로 나누어 떨어지는 4의 배수이기 때문이다
즉 x가 y의 배수이면 x의 배수는 y의 배수도 되는 것이다

위의 식을 윤년 조건을 다시 정리 해 보면 다음과 같다
4의 배수는 윤년이다
4의 배수 중 100의 배수는 윤년이 아니다
- 100의 배수 중 400의 배수는 다시 윤년으로 한다

계산을 위해 위 조건을 수식으로 다시 표현해 보자
식1) 2001 ~ 2999 사이의 4의 배수 x개
식2) 2001 ~ 2999 사이의 100의 배수 y개 식1에서 제외, x - y
식3) 2001 ~ 2999 사이의 400의 배수 z개 식1에 다시 추가, x + z

이제 식을 차례대로 계산해 보도록 하자

식1) 2001 ~ 2999 사이의 4의 배수 x개 구하기
2000은 4의 배수이다. 어떤 수의 배수끼리의 합은 역시 배수가 되기 때문에 2000은 빼줘도 된다
즉 1 ~ 999 사이의 4의 배수를 구하면 된다

999 / 4 = 249.75 이며 이때 소수점은 무시한다(소수점은 나머지에 해당하므로 배수가 아니다)

따라서 1 ~ 999 사이의 4의 배수는 총 249개가 된다


식2) 2001 ~ 2999 사이의 100의 배수 y개 식1에서 제외, x - y 구하기
역시 1 ~ 999 사이의 100의 배수를 구한다
999/100 = 9.99 로 총 9개가 된다

식1의 결과에서 이 결과를 빼면, 249 - 9 = 240개이다


식3) 2001 ~ 2999 사이의 400의 배수 z개 식1에 다시 추가, x + z 구하기
역시 1 ~ 999 사이의 400의 배수를 구한다
999/400 = 2.4975 로 총 2개가 된다.

식2의 결과에서 이 결과를 다시 더하면, 240 + 2 = 242개이다

따라서 2001 ~ 2999 사이의 윤년의 총 수는 242개이다

이름
비밀번호
홈페이지
LI <- 왼쪽의 문자를 오른쪽 박스에 똑같이 입력해 주세요