๋ฌธ์ ์ค๋ช
๋ํ ์ด๋ฆฐ์ด์ง์ ์ฌํด ์ ํํ ์ด๋ฆฐ์ด๋ค์ด ๋์ดํฐ์ ํ ์ค๋ก ์์๋ค. ๋ชจ๋ ์ด๋ฆฐ์ด๋ค์๊ฒ๋ ์ ํํ ๋ ์ฃผ์ด์ง ๋ฒํธ๊ฐ ์๊ณ ๋ชจ๋ ์ท์ ๋ฒํธํ๋ฅผ ๋ฌ๊ณ ์๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ฆฐ์ด๋ค์ ์์ง ๋ฒํธ ์์๋๋ก ์ค์ ์ ์์ง ๋ชปํ๋ฏ๋ก ์ ์๋์ด ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ ๋ฒํธ์์๋๋ก ์ค์ ์ธ์ฐ๋ ค๊ณ ํ๋ค.
๋ฐฉ๋ฒ: ์ค ์์๋ ์ด๋ฆฐ์ด ์ค ํ ๋ช ์ ์ ํํ์ฌ ์ ์ผ ์์ด๋ ์ ์ผ ๋ค๋ก ๋ณด๋ธ๋ค.
์์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ๋ ์ด๋ฆฐ์ด๊ฐ ์ด๋ํด์ ๋น์๋ฆฌ๊ฐ ์๊ธฐ๋ ๊ฒฝ์ฐ์๋ ๋น์๋ฆฌ์ ๋ค์ ์๋ ์ด๋ฆฐ์ด๋ค์ด ํ ๊ฑธ์์ฉ ์์ผ๋ก ๊ฑธ์ด์์ ๋น์๋ฆฌ๋ฅผ ๋ฉ๊พผ๋ค.
์๋ฅผ ๋ค์ด, 5๋ช ์ ์ด๋ฆฐ์ด๋ค์๊ฒ 1๋ถํฐ 5๊น์ง์ ๋ฒํธ๊ฐ ์ฃผ์ด์ ธ ์๊ณ , ๋ค์๊ณผ ๊ฐ์ ์์๋ก ์ค ์์๋ค๊ณ ํ์.
5 2 4 1 3
์ ๋ฐฉ๋ฒ์ ์ด์ฉํด์ ๋ค์๊ณผ ๊ฐ์ด ๋ฒํธ์์๋๋ก ์ค์ ์ธ์ธ ์ ์๋ค.
- 1๋ฒ ์ด๋ฆฐ์ด๋ฅผ ์ ์ผ ์์ผ๋ก ๋ณด๋ธ๋ค. (5 2 4 1 3 → 1 5 2 4 3)
- 4๋ฒ ์ด๋ฆฐ์ด๋ฅผ ์ ์ผ ๋ค๋ก ๋ณด๋ธ๋ค. (1 5 2 4 3 → 1 5 2 3 4)
- 5๋ฒ ์ด๋ฆฐ์ด๋ฅผ ์ ์ผ ๋ค๋ก ๋ณด๋ธ๋ค. (1 5 2 3 4 → 1 2 3 4 5)
์์ ์์์๋ ์ธ ๋ช ์ ์ด๋ฆฐ์ด๋ฅผ ์ ์ผ ์์ด๋ ์ ์ผ ๋ค๋ก ๋ณด๋ด ๋ฒํธ์์๋๋ก ์ค์ ์ธ์ ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ๋ช ์ดํ์ ์ด๋ฆฐ์ด๋ฅผ ์ ์ผ ์์ด๋ ์ ์ผ ๋ค๋ก ๋ณด๋ด๋ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ฒํธ์์๋๋ก ์ค์ ์ธ์ธ ์ ์๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ด ๊ฒฝ์ฐ์๋ ์ต์ํ ์ธ ๋ช ์ ์ด๋ฆฐ์ด๋ฅผ ์ด๋ํ์ฌ์ผ ๋ฒํธ์์๋๋ก ์ค์ ์ธ์ธ ์ ์๋ค.
์ด ๋ฌธ์ ๋ ์ฒ์์ ์ค์์๋ ์ํ์์ ์ ๋ฐฉ๋ฒ์ ์ด์ฉํด์ ๋ฒํธ์์๋๋ก ์ค์ ์ธ์ธ ๋ ์์ด๋ ๋ค๋ก ๋ณด๋ด๋ ์ด๋ฆฐ์ด ์์ ์ต์๊ฐ์ ์ฐพ๋ ๊ฒ์ด๋ค.
์ ๋ ฅ
์ ๋ ฅ์ 2 ๊ฐ์ ์ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ์ฒซ ์ค์๋ ์ด๋ฆฐ์ด ์๋ฅผ ๋ํ๋ด๋ ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์๋ ์ฒ์์ ์ค์์๋ ์ด๋ฆฐ์ด๋ค์ ๋ฒํธ๊ฐ ์ฐจ๋ก๋๋ก ์ฃผ์ด์ง๋ค. ์ฃผ์ด์ง ๋ฒํธ๋ค ์ฌ์ด์๋ ๊ณต๋ฐฑ์ด ํ๋์ฉ ๋ค์ด์๋ค. ๋จ, ์ด๋ฆฐ์ด ์๋ 1์ด์ 1,000,000์ดํ์ ์ ์๋ก ์ ํ๋๊ณ , ์ด๋ฆฐ์ด ์๊ฐ N์ด๋ฉด ์ด๋ฆฐ์ด๋ค์ ๋ฒํธ๋ 1๋ถํฐ N๊น์ง์ ์ ์์ด๋ค.
์ถ๋ ฅ
์ ๋ ฅ์์ ์ฃผ์ด์ง ์ด๋ฆฐ์ด๋ค์ ์ค์ ๋ํด ๋ฒํธ์์๋๋ก ์ค์ ์ธ์ฐ๊ธฐ ์ํด ์ ์ผ ์์ด๋ ์ ์ผ ๋ค๋ก ๋ณด๋ด๋ ์ด๋ฆฐ์ด ์์ ์ต์๊ฐ์ ์ถ๋ ฅํด์ผ ํ๋ค.
์ ์ถ๋ ฅ ์์
์ ๋ ฅ
5
5 2 4 1 3
์ถ๋ ฅ
3
๋ด ๋ฌธ์ ํ์ด
import Foundation
var n = Int(readLine()!)!
var input = readLine()!.split(separator: " ").map({Int(String($0))!})
var position = Array(repeating: 0, count: n)
var count = 1
var max = 0
// position ์
๋ฐ์ดํธ
for i in 0..<n {
position[input[i]-1] = i
}
for i in 0..<n-1 {
if position[i] < position[i+1] {
count += 1
if count > max { max = count }
}
else { count = 1 }
}
print(n - max)
LIS๋ฌธ์ ์ธ์ค ์์๋๋ฐ, ์๋์๋ค๊ณ ํ๋ค..
์ต์ฅ ์ฆ๊ฐ ๋ถ๋ถ ์์ด์ ๊ตฌํ๊ณ , ๋๋จธ์ง ์์๋ค์ ์๋ฌด๋ ๊ฒ๋ ์ฎ๊ธธ ์ ์์ผ๋ฉด LIS๊ฐ ๋ง๋๋ฐ
์ด๊ฑด ๋งจ ์์ด๋ ๋งจ ๋ค๋ก๋ง ์ฎ๊ฒจ์ผ ํ๋ค๋ ์ ํ์กฐ๊ฑด์ด ์๊ธฐ ๋๋ฌธ์ ๊ทธ๋ ๊ฒ๋ง ํ๋ฉด ์์ธ๊ฐ ์๊ธด๋ค.ใ
๋ฐ๋ผ์ ๊ฐ ์์๋ค์ ์ธ๋ฑ์ค๋ฅผ ํ์ธํ๊ณ ์๋ง๊ฒ ์์๋ ์ด๋ฆฐ์ด์ ์๋ฅผ ๊ตฌํ์ฌ ํ์ด์ฃผ์๋ค.
- ์
๋ ฅ๋ ์์ด๋ค์ ์ธ๋ฑ์ค๋ฅผ ์ ์ฅํ๊ธฐ ์ํ position ๋ฐฐ์ด์ ์์ฑํ๋ค.
position์๋ input ๋ฐฐ์ด์ ๋์ด๋ ์๋ค์ ์ธ๋ฑ์ค๋ฅผ ์๋ ์์ด์ผ ํ ์์น์ ์ ์ฅํ๋ค.
(์๋ฅผ ๋ค์ด, input์ด [2, 1, 3]๋ผ๋ฉด position์ [1, 0, 2]๊ฐ ๋๋ค. input์ ์๋ [1, 2, 3] ์์ผ๋ก
๋ฐฐ์น๋์ด์ผ ํ๋๋ฐ, 1์ [1]์ ์กด์ฌํ๊ณ 2๋ [0]์, 3์ [2]์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ด๋ค.)
-> ๋ฌธ์ ์์ ์ฃผ์ด์ง ์์ ์ ๊ฒฝ์ฐ, position์ [3, 1, 4, 2, 0]์ด ์ ์ฅ๋๋ค. - ๋ ๋ฒ์งธ for๋ฌธ์์ position ๋ฐฐ์ด์ ์์๋๋ก ๊ฒ์ํ๋๋ฐ,
if) position ๋ฐฐ์ด์ ์ ์์๊ฐ ๋ค ์์๋ณด๋ค ์์ ๊ฒฝ์ฐ count์ 1์ ๋ํ๊ณ ,
count๊ฐ max๋ณด๋ค ํด ๊ฒฝ์ฐ์๋ max๋ฅผ ์ ๋ฐ์ดํธํ๋ค.
else) position ๋ฐฐ์ด์ ์ ์์๊ฐ ๋ค ์์๋ณด๋ค ํด ๊ฒฝ์ฐ์๋ count๋ฅผ 1๋ก ์ด๊ธฐํํ๋ค.
๐ก ํผ๋๋ฐฑ
- ๋์๋์ ์ญ๋๊ธ ์ค๋๊ฑธ๋ฆฐ ๋ฌธ์ ์ฌ๋ฐ.ใ ใ ๊ทผ๋ฐ ์๊ฐ๋ณด๋ค ์ฝ๊ฒ ํ๋ ธ๋ค.
- ๊ทธ๋ฆฌ๋ ๋ฌธ์ ๊ฐ ์ ๋ง ํ ๋ฒ ํ์ด๋ฅผ ์๊ฐํด๋ด์ง ๋ชปํ๋ฉด ์ ๋ง ์ด๋ ค์ด ๊ฒ ๊ฐ๋ค,,
- ๊ทธ๋๋ ๋ด ์์ผํ ๊ตฌ๊ธ๋ง ๋์ LIS์ธ์ค ์๊ณ ,, DP๋ถํฐ ์ด๋ถํ์์ LIS๊น์ง ๊ณต๋ถํ ์ ์์๋น,,
๋ฌธ์
'3๏ธโฃ Swift > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift Algorithm] ์ฃผ์ BOJ #11501 (0) | 2021.09.02 |
---|---|
[Swift Algorithm] ๊ณต์ฃผ๋์ ์ ์ BOJ #2457 (0) | 2021.09.01 |
[Swift Algorithm] ์์๋ฃ๊ธฐ BOJ #1965 (0) | 2021.08.28 |
[Swift Algorithm] ํ๋ฐฐ BOJ #8980 (0) | 2021.08.22 |
[Swift Algorithm] ์นด๋ ํฉ์ฒด ๋์ด BOJ #15903 (0) | 2021.08.22 |
๋๊ธ