반응형
츄르사려고 코딩하는 코집사입니다.
1. [백준 알고리즘] 백준 14920번 3n+1 수열 자바(JAVA)
1) 문제번호 : 14920번
2) 문제 출처
https://www.acmicpc.net/problem/14920
2. 문제
다음의 점화식에 의해 정해지는 수열 C(n)을 생각하자:
C(n+1) = C(n)/2 (C(n)이 짝수일 때)
= 3*C(n)+1 (C(n)이 홀수일 때)
초항 C(1)이 자연수로 주어지면, 이 점화식은 자연수로 이루어지는 수열을 정한다. 예를 들어, C(1)=26이면, 다음의 수열이 된다.
26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 4, 2, 1, 4, 2, 1, ...
이 경우, 수열의 뒷부분은 4, 2, 1 이 끝없이 반복된다. 실제로 C(1)이 5×260보다 작은 자연수인 모든 수열은 언젠가는 4, 2, 1로 끝나게 된다는 것이 알려져 있다.
주어진 입력 C(1)에 대하여 C(n)이 처음으로 1이 되는 n을 출력하시오.
3. 제약사항
4. 입력
C(1); 1 ≤ C(1) ≤ 100000
5. 출력
C(n)이 처음으로 1이 되는 n
6. 풀이
- 값을 입력받고, N 값이 1이라면 1만 출력하고 끝낸다.
- N이 1이 아니라면 TN으로 값처리를 한 값을 TN으로 설정하고, 마지막에 N에 TN값을 넣는다.
- 그래서, N이 짝수, 홀수에 따라 분기 처리를 하여 점화식에 의거하여 값을 구한다.
7. 소스 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
if(N == 1) {
System.out.println(1);
} else {
int cnt = 1;
int TN = 0;
while(true) {
if(TN == 1) {
System.out.println(cnt);
break;
}
if(N % 2 == 0) {
TN = N / 2;
} else {
TN = (3 * N) + 1;
}
N = TN;
cnt++;
}
}
}
}
반응형
'알고리즘 > 백준 알고리즘' 카테고리의 다른 글
[백준 알고리즘] 백준 2744번 대소문자 바꾸기 자바(JAVA) (0) | 2022.08.06 |
---|---|
[백준 알고리즘] 백준 24723번 녹색거탑 자바(JAVA) (0) | 2022.05.24 |
[백준 알고리즘] 백준 25083번 새싹 자바(JAVA) (0) | 2022.05.20 |
[백준 알고리즘] 백준 1235번 학생 번호 자바(JAVA) (0) | 2022.05.02 |
[백준 알고리즘] 백준 2822번 점수 계산 자바(JAVA) (0) | 2022.04.07 |
[백준 알고리즘] 백준 2167번 2차원 배열의 합 자바(JAVA) (0) | 2022.04.03 |
[백준 알고리즘] 백준 3711번 학번 자바(JAVA) (0) | 2022.03.30 |
[백준 알고리즘] 백준 2204번 도비의 난독증 테스트 자바(JAVA) (0) | 2022.03.29 |
최근댓글