1번부터 N번까지 사람이 모두 제거될 때까지 K번째 사람을 제거해야하는데, 이때 K번째는 항상 맨 처음에서 시작하는 것이 아니고 제거된 사람에서 K번째이기 때문에 나는 위치 값(count)를 따로 두었다.
위치값은 항상 K만큼 증가하지만 사람 수보다 적어야하기 때문에
나머지값을 사용해야하나 하는 생각이 들었는데 그것보다 더 간단하게 그냥 위치값 = '위치값 - 사람 수' 로 구현해 주었다.
import Foundation
let line = readLine()!.split(separator: " ").map { Int(String($0))!}
let N = line[0]
var K = line[1]
var array = [Int]()
for i in 1...K {
array.append(i)
}
var setNum = [Int]()
var count = K
while !array.isEmpty {
if count <= array.count {
setNum.append(array[count-1])
array.remove(at: count-1)
count = count + K - 1
} else {
count -= array.count
}
}
print("<" + setNum.map({String($0)}).joined(separator: ", ") + ">")
var array = Array(1...N)
이렇게 하면 바로 1부터 N까지 1간격으로 array배열이 채워진다. (대박적)
import Foundation
let line = readLine()!.split(separator: " ").map { Int(String($0))!}
let N = line[0]
var K = line[1]
var array = Array(1...N)
var setNum = [Int]()
var count = K
while !array.isEmpty {
if count <= array.count {
setNum.append(array[count-1])
array.remove(at: count-1)
count = count + K - 1
} else {
count -= array.count
}
}
print("<" + setNum.map({String($0)}).joined(separator: ", ") + ">")
Array(1...5) 진짜 개쩐당...
그리고 앞으로 변수명 신경써서 지어야겠다..
근데 다른 사람들 풀이 보니까 나머지 값으로 다시 풀어봐야겠다 ㅎㅎ;;;
import Foundation
let line = readLine()!.split(separator: " ").map { Int(String($0))!}
let N = line[0]
var K = line[1]
var array = Array(1...N)
var count = K-1
print("<",terminator: "")
while array.count != 1 {
if count >= array.count {
count %= array.count
}
let target = array.remove(at: count)
print("\(target), ",terminator: "")
count += (K-1)
}
print("\(array[0])>")
둘 다 시간은 같게 나오네요! 하튼,, 잼썼다 !