백준발행일 2023. 5. 14.원본 https://blog.naver.com/jword_/223101365889 ↗

코딩테스트 기초 반복문 연습 - 콜라츠 추측

코딩테스트 기초 반복문 연습 - 콜라츠 추측 — #코딩테스트 #콜라츠추측 AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다 콜라츠 ...

#백준#Naver Blog

#코딩테스트 #콜라츠추측

​

AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다

콜라츠 추측

반복문 연습문제

이미지

문제

💡 다음 작업을 수행하는데 총 몇 번이나 반복해야하는지 출력하라. 단, 작업을 500번 반복해도 1이 되지 않는 경우 -1을 출력하라.
1-1. 입력된 수가 짝수라면 2로 나눈다. 1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더한다. 2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복한다.
입력자연수 N (1 ≤ N ≤ 8000000)이 입력된다.입력은 항상 정확하다.​출력총 반복한 숫자 C를 출력한다.

예제 입출력

이름입력출력설명
기본 1686→3→10→5→16→8→4→2→1
기본 216416 -> 8 -> 4 -> 2 -> 1
기본 3626331-1500번을 넘음(508번)
예외 11585403499
예외 23170807500
예외 31056935-1501번
경계값 110
경계값 221
경계값 38000000155

문제풀이

자연수를 입력받기

이전 문제들과 동일하게 자연수를 입력 받습니다.

num = int(input('자연수를 입력하세요: '))

​

입력 num값 조정하기

num이 짝수인지 홀수인지에 따라 num값이 지속적으로 변경되어야합니다. 다음과 같이 코드를 작성할 수 있습니다.

num = input('자연수를 입력 하세요: ') while True:​ if num % 2 == 0: num = num / 2​ elif num % 2 == 1: num = num \* 3 + 1​

num은 while문을 돌며 지속적으로 값이 변화합니다. 짝수일때는 기존 num값의 2배로, 홀수일때는 기존 num값의 3배 + 1값이 됩니다.

​

이전 while문이 끝날때마다 다음 while문의 num이 변한다는 것을 기억하세요!

​

출력값 구현하기

문제의 목표는 반복문안에서 num = 1이 되었을때의 코드 실행횟수입니다. 이를 i로 구현해보았습니다.

num = int(input('자연수를 입력하세요: '))i = 0 while True: i += 1 if num % 2 == 0: num = num / 2 elif num % 2 == 1: num = num \* 3 + 1 if num == 1: print(i) break​

이제 반복문이 다시 실행될때마다 i값이 1씩 증가합니다.

​

예외처리하기 (i > 500)

문제에서 실행횟수가 500보다 클경우 -1을 출력하라는 요구가 있습니다. 이를 구현합니다.

num = int(input('자연수를 입력하세요: '))i = 0 while True: i += 1 if num % 2 == 0: num = num / 2 elif num % 2 == 1: num = num \* 3 + 1 if num == 1: if i > 500: print(-1) else: print(i) break​

num = 1이 되었을 경우 i값이 500보다 큰지를 판단 후 -1을 출력하도록 구현하였습니다.

​

예외처리하기 (경계값 1)

원래 1을 넣으면 조건에 따라 3이 출력되어야 하는데요. 문제에서는 0을 출력할 것을 명시하고 있습니다.코드 구현을 위해서 가장 첫줄에 조건을 추가합니다.

​

num = int(input('자연수를 입력하세요: '))i = 0 while True: print(num) if num == 1: print(i) break​ i += 1​ if num % 2 == 0: num = num / 2​ elif num % 2 == 1: num = num \* 3 + 1​ if num == 1: if i > 500: print(-1) else: print(i) break print(num)

while문 가장 첫줄에 num == 1인지를 확인하는 코드를 작성해주면 됩니다! 아래 num은 1이 되는 순간 바로 i를 출력하기 때문에 다음 루프의 첫줄 if문으로 갈일이 없습니다.

​

num값이 헷갈린다면 코드 맨 위, 아래에 print()문을 사용해서 확인해보세요.

최종코드

num = int(input('자연수를 입력하세요: '))i = 0 while True: print(num) if num == 1: print(i) break​ i += 1​ if num % 2 == 0: num = num / 2​ elif num % 2 == 1: num = num \* 3 + 1​ if num == 1: if i > 500: print(-1) else: print(i) break print(num)

이렇게 콜라츠 추측 구현도 완료입니다:D

​