본문 바로가기

Java Programming

Zerry82의 신나는 알고리즘 시간! 1st, QuizTest

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
아래의 문제를 풀어보았습니다. 알고리즘 첫번째 시간에 테스트 해본 내용인데..
다들 순식간에 끝내셔서 좀 당황하긴 했지만 'ㅅ';;;
저도 결국에는 저녁먹고 나서.. 풀었습니다 ㅋ_ㅋ 물론 zerry82님 처럼 획기적인 시간 단축은 안되도..

확실히 원하는 값이 나오긴 하네요.


어떤 수열을 만들어내는 다음과 같은 알고리즘을 생각해보자.

어떤 정수 n에서 시작해 n이 짝수면 2로 나누고,
홀수면 3을 곱한 다음 1을 더한다. 이렇게 해서 새로 만들어진 숫자를 n으로 놓고
n=1이 될때까지 같은 작업을 계속 반복한다.

예를 들어, n=22이면 다음과 같은 수열이 만들어 진다.


22     11     34     17     52     26     13     40     20     10     5     16     8     4     2     1

아직 증명되진 않았지만 모든 정수 n에 대해 이 알고리즘을 적용시키면 결국에는
n = 1에 이르게 되는 것으로 추측된다. 그리고 이 가설은 적어도
1,000,000까지의 정수에 대해서는 참이다.

n이라는 값이 입력되었을 때 1이 나올 때까지 만들어진 수의 개수(1 포함)를 n의
사이클 길이(cycle-length)라고 한다. 위에 있는 수열을 예로 들면 22의 사이클 길이는
16이다. i와 j라는 두 개의 수가 주어졌을 때 i와 j사이의 모든 수(i, j포함) 에 대해
최대 사이클 길이를 구하라.

입력은 일련의 정수쌍 i와 j로 구성되며 한 줄에 한 쌍의 수가 입력된다.
모든 정수는 1,000,000보다 작고 0보다 크다.
출력 은 최대사이클 길이를 출력한다.