반응형
Level 1 연습문제
콜라츠 추측
문제 설명
1-1. 입력된 수가 짝수라면 2로 나눕니다.
1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.
2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.
이 작업을 몇번이나 반복해야하는지 반환하는 함수.
500번을 반복해도 1이 되지 않으면 -1을 반환
제한조건
- num은 1 이상, 8000000 미만인 정수입니다.
입출력 예
print(solution(6)) //8
print(solution(16)) //4
print(solution(626331)) //-1
print(solution(1)) //0
내 답안
func solution(_ num:Int) -> Int {
if num == 1 { return 0 }
var num = num
for i in 1...500 {
num = (num % 2 == 0) ? num/2 : num*3 + 1
if num == 1 { return i }
}
return -1
}
while 반복문을 쓸까 생각도 했지만, 500번 이라는 제한 횟수가 명시되어 있었기에 따로 result 변수를 생성하지 않아도 되도록 그냥
for 구문으로 1~500 까지 반복문을 돌려주었다.
* 주의* solution 함수 인자로 1이 들어왔을 때는, 반복문이 실행되기 전에 0을 반환해줄 것!
실패한 코드 🤢
테스트 13 케이스가 실패로 떴다.
이유는 num 값이 1로 들어올 경우, 위 조건을 반복하지 않고 그냥 바로 0을 반환해버려야 하는데
그 조건을 따로 두지 않아 solution(1)이 3으로 반환되는 문제가 발생한 것이었다.
num == 1 일 때 0을 반환하는 코드를 추가 후 통과.
728x90
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[Swift 알고리즘] Programmers 행렬의 덧셈 (0) | 2022.01.12 |
---|---|
[Swift 알고리즘] Programmers 직사각형 별찍기 (0) | 2022.01.10 |
[Swift 알고리즘] Programmers 하샤드 수 (0) | 2022.01.10 |
[Swift 알고리즘] Programmers x만큼 간격이 있는 n개의 숫자 (0) | 2022.01.08 |
[Swift 문자열] Programmers 핸드폰 번호 가리기 (0) | 2022.01.07 |