Swift/Swift Codingtest

[Swift] 백준 2164 카드2

hyunjuntyler 2023. 3. 27. 08:32

문제 링크

 

2164번: 카드2

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가

www.acmicpc.net

문제 풀이

나의 풀이

import Foundation

let N = Int(readLine()!)!

var quene = Array(1...N)
var n = 0

if N == 1 { print(1) }
else {
    while true {
        quene[n] = 0
        quene.append(quene[n+1])
        quene[n+1] = 0
        if quene[quene.count-2] == 0 {
            print(quene.last!)
            break
            
        }
        n += 2
    }
}

 

풀이 과정

처음에는 이렇게 풀었었다. 결과는 잘 나왔지만 시간초과가 나왔다. 배열을 삭제하는 과정에서 배열의 성분이 하나하나 옮겨지기 때문에 시간초과가 나온 것 같다. remove가 문제인듯! (이부분은 좀더 공부가 필요하다)

import Foundation

let N = Int(readLine()!)!

var array = Array(1...N)

while array.count != 1 {
    array.remove(at: 0)
    array.append(array[0])
    array.remove(at: 0)
}

print(array[0])

그래서 어떻게하면 remove를 안쓸 수 있을까 고민하다가... 그러면 다른값으로 대체하면 되지 않을까? 해서 0으로 대체한 후 앞자리가 0일경우 print하면서 break 할 수 있게 만들었다.

import Foundation

let N = Int(readLine()!)!

var quene = Array(1...N)
var n = 0

if N == 1 { print(1) }
else {
    while true {
        quene[n] = 0
        quene.append(quene[n+1])
        quene[n+1] = 0
        if quene[quene.count-2] == 0 {
            print(quene.last!)
            break
            
        }
        n += 2
    }
}