적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

Algorithm/Programmers

[Swift 알고리즘] Programmers 콜라츠 추측

hongssup_ 2022. 1. 10. 22:37
반응형

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
반응형