코딩테스트 기초 반복문 연습 - 콜라츠 추측
코딩테스트 기초 반복문 연습 - 콜라츠 추측 — #코딩테스트 #콜라츠추측 AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다 콜라츠 ...
#코딩테스트 #콜라츠추측
AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다
콜라츠 추측
반복문 연습문제
문제
| 💡 다음 작업을 수행하는데 총 몇 번이나 반복해야하는지 출력하라. 단, 작업을 500번 반복해도 1이 되지 않는 경우 -1을 출력하라. |
|---|
| 1-1. 입력된 수가 짝수라면 2로 나눈다. 1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더한다. 2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복한다. |
|---|
| 입력자연수 N (1 ≤ N ≤ 8000000)이 입력된다.입력은 항상 정확하다.출력총 반복한 숫자 C를 출력한다. |
|---|
예제 입출력
| 이름 | 입력 | 출력 | 설명 |
|---|---|---|---|
| 기본 1 | 6 | 8 | 6→3→10→5→16→8→4→2→1 |
| 기본 2 | 16 | 4 | 16 -> 8 -> 4 -> 2 -> 1 |
| 기본 3 | 626331 | -1 | 500번을 넘음(508번) |
| 예외 1 | 1585403 | 499 | |
| 예외 2 | 3170807 | 500 | |
| 예외 3 | 1056935 | -1 | 501번 |
| 경계값 1 | 1 | 0 | |
| 경계값 2 | 2 | 1 | |
| 경계값 3 | 8000000 | 155 |
문제풀이
자연수를 입력받기
이전 문제들과 동일하게 자연수를 입력 받습니다.
| 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
