๋ฌธ์ ์ค๋ช
์ผ๋ฐ์ ์ธ ํ๋ฆฐํฐ๋ ์ธ์ ์์ฒญ์ด ๋ค์ด์จ ์์๋๋ก ์ธ์ํฉ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ค์ํ ๋ฌธ์๊ฐ ๋์ค์ ์ธ์๋ ์ ์์ต๋๋ค. ์ด๋ฐ ๋ฌธ์ ๋ฅผ ๋ณด์ํ๊ธฐ ์ํด ์ค์๋๊ฐ ๋์ ๋ฌธ์๋ฅผ ๋จผ์ ์ธ์ํ๋ ํ๋ฆฐํฐ๋ฅผ ๊ฐ๋ฐํ์ต๋๋ค. ์ด ์๋กญ๊ฒ ๊ฐ๋ฐํ ํ๋ฆฐํฐ๋ ์๋์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ธ์ ์์ ์ ์ํํฉ๋๋ค.
1. ์ธ์ ๋๊ธฐ๋ชฉ๋ก์ ๊ฐ์ฅ ์์ ์๋ ๋ฌธ์(J)๋ฅผ ๋๊ธฐ๋ชฉ๋ก์์ ๊บผ๋ ๋๋ค.
2. ๋๋จธ์ง ์ธ์ ๋๊ธฐ๋ชฉ๋ก์์ J๋ณด๋ค ์ค์๋๊ฐ ๋์ ๋ฌธ์๊ฐ ํ ๊ฐ๋ผ๋ ์กด์ฌํ๋ฉด J๋ฅผ ๋๊ธฐ๋ชฉ๋ก์ ๊ฐ์ฅ ๋ง์ง๋ง์ ๋ฃ์ต๋๋ค.
3. ๊ทธ๋ ์ง ์์ผ๋ฉด J๋ฅผ ์ธ์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, 4๊ฐ์ ๋ฌธ์(A, B, C, D)๊ฐ ์์๋๋ก ์ธ์ ๋๊ธฐ๋ชฉ๋ก์ ์๊ณ ์ค์๋๊ฐ 2 1 3 2 ๋ผ๋ฉด C D A B ์์ผ๋ก ์ธ์ํ๊ฒ ๋ฉ๋๋ค.
๋ด๊ฐ ์ธ์๋ฅผ ์์ฒญํ ๋ฌธ์๊ฐ ๋ช ๋ฒ์งธ๋ก ์ธ์๋๋์ง ์๊ณ ์ถ์ต๋๋ค. ์์ ์์์ C๋ 1๋ฒ์งธ๋ก, A๋ 3๋ฒ์งธ๋ก ์ธ์๋ฉ๋๋ค.
ํ์ฌ ๋๊ธฐ๋ชฉ๋ก์ ์๋ ๋ฌธ์์ ์ค์๋๊ฐ ์์๋๋ก ๋ด๊ธด ๋ฐฐ์ด priorities์ ๋ด๊ฐ ์ธ์๋ฅผ ์์ฒญํ ๋ฌธ์๊ฐ ํ์ฌ ๋๊ธฐ๋ชฉ๋ก์ ์ด๋ค ์์น์ ์๋์ง๋ฅผ ์๋ ค์ฃผ๋ location์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ด๊ฐ ์ธ์๋ฅผ ์์ฒญํ ๋ฌธ์๊ฐ ๋ช ๋ฒ์งธ๋ก ์ธ์๋๋์ง return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ ์กฐ๊ฑด
- ํ์ฌ ๋๊ธฐ๋ชฉ๋ก์๋ 1๊ฐ ์ด์ 100๊ฐ ์ดํ์ ๋ฌธ์๊ฐ ์์ต๋๋ค.
- ์ธ์ ์์ ์ ์ค์๋๋ 1~9๋ก ํํํ๋ฉฐ ์ซ์๊ฐ ํด์๋ก ์ค์ํ๋ค๋ ๋ป์ ๋๋ค.
- location์ 0 ์ด์ (ํ์ฌ ๋๊ธฐ๋ชฉ๋ก์ ์๋ ์์ ์ - 1) ์ดํ์ ๊ฐ์ ๊ฐ์ง๋ฉฐ ๋๊ธฐ๋ชฉ๋ก์ ๊ฐ์ฅ ์์ ์์ผ๋ฉด 0, ๋ ๋ฒ์งธ์ ์์ผ๋ฉด 1๋ก ํํํฉ๋๋ค.
์ ์ถ๋ ฅ ์
priorities | location | return |
[2, 1, 3, 2] | 2 | 1 |
[1, 1, 9, 1, 1, 1] | 0 | 5 |
๋ด ๋ฌธ์ ํ์ด
func solution(_ priorities:[Int], _ location:Int) -> Int {
var docs = priorities // ๋๊ธฐ์ด
var now = location // ์์ฒญํ ๋ฌธ์์ ํ์ฌ ์์น
var print = 0 // ์ถ๋ ฅ๋ ๋ฌธ์ ๊ฐ์
while true {
// ๋๊ธฐ์ด์ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ ์ค์๋๊ฐ ๊ฐ์ฅ ๋์ ๊ฒฝ์ฐ
if docs.first! == docs.max() {
if now == 0 { return print + 1 }
else { now -= 1 }
// ์ถ๋ ฅ
docs.removeFirst()
print += 1
}
// ๋๊ธฐ์ด์ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ ์ค์๋๊ฐ ๊ฐ์ฅ ๋์ง ์์ ๊ฒฝ์ฐ
else {
docs.append(docs.removeFirst())
if now == 0 { now = docs.count - 1 }
else { now -= 1 }
}
}
}
๐ ์ด ๋ฌธ์ ๋ FIFO ๋ฐฉ์์ผ๋ก ํ์ดํ๋ค.
- priorities๋ฅผ docs๋ก, location์ now ๋ณ์๋ก ์์ฑํด์ฃผ์๊ณ , ์ถ๋ ฅ๋ ๋ฌธ์ ๊ฐ์๋ฅผ ๋ด์ print ๋ณ์๊น์ง ๋ง๋ค์๋ค.
- docs์ ๋งจ ์ ๋ฌธ์๋ถํฐ ์ค์๋๋ฅผ ํ์ธํ๋๋ฐ, max๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ผ ํฐ ์ค์๋๋ฅผ ์ฒดํฌํ๋ค.
๋งจ ์ ์์๊ฐ max์ ๊ฐ์ ๊ฒฝ์ฐ ์ค์๋๊ฐ ๊ฐ์ฅ ๋์ ๋ฌธ์๊ฐ ํ์ฌ ๊ฐ์ฅ ์์ ์์นํ๋ค๋ ์๋ฏธ์ด๋ฏ๋ก
์ถ๋ ฅ์ ํด์ค์ผํ๋๋ฐ, ๊ทธ ์ ์ ์ถ๋ ฅํ ๋ฌธ์๊ฐ ๋ด๊ฐ ์์ฒญํ ๋ฌธ์์ธ์ง๋ฅผ ๋จผ์ ํ์ธํ๋ค.
now ๋ณ์๊ฐ 0์ด๋ผ๋ฉด ํ์ฌ ๋ด๊ฐ ์์ฒญํ ๋ฌธ์๊ฐ ๋งจ ์์๋ฆฌ์ ์์๋ค๋ ์๋ฏธ์ด๋ฏ๋ก, ๋ฐ๋ก return ํด์ค๋ค.
๊ทธ๊ฒ ์๋๋ผ๋ฉด, ๋งจ ์์๋ฆฌ ๋ฌธ์๊ฐ ์ถ๋ ฅ๋จ์ผ๋ก ์ธํด ๋ด ๋ฌธ์๋ ํ ์นธ ์์ผ๋ก ์ฎ๊ฒจ์ง๊ธฐ ๋๋ฌธ์ -1 ํด์ค๋ค.
now ๋ณ์ ์ ๋ฐ์ดํธ๋ฅผ ๋ง์น๋ฉด ๋๊ธฐ์ด์ ๋งจ ์์๋ฆฌ ์์๋ฅผ ์ญ์ ํ๊ณ , print์ 1์ ๋์ ํ๋ค. - docs์ ๋งจ ์ ๋ฌธ์์ ์ค์๋๊ฐ max์ ๊ฐ์ง ์์ ๊ฒฝ์ฐ์๋
๋ฐ๋ก ๋๊ธฐ์ด์ ๋งจ ์์๋ฆฌ ์์๋ฅผ ์ญ์ ํจ๊ณผ ๋์์ ๋งจ ๋ค์ ์ถ๊ฐํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ๋ง์ฐฌ๊ฐ์ง๋ก now์ ๋ฐ๋ ๋ด ๋ฌธ์ ์์น๋ฅผ ์ ๋ฐ์ดํธํด์ค๋ค.
๐ก ํผ๋๋ฐฑ
- ๊ณ์ ๋งจ ์ ์์๋ฅผ ์ญ์ ํ๋ ๋ฐ๋ณต์ด ๋๋ฌด ์๊ฐ์ ๋ง์ด ์ก์๋จน์ ๊ฒ ๊ฐ์ ์ฒ์์ LIFO๋ฅผ ์ด์ฉํ์ฌ ํ๋ ค๊ณ ์ด๋ฆฌ์ ๋ฆฌ ๊ณ ๋ฏผํด๋ดค๋๋ฐ, ์๋ฌด๋ฆฌ ์๊ฐํด๋ ๋ ผ๋ฆฌ๊ฐ ๋ง์ง ์์ FIFO๋ก ํ์๋๋ ์ฝ๊ฒ ํ ์ ์๋ ๋ฌธ์ ์๋ค.
๋ฌธ์
'3๏ธโฃ Swift > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift Algorithm] ๋ฉํฐํญ ์ค์ผ์ค๋ง BOJ #1700 (0) | 2021.08.20 |
---|---|
[Swift Algorithm] ์ฃผ์ ์ BOJ #13305 (0) | 2021.08.19 |
[Swift Algorithm] ๋ค์ง๊ธฐ BOJ #1439 (0) | 2021.08.19 |
[Swift Algorithm] ์ ๋ฌถ๊ธฐ BOJ #1744 (0) | 2021.08.19 |
[Swift Algorithm] ๊ฒ์์ ๋ง๋ ๋์ค์ด BOJ #2847 (0) | 2021.08.19 |
๋๊ธ