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

[Swift Algorithm] ์ค„ ์„ธ์šฐ๊ธฐ BOJ #7570

by seolhee2750 2021. 8. 29.
๋ฌธ์ œ ์„ค๋ช…

๋Œ€ํ•œ ์–ด๋ฆฐ์ด์ง‘์— ์˜ฌํ•ด ์ž…ํ•™ํ•œ ์–ด๋ฆฐ์ด๋“ค์ด ๋†€์ดํ„ฐ์— ํ•œ ์ค„๋กœ ์„œ์žˆ๋‹ค. ๋ชจ๋“  ์–ด๋ฆฐ์ด๋“ค์—๊ฒŒ๋Š” ์ž…ํ•™ํ•  ๋•Œ ์ฃผ์–ด์ง„ ๋ฒˆํ˜ธ๊ฐ€ ์žˆ๊ณ  ๋ชจ๋‘ ์˜ท์— ๋ฒˆํ˜ธํ‘œ๋ฅผ ๋‹ฌ๊ณ  ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์–ด๋ฆฐ์ด๋“ค์€ ์•„์ง ๋ฒˆํ˜ธ ์ˆœ์„œ๋Œ€๋กœ ์ค„์„ ์ž˜ ์„œ์ง€ ๋ชปํ•˜๋ฏ€๋กœ ์„ ์ƒ๋‹˜์ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ ๋ฒˆํ˜ธ์ˆœ์„œ๋Œ€๋กœ ์ค„์„ ์„ธ์šฐ๋ ค๊ณ  ํ•œ๋‹ค.

๋ฐฉ๋ฒ•: ์ค„ ์„œ์žˆ๋Š” ์–ด๋ฆฐ์ด ์ค‘ ํ•œ ๋ช…์„ ์„ ํƒํ•˜์—ฌ ์ œ์ผ ์•ž์ด๋‚˜ ์ œ์ผ ๋’ค๋กœ ๋ณด๋‚ธ๋‹ค.

์œ„์˜ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ๋•Œ ์–ด๋ฆฐ์ด๊ฐ€ ์ด๋™ํ•ด์„œ ๋นˆ์ž๋ฆฌ๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒฝ์šฐ์—๋Š” ๋นˆ์ž๋ฆฌ์˜ ๋’ค์— ์žˆ๋Š” ์–ด๋ฆฐ์ด๋“ค์ด ํ•œ ๊ฑธ์Œ์”ฉ ์•ž์œผ๋กœ ๊ฑธ์–ด์™€์„œ ๋นˆ์ž๋ฆฌ๋ฅผ ๋ฉ”๊พผ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, 5๋ช…์˜ ์–ด๋ฆฐ์ด๋“ค์—๊ฒŒ 1๋ถ€ํ„ฐ 5๊นŒ์ง€์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์ ธ ์žˆ๊ณ , ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋กœ ์ค„ ์„œ์žˆ๋‹ค๊ณ  ํ•˜์ž. 

5 2 4 1 3

์œ„ ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฒˆํ˜ธ์ˆœ์„œ๋Œ€๋กœ ์ค„์„ ์„ธ์šธ ์ˆ˜ ์žˆ๋‹ค. 

  1. 1๋ฒˆ ์–ด๋ฆฐ์ด๋ฅผ ์ œ์ผ ์•ž์œผ๋กœ ๋ณด๋‚ธ๋‹ค. (5 2 4 1 3 → 1 5 2 4 3)
  2. 4๋ฒˆ ์–ด๋ฆฐ์ด๋ฅผ ์ œ์ผ ๋’ค๋กœ ๋ณด๋‚ธ๋‹ค. (1 5 2 4 3 → 1 5 2 3 4)
  3. 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๊นŒ์ง€ ๊ณต๋ถ€ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹น,,

 


 

๋ฌธ์ œ

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

๋Œ“๊ธ€