WonniOS

[Swift] 8. 백준 1158번: 요세푸스 문제 본문

Algorithm

[Swift] 8. 백준 1158번: 요세푸스 문제

Wonni 2023. 3. 7. 22:42
 

사실 뭔가 백준 설명만 보고서는 요세푸스를 이해하기 쉽지 않았다. K번째 사람을 지우고, 지운 순서의 다음 순서부터 카운트를 센다는 말이 명시되어 있지 않았기 때문이다. 그래서 따로 찾아봐야 문제를 이해할 수 있었다.

문제 링크

https://www.acmicpc.net/problem/1158

 

1158번: 요세푸스 문제

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)

www.acmicpc.net

 


풀이

1부터 N까지 배열에 숫자를 넣는 쉬운 방법을 알게 되었다.

바로 var array = Array(1...input![0]!) 이렇게 선언해주면 for문 안돌리고 한줄로 선언할 수 있다.

그리고 계속 반복하면서 해당 index의 K번째 숫자를 지워주고 index를 나머지 연산자를 이용해 변경해주는 방식으로 구현했다.


 

제출 코드

import Foundation

let input = readLine()?.split(separator: " ").map{ Int($0) }
var array = Array(1...input![0]!)
var answer: [Int] = []
var index = input![1]!-1
var count = 0


while true {
  answer.append(array.remove(at: index ))
  if array.isEmpty {break}
  index = (index + input![1]!-1) % array.count
}

print("<"+answer.map({String($0)}).joined(separator: ", ")+">")

 

 

'Algorithm' 카테고리의 다른 글

[Swift] 10. 백준 17298번: 오큰수  (0) 2023.04.04
[Swift] 9. 백준 10866번: 덱  (0) 2023.03.08
[Swift] 7. 백준 10845번: 큐  (0) 2023.02.23
[Swift] 6. 백준 1406번: 에디터  (0) 2023.02.22
[Swift] 5. 백준 1874번: 스택 수열  (0) 2023.02.15