๋ฌธ์ ์ค๋ช
์์ธํธ์ค ๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
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 ๋ณ์์๋ ๋๋จธ์ง ์ฐ์ฐ์ ์ฌ์ฉํ์ฌ ์ ์ ํ ์๋ฅผ ํ ๋นํด์ค๋ค.
๐ก ํผ๋๋ฐฑ
- ์์ธํธ์ค๋ผ๋ ๊ฒ ์์ฒด๋ฅผ ์ฒ์๋ค์ด๋ด์ ๋ฌธ์ ๋ฅผ ์ดํดํ๋๋ฐ์ ์ชผ๊ธ ๊ฑธ๋ ธ์ง๋ง, ์ด๋ ค์ด ๋ฌธ์ ๋ ์๋์๋ค.
๋ฌธ์
'3๏ธโฃ Swift > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift Algorithm] ์ ๋ก BOJ #10773 (0) | 2021.08.04 |
---|---|
[Swift Algorithm] ์คํ BOJ #10828 (0) | 2021.08.04 |
[Swift Algorithm] ํค๋ก๊ฑฐ BOJ #5397 (0) | 2021.07.30 |
[Swift Algorithm] ์๋ํฐ BOJ #1406 (0) | 2021.07.30 |
[Swift Algorithm] ๋ ์์ ํฉ BOJ #3273 (0) | 2021.07.30 |
๋๊ธ