๋ฌธ์ ์ค๋ช
๊ธฐ์์ฌ์์ ์ด๊ณ ์๋ ์ค๊ท๋ ํ ๊ฐ์ ๋ฉํฐํญ์ ์ด์ฉํ๊ณ ์๋ค. ์ค๊ท๋ ํค๋ณด๋, ํค์ด๋๋ผ์ด๊ธฐ, ํธ๋ํฐ ์ถฉ์ ๊ธฐ, ๋์งํธ ์นด๋ฉ๋ผ ์ถฉ์ ๊ธฐ ๋ฑ ์ฌ๋ฌ ๊ฐ์ ์ ๊ธฐ์ฉํ์ ์ฌ์ฉํ๋ฉด์ ์ด์ฉ ์ ์์ด ๊ฐ์ข ์ ๊ธฐ์ฉํ์ ํ๋ฌ๊ทธ๋ฅผ ๋บ๋ค ๊ฝ์๋ค ํ๋ ๋ถํธํจ์ ๊ฒช๊ณ ์๋ค. ๊ทธ๋์ ์ค๊ท๋ ์์ ์ ์ํ ํจํด์ ๋ถ์ํ์ฌ, ์๊ธฐ๊ฐ ์ฌ์ฉํ๊ณ ์๋ ์ ๊ธฐ์ฉํ์ ์ฌ์ฉ์์๋ฅผ ์์๋ด์๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฌ๊ทธ๋ฅผ ๋นผ๋ ํ์๋ฅผ ์ต์ํํ๋ ๋ฐฉ๋ฒ์ ๊ณ ์ํ์ฌ ๋ณด๋ค ์พ์ ํ ์ํํ๊ฒฝ์ ๋ง๋ค๋ ค๊ณ ํ๋ค.
์๋ฅผ ๋ค์ด 3 ๊ตฌ(๊ตฌ๋ฉ์ด ์ธ ๊ฐ ๋ฌ๋ฆฐ) ๋ฉํฐํญ์ ์ธ ๋, ์ ๊ธฐ์ฉํ์ ์ฌ์ฉ ์์๊ฐ ์๋์ ๊ฐ์ด ์ฃผ์ด์ง๋ค๋ฉด,
- ํค๋ณด๋
- ํค์ด๋๋ผ์ด๊ธฐ
- ํธ๋ํฐ ์ถฉ์ ๊ธฐ
- ๋์งํธ ์นด๋ฉ๋ผ ์ถฉ์ ๊ธฐ
- ํค๋ณด๋
- ํค์ด๋๋ผ์ด๊ธฐ
ํค๋ณด๋, ํค์ด๋๋ผ์ด๊ธฐ, ํธ๋ํฐ ์ถฉ์ ๊ธฐ์ ํ๋ฌ๊ทธ๋ฅผ ์์๋๋ก ๋ฉํฐํญ์ ๊ฝ์ ๋ค์ ๋์งํธ ์นด๋ฉ๋ผ ์ถฉ์ ๊ธฐ ํ๋ฌ๊ทธ๋ฅผ ๊ฝ๊ธฐ ์ ์ ํธ๋ํฐ์ถฉ์ ๊ธฐ ํ๋ฌ๊ทธ๋ฅผ ๋นผ๋ ๊ฒ์ด ์ต์ ์ผ ๊ฒ์ด๋ฏ๋ก ํ๋ฌ๊ทธ๋ ํ ๋ฒ๋ง ๋นผ๋ฉด ๋๋ค.
์ ๋ ฅ
์ฒซ ์ค์๋ ๋ฉํฐํญ ๊ตฌ๋ฉ์ ๊ฐ์ N (1 ≤ N ≤ 100)๊ณผ ์ ๊ธฐ ์ฉํ์ ์ด ์ฌ์ฉํ์ K (1 ≤ K ≤ 100)๊ฐ ์ ์๋ก ์ฃผ์ด์ง๋ค. ๋ ๋ฒ์งธ ์ค์๋ ์ ๊ธฐ์ฉํ์ ์ด๋ฆ์ด K ์ดํ์ ์์ฐ์๋ก ์ฌ์ฉ ์์๋๋ก ์ฃผ์ด์ง๋ค. ๊ฐ ์ค์ ๋ชจ๋ ์ ์ ์ฌ์ด๋ ๊ณต๋ฐฑ๋ฌธ์๋ก ๊ตฌ๋ถ๋์ด ์๋ค.
์ถ๋ ฅ
ํ๋์ฉ ํ๋ฌ๊ทธ๋ฅผ ๋นผ๋ ์ต์์ ํ์๋ฅผ ์ถ๋ ฅํ์์ค.
์ ์ถ๋ ฅ ์์
์ ๋ ฅ
2 7
2 3 2 3 1 2 7
์ถ๋ ฅ
2
๋ด ๋ฌธ์ ํ์ด
import Foundation
let info = readLine()!.split(separator: " ").map({Int(String($0))!})
var use = readLine()!.split(separator: " ").map({Int(String($0))!}) // ์ฌ์ฉ ์์ ๋๊ธฐ์ด
var multitap = Array(repeating: 0, count: info[0]) // ๊ตฌ ๊ฐ์๋งํผ 0์ผ๋ก ์ฑ์ด ๋ฉํฐํญ ๋ฐฐ์ด
var answer = 0
use.reverse()
while use.count > 0 {
// ๋ฉํฐํญ์ ๋น ๊ณต๊ฐ์ด ์์ ๊ฒฝ์ฐ
if multitap.contains(0) {
if multitap.contains(use.last!) { use.removeLast() }
else { multitap[multitap.firstIndex(of: 0)!] = use.removeLast() }
}
// ๋ฉํฐํญ์ ๋น ๊ณต๊ฐ ์์ ๊ฒฝ์ฐ
else {
if multitap.contains(use.last!) { use.removeLast() }
else {
var min = use.count
var check = 0
for j in multitap {
if !use.contains(j) { check = j; break }
else if use.lastIndex(of: j)! < min { min = use.lastIndex(of: j)! }
}
if min == use.count { multitap[0] = use.removeLast() }
else if check != 0 { multitap[multitap.firstIndex(of: check)!] = use.removeLast() }
else { multitap[multitap.firstIndex(of: use[min])!] = use.removeLast() }
answer += 1
}
}
}
print(answer)
๐ ์ด ๋ฌธ์ ๋ ํฌ๊ฒ 3๊ฐ์ง ๊ณ ๋ คํ ์ ์ด ์๋ค.
1) ๋ฉํฐํญ์ ๋น ๊ณต๊ฐ์ด ์์ ๊ฒฝ์ฐ
2) ๋ฉํฐํญ์ ๋น ๊ณต๊ฐ์ด ์์ ๊ฒฝ์ฐ
3) ์์๊ฐ ๋ค๊ฐ์จ ๋ฌผ๊ฑด์ด ํ์ฌ ๋ฉํฐํญ์ ๊ฝํ์๋์ง
+ ์์ธ๊ฐ ์์ฃผ ๋ง์ ๋ฌธ์ ๋ผ ์ ์ถ ์ ์ ๊ผญ ๋ค๋ฅธ ์์ ๋ฅผ ๋ง์ด ๋ง๋ค์ด์ ํ ์คํธํด๋ณด์๊ธธ ๋ฐ๋๋๋น,,
- ์ฐ์ ์ฐ์ฐ์ ์งํํ๊ธฐ ์ , ์
๋ ฅ๋ฐ์ ์์ ๋ฐฐ์ด use๋ฅผ ๋ฐ๋๋ก ๋ค์ง์ด์ฃผ์๋ค.
์ฐ์ฐ์ ์งํํ๋ฉด์ ์์๊ฐ ์ง๋ ๋ฌผ๊ฑด์ use์์ ์ญ์ ํด์ค ๊ฒ์ธ๋ฐ, ๋ฐฐ์ด์ ์์์๋ถํฐ ์ญ์ ํด๋๊ฐ๋ค๋ฉด
๊ณ์ ๋ฐฐ์ด์ ํ ์นธ์ฉ ๋น๊ฒจ์ผํ๋ ๋นํจ์จ์ฑ์ ๊ฐ์ง๊ฒ ๋๋ฏ๋ก reverseํ์ฌ ๋ค์์๋ถํฐ ์์๋ฅผ ์์ํ๊ฒํ๋ค. - use ๋ฐฐ์ด์ด ๋ชจ๋ ์ญ์ ๋ ๋๊น์ง while๋ฌธ์ ๋ฐ๋ณตํ๊ฒ ํ๋๋ฐ, ๋ฉํฐํญ์ ๋น ๊ณต๊ฐ์ด ์์ ๊ฒฝ์ฐ์ ์์ ๊ฒฝ์ฐ๋ก ๋๋ด๋ค.
- ๋จผ์ ๋ฉํฐํญ์ ๋น ๊ณต๊ฐ์ด ์์ ๊ฒฝ์ฐ๋ multitap ๋ฐฐ์ด์ด 0์ ํฌํจํ๋์ง๋ก ์ฒดํฌํด์ฃผ์๊ณ ,
์์๊ฐ ๋ค๊ฐ์จ ๋ฌผ๊ฑด์ด ํ์ฌ ๋ฉํฐํญ ์์ ์กด์ฌํ๋์ง ํ์ธํ๋ค.
์กด์ฌํ ๊ฒฝ์ฐ์๋ ๋ค์ ์ฝ๋๋ฅผ ๋บ ์ด์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฅ use๋ฐฐ์ด์์ ์ญ์ ๋ง ํด์ฃผ์๊ณ ,
์กด์ฌํ์ง ์์ ๊ฒฝ์ฐ์๋ ๋ฉํฐํญ์ ๋น ์๋ฆฌ์ค ์ฒซ ๋ฒ์งธ ์๋ฆฌ์ ํด๋น ๋ฌผ๊ฑด์ ๋ฃ์ด์ฃผ์๋ค.
(์์๋ฅผ ๋ค์ง์ด ์ฃผ์์ผ๋ฏ๋ก ์ฝ๋ ์์์ ์์๊ฐ ๋ค๊ฐ์จ ๋ฌผ๊ฑด์ ๊ณ์ use.last!๋ก ํํํ ์์ ์ด๋ค.) - ๋ฉํฐํญ์ ๋น ๊ณต๊ฐ์ด ์์ ๊ฒฝ์ฐ์๋ ๋น ๊ณต๊ฐ์ด ์์ ๊ฒฝ์ฐ๋ณด๋ค ์กฐ๊ธ ๋ ๊ณ ๋ คํ ์ฌํญ์ด ์๋๋ฐ,
1) ๋ฉํฐํญ์ ์์๊ฐ ๋ค๊ฐ์จ ๋ฌผ๊ฑด์ด ์ด๋ฏธ ๊ฝํ์๋๊ฐ?
2) ์์๊ฐ ๋ค๊ฐ์จ ๋ฌผ๊ฑด์ด ๋ฉํฐํญ์ ๊ฝํ์์ง ์๋๊ฐ?
2-1) ๋ฉํฐํญ์ ๊ฝํ์๋ ๋ฌผ๊ฑด ์ ๋ถ๊ฐ use์ ์กด์ฌํ์ง ์๋๊ฐ?
2-2) ๋ฉํฐํญ์ ๊ฝํ์๋ ๋ฌผ๊ฑด๋ค ์ค use์ ์กด์ฌํ์ง ์๋ ๋ฌผ๊ฑด์ด ์๋๊ฐ?
2-3) ๋ฉํฐํญ์ ๊ฝํ์๋ ๋ฌผ๊ฑด๋ค ์ ๋ถ๊ฐ use์ ์กด์ฌํ๋๊ฐ? - 1) ๋ฉํฐํญ์ ์์๊ฐ ๋ค๊ฐ์จ ๋ฌผ๊ฑด์ด ์ด๋ฏธ ๊ฝํ์๋ค๋ฉด ๊ทธ๋ฅ use ๋ฐฐ์ด์์ ํด๋น ๋ฌผ๊ฑด ์ญ์ ๋ง ์งํํ๋ค.
- 2) ์์๊ฐ ๋ค๊ฐ์จ ๋ฌผ๊ฑด์ด ๋ฉํฐํญ์ ๊ฝํ์์ง ์๋ค๋ฉด for๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ฉํฐํญ ๋ฐฐ์ด์ ๊ฒ์ฌํ๋ค.
๋ฉํฐํญ ๋ฐฐ์ด์ ๊ฝํ ๋ฌผ๊ฑด๋ค์ use์์์ ์์น๋ฅผ ํ์ธ, ๊ทธ ์ค ์์๊ฐ ๊ฐ์ฅ ๋ฆ๋ ๋ฌผ๊ฑด์ ์์น๋ฅผ min์ ์ ์ฅํ๋ค.
๋ฐ๋ณตํ๋ฉฐ min์ ๊ฐฑ์ ํ๋ ์ค, ๋ฉํฐํญ์ ๊ฝํ์๋ ๋ฌผ๊ฑด๋ค ์ค use ๋ฐฐ์ด์ ์กด์ฌํ์ง ์๋ ๋ฌผ๊ฑด์ ๋ฐ๊ฒฌํ๋ค๋ฉด
multitap ๋ฐฐ์ด์์ ์ด๋ค ๋ฌผ๊ฑด์ ๋บ์ง ๊ณ ๋ฏผํ ํ์๋ ์์ด ํด๋น ๋ฌผ๊ฑด์ ๋ฉํฐํญ์์ ๋นผ๋ฉด ๋๊ธฐ ๋๋ฌธ์
๋ฐ๋ก for๋ฌธ์ breakํด์ฃผ์๋ค. ๊ทธ๋ฆฌ๊ณ for๋ฌธ ์๋์ ์์์ ๋งํ 2-1), 2-2), 2-3)๋ฒ ์์ธ๋ฅผ ๊ณ ๋ คํ๋ค. - 2-1) min์ด ์ฒ์ ๊ทธ๋๋ก๋ผ๋ฉด ๋ฉํฐํญ์ ๊ฝํ ๋ฌผ๊ฑด๋ค ๋ชจ๋๊ฐ use ๋ฐฐ์ด์ ์กด์ฌํ์ง ์๋๋ค๋ ์๋ฏธ์ด๋ฏ๋ก
์๋ฌด ๋ฌผ๊ฑด์ด๋ ๋นผ๋ ์๊ด์๋ค. ๋ฐ๋ผ์ ๊ทธ๋ฅ multitap์ ์ฒซ ๋ฒ์งธ ์๋ฆฌ์ ์์๊ฐ ๋ค๊ฐ์จ ๋ฌผ๊ฑด์ ๋ฃ์ด์ฃผ์๋ค. - 2-2) check๊ฐ 0์ด ์๋๋ผ๋ ๊ฒ์ ์ด๋ ํ ๋ฌผ๊ฑด์ด use์ ์กด์ฌํ์ง ์์์ ํ์ธํ๋ค๋ ๋ป์ด๋ฏ๋ก
multitap์์ check์ ์ ์ฅ๋ ๋ฌผ๊ฑด์ ์ฐพ์ ๊ทธ ์์น์ ์๋ ๋ฌผ๊ฑด์ ๋นผ์ฃผ๊ณ ์์๊ฐ ์จ ๋ฌผ๊ฑด์ ๊ฝ์์ฃผ์๋ค. - 2-3) 2-1๋ฒ๊ณผ 2-3๋ฒ์ ์กฐ๊ฑด์ ๊ฑธ๋ฆฌ์ง ์์๋ค๋ฉด, ๋ฉํฐํญ์ ๋ชจ๋ ๋ฌผ๊ฑด์ด use ๋ฐฐ์ด์ ์กด์ฌํ๋ค๋ ๋ป์ด๋ฏ๋ก
๊ฐ์ฅ ์์๊ฐ ๋ฆ๋ ๋ฌผ๊ฑด(min)์ multitap์์์ ์์น๋ฅผ ์ฐพ์ ๋นผ๊ณ ์์๊ฐ ๋ค๊ฐ์จ ๋ฌผ๊ฑด์ ๋ฃ์ด์ฃผ์๋ค.
๐ก ํผ๋๋ฐฑ
- ์ฒ์์ use ๋ฐฐ์ด์, ๋ฉํฐํญ์ ๋ฌผ๊ฑด๋ค์ ์์น๋ฅผ ์ ๋ถ ์ฐพ์์ฃผ๊ณ ๊ฒ์ฌํ๋๊ฒ์ด ๋๋ฌด ๋นํจ์จ์ ์ผ๊น๋ด
์ด๋ป๊ฒ๋ ํจ์จ์ ์ผ๋ก ํ์ด๋ณด๊ธฐ ์ํด ์ ์ผ๋๋ฐ,, ๊ทธ๋ ๊ฒ ํธ๋๊น ์์ธ๊ฐ ๋๋ ์์ด ๋์์ใ ใ
๊ทธ๋ฅ ๊ณ์ ๊ฒ์ฌํด์ฃผ๋ ๋ฐฉ๋ฒ์ ํํ๋ค. - ๋ฌธ์ ํธ๋๋ฐ ๊ต์ฅํ ์ค๋๊ฑธ๋ ธ๋๋ฐ, ๊ทธ๋ฆฌ๋ ๋ฌธ์ ๋ ํจ์จ๋ณด๋ค๋
๋ชจ๋ ์์ธ๋ฅผ ํฌํจํ ์ ์๋ ์ ํํ ์ฝ๋๋ฅผ ์ง๋ ๋ฐฉ์์ ์๊ฐํด ๋ด๋ ๊ฒ์ด ๋ ์ค์ํ ๊ฒ ๊ฐ๋ค.
๋ฌธ์
'3๏ธโฃ Swift > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift Algorithm] ํ๋ฐฐ BOJ #8980 (0) | 2021.08.22 |
---|---|
[Swift Algorithm] ์นด๋ ํฉ์ฒด ๋์ด BOJ #15903 (0) | 2021.08.22 |
[Swift Algorithm] ์ฃผ์ ์ BOJ #13305 (0) | 2021.08.19 |
[Swift Algorithm] ํ๋ฆฐํฐ Programmers(Lv.2) (0) | 2021.08.19 |
[Swift Algorithm] ๋ค์ง๊ธฐ BOJ #1439 (0) | 2021.08.19 |
๋๊ธ