포스트

72. 조건에 맞게 수열 변환하기 2


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import Foundation

func solution(_ arr:[Int]) -> Int {
    
    var answer : Int = 0
    var temp : [Int] = []
    var Arr : [Int] = []
    var j : Int = 0
    
    Arr = arr
    
    while Arr != temp{
        temp = Arr
        for i in Arr.indices {
           if Arr[i] >= 50 && Arr[i] % 2 == 0 {
                Arr[i] = Arr[i] / 2
            } else if Arr[i] < 50 && Arr[i] % 2 != 0 {
                Arr[i] = (Arr[i] * 2) + 1
            } else {
                continue
            }
        }
            j+=1
    }
    
    answer = j-1
    
    return answer
}

while을 사용하여 무한 루프를 사용하였다.

무한루프 1 cycle이 돌았을때 직전값을 가지고 있는 배열 temp를 만들었고 그다음 Arr=temp 일때 즉 값의 변화가 없을때 나오게끔 조건을 걸었다.

그다음 그안에 for문을 하나 더 추가함으로써 1사이클 동안 배열값을 전부 처리하게 하였다.

그리고 마지막에 j값이 1씩 증가하게 끔 했기때문에. 실제로 6회 돌았을때, 해당값이 멈추게된다. 그러므로 그전의 값을 리턴해야하므로 -1을 하였다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.