๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
3๏ธโƒฃ Swift/Problem Solving

[Swift Algorithm] ์š”์„ธํ‘ธ์Šค ๋ฌธ์ œ BOJ #1158

by seolhee2750 2021. 7. 30.
๋ฌธ์ œ ์„ค๋ช…

์š”์„ธํ‘ธ์Šค ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€ N๋ช…์˜ ์‚ฌ๋žŒ์ด ์›์„ ์ด๋ฃจ๋ฉด์„œ ์•‰์•„์žˆ๊ณ , ์–‘์˜ ์ •์ˆ˜ K(≤ N)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด์ œ ์ˆœ์„œ๋Œ€๋กœ K๋ฒˆ์งธ ์‚ฌ๋žŒ์„ ์ œ๊ฑฐํ•œ๋‹ค. ํ•œ ์‚ฌ๋žŒ์ด ์ œ๊ฑฐ๋˜๋ฉด ๋‚จ์€ ์‚ฌ๋žŒ๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ์›์„ ๋”ฐ๋ผ ์ด ๊ณผ์ •์„ ๊ณ„์†ํ•ด ๋‚˜๊ฐ„๋‹ค. ์ด ๊ณผ์ •์€ N๋ช…์˜ ์‚ฌ๋žŒ์ด ๋ชจ๋‘ ์ œ๊ฑฐ๋  ๋•Œ๊นŒ์ง€ ๊ณ„์†๋œ๋‹ค. ์›์—์„œ ์‚ฌ๋žŒ๋“ค์ด ์ œ๊ฑฐ๋˜๋Š” ์ˆœ์„œ๋ฅผ (N, K)-์š”์„ธํ‘ธ์Šค ์ˆœ์—ด์ด๋ผ๊ณ  ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด (7, 3)-์š”์„ธํ‘ธ์Šค ์ˆœ์—ด์€ <3, 6, 2, 7, 5, 1, 4>์ด๋‹ค.

N๊ณผ K๊ฐ€ ์ฃผ์–ด์ง€๋ฉด (N, K)-์š”์„ธํ‘ธ์Šค ์ˆœ์—ด์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N๊ณผ K๊ฐ€ ๋นˆ ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ K ≤ N ≤ 5,000)

 

์ถœ๋ ฅ

์˜ˆ์ œ์™€ ๊ฐ™์ด ์š”์„ธํ‘ธ์Šค ์ˆœ์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ์ œ

์ž…๋ ฅ

7 3

์ถœ๋ ฅ

<3, 6, 2, 7, 5, 1, 4>

 

๋‚ด ๋ฌธ์ œ ํ’€์ด
import Foundation

let josephus = readLine()!.components(separatedBy: " ").map({Int($0)!}) // [N, K]
var nums: [Int] = Array(1...josephus[0]) // [1...N]
var check = josephus[1] - 1 // K - 1
var result = [Int]() // ๊ฒฐ๊ณผ ์ˆœ์—ด

while true {
    result.append(nums.remove(at: check))
    if nums.isEmpty { break }
    check = (check + josephus[1] - 1) % nums.count
}

print("<" + result.map({String($0)}).joined(separator: ", ") + ">")
  • ์š”์„ธํ‘ธ์Šค ์ˆœ์—ด์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋จผ์ € 1๋ถ€ํ„ฐ N๊นŒ์ง€์— ํ•ด๋‹นํ•˜๋Š” Int ๋ฐฐ์—ด์„ ๋งŒ๋“ค์—ˆ๋‹ค.
  • K๋ฅผ ๊ณ ๋ ค, result ๋ฐฐ์—ด์˜ ํ•ด๋‹นํ•˜๋Š” ์œ„์น˜์— ์ˆœ์„œ๋Œ€๋กœ ์ œ๊ฑฐ๋˜๋Š” ์ˆ˜๋“ค์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” remove๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ nums๋ฐฐ์—ด์—์„œ ํ•ด๋‹น ์ˆ˜๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋™์‹œ์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.
  • nums ๋ฐฐ์—ด์˜ ์—ฐ์‚ฐ์ด ๋ชจ๋‘ ๋๋‚˜ ๋ชจ๋“  ์ˆซ์ž๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ์„ ๊ฒฝ์šฐ์—๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒํ•˜๋„๋ก ํ•œ๋‹ค.
  • check ๋ณ€์ˆ˜์—๋Š” ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ ์ ˆํ•œ ์ˆ˜๋ฅผ ํ• ๋‹นํ•ด์ค€๋‹ค.

 

๐Ÿ’ก ํ”ผ๋“œ๋ฐฑ
  • ์š”์„ธํ‘ธ์Šค๋ผ๋Š” ๊ฒƒ ์ž์ฒด๋ฅผ ์ฒ˜์Œ๋“ค์–ด๋ด์„œ ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๋Š”๋ฐ์— ์ชผ๊ธˆ ๊ฑธ๋ ธ์ง€๋งŒ, ์–ด๋ ค์šด ๋ฌธ์ œ๋Š” ์•„๋‹ˆ์—ˆ๋‹ค.

 


 

๋ฌธ์ œ

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

๋Œ“๊ธ€