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

[Swift Algorithm] RGB๊ฑฐ๋ฆฌ BOJ #1149

by seolhee2750 2021. 10. 20.
๋ฌธ์ œ ์„ค๋ช…

RGB๊ฑฐ๋ฆฌ์—๋Š” ์ง‘์ด N๊ฐœ ์žˆ๋‹ค. ๊ฑฐ๋ฆฌ๋Š” ์„ ๋ถ„์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๊ณ , 1๋ฒˆ ์ง‘๋ถ€ํ„ฐ N๋ฒˆ ์ง‘์ด ์ˆœ์„œ๋Œ€๋กœ ์žˆ๋‹ค.

์ง‘์€ ๋นจ๊ฐ•, ์ดˆ๋ก, ํŒŒ๋ž‘ ์ค‘ ํ•˜๋‚˜์˜ ์ƒ‰์œผ๋กœ ์น ํ•ด์•ผ ํ•œ๋‹ค. ๊ฐ๊ฐ์˜ ์ง‘์„ ๋นจ๊ฐ•, ์ดˆ๋ก, ํŒŒ๋ž‘์œผ๋กœ ์น ํ•˜๋Š” ๋น„์šฉ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์•„๋ž˜ ๊ทœ์น™์„ ๋งŒ์กฑํ•˜๋ฉด์„œ ๋ชจ๋“  ์ง‘์„ ์น ํ•˜๋Š” ๋น„์šฉ์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•ด๋ณด์ž.

  • 1๋ฒˆ ์ง‘์˜ ์ƒ‰์€ 2๋ฒˆ ์ง‘์˜ ์ƒ‰๊ณผ ๊ฐ™์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
  • N๋ฒˆ ์ง‘์˜ ์ƒ‰์€ N-1๋ฒˆ ์ง‘์˜ ์ƒ‰๊ณผ ๊ฐ™์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
  • i(2 ≤ i ≤ N-1)๋ฒˆ ์ง‘์˜ ์ƒ‰์€ i-1๋ฒˆ, i+1๋ฒˆ ์ง‘์˜ ์ƒ‰๊ณผ ๊ฐ™์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ง‘์˜ ์ˆ˜ N(2 ≤ N ≤ 1,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ์ง‘์„ ๋นจ๊ฐ•, ์ดˆ๋ก, ํŒŒ๋ž‘์œผ๋กœ ์น ํ•˜๋Š” ๋น„์šฉ์ด 1๋ฒˆ ์ง‘๋ถ€ํ„ฐ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค. ์ง‘์„ ์น ํ•˜๋Š” ๋น„์šฉ์€ 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๋ชจ๋“  ์ง‘์„ ์น ํ•˜๋Š” ๋น„์šฉ์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ์ œ

์ž…๋ ฅ

3
26 40 83
49 60 57
13 89 99

์ถœ๋ ฅ

96

 

๋‚ด ๋ฌธ์ œ ํ’€์ด
let n = Int(readLine()!)!
var red = Array(repeating: 0, count: n)
var green = Array(repeating: 0, count: n)
var blue = Array(repeating: 0, count: n)

for i in 0..<n {
    let now = readLine()!.split(separator: " ").map({Int(String($0))!})
    
    if i == 0 {
        red[0] = now[0]
        green[0] = now[1]
        blue[0] = now[2]
    }
    else {
        red[i] = min(green[i-1], blue[i-1]) + now[0]
        green[i] = min(red[i-1], blue[i-1]) + now[1]
        blue[i] = min(red[i-1], green[i-1]) + now[2]
    }
}

print(min(red.last!, green.last!, blue.last!))

๐Ÿ‘‰ DP ๋ฌธ์ œ๋กœ, ์ง‘ ๋งˆ๋‹ค ์–ด๋–ค ์ƒ‰์„ ์น ํ–ˆ๋‹ค๋Š” ์ „์ œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์„ธ ๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š”๊ฒŒ ํฌ์ธํŠธ!

์ด ๋ฌธ์ œ๋Š” ์ด์ „์— ํ’€์—ˆ๋˜ #2579 ๊ณ„๋‹จ์˜ค๋ฅด๊ธฐ ๋ฌธ์ œ์™€ ํก์‚ฌํ•˜๋ฏ€๋กœ, ์ฐธ๊ณ !

 

[ํ’€์ด ์„ค๋ช…]

  • 1, 2, 3 ์ƒ‰์ด ์žˆ๋‹ค๊ณ  ํ•˜๊ณ , ๊ฐ๊ฐ 1์„ ๊ณจ๋ž์„ ๋•Œ, 2, ๊ทธ๋ฆฌ๊ณ  3์„ ๊ณจ๋ž๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ
    ๋ฉ”๋ชจ์ด์ œ์ด์…˜์œผ๋กœ ๊ธฐ๋กํ•˜์—ฌ ๋งˆ์ง€๋ง‰์— ๊ทธ ์ค‘ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.
  • ๋Œ€ํ‘œ๋กœ 1, ๋นจ๊ฐ„์ƒ‰์„ ๊ณจ๋ž๋‹ค๊ณ  ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋”ฐ์ ธ๋ณด์ž.
    ์–ด๋–ค ์ง‘์„ ๋นจ๊ฐ„์ƒ‰์œผ๋กœ ์น ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋ฐ”๋กœ ์ด์ „ ์ง‘์€ ์ดˆ๋ก์ด๋‚˜ ํŒŒ๋ž‘์„ ๊ณจ๋ž๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
    ๋”ฐ๋ผ์„œ 1์„ ๊ณ ๋ฅด๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ธฐ๋กํ•˜๋Š” red ๋ฐฐ์—ด์—,
    green ๋ฐฐ์—ด๊ณผ blue ๋ฐฐ์—ด์˜ ์ด์ „ ์œ„์น˜ ์ค‘ ๋” ์ž‘์€ ์ˆ˜๋ฅผ ๊ณจ๋ผ์„œ ๋”ํ•˜์—ฌ ์ €์žฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
  • ๋นจ๊ฐ„์ƒ‰๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ดˆ๋ก, ํŒŒ๋ž‘์˜ ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์œ„์˜ ์‹œํ–‰๊ณผ ๊ฐ™์ด ๋ฐ˜๋ณตํ•˜๋ฉด ๋œ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์™ธ๋กœ, ์ฒซ ๋ฒˆ์งธ ์ง‘์€ ์ด์ „ ์ง‘๊ณผ ๋น„๊ตํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ํŠน๋ณ„ํ•œ ์—ฐ์‚ฐ ์—†์ด
    ๋ฐ”๋กœ red, green, blue ๋ฐฐ์—ด์— ๋ชจ๋‘ ํ•ด๋‹น ์ƒ‰๊น” ๊ฐ’์„ ์ €์žฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

[์ฝ”๋“œ ์„ค๋ช…]

  • ๊ฐ๊ฐ red, blue, ๊ทธ๋ฆฌ๊ณ  green์„ ๊ณจ๋ž๋‹ค๊ณ  ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ด์„ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ–ˆ๋‹ค.
  • for ๋ฐ˜๋ณต์œผ๋กœ ์ง‘ ๋งˆ๋‹ค์˜ ์ƒ‰๊น” ๊ฐ€๊ฒฉ์„ ๋ฐ›์•„์˜ค๋ฉด์„œ ๋ฐ”๋กœ๋ฐ”๋กœ ์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ–ˆ๋‹ค.
  • i๊ฐ€ 0์ผ ๊ฒฝ์šฐ, ์ฒซ ๋ฒˆ์งธ ์ง‘์„ ์˜๋ฏธํ•˜๋ฏ€๋กœ ์ด ๋•Œ๋Š” ๊ฐ ๋ฐฐ์—ด์— ํ•ด๋‹น ๊ฐ€๊ฒฉ์„ ๊ทธ๋Œ€๋กœ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.
  • ๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ์—๋Š” ๊ฐ ์ƒ‰๊น”๋ณ„๋กœ ์œ„์—์„œ ์„ค๋ช…ํ•œ ํ’€์ด์™€๊ฐ™์€ ์—ฐ์‚ฐ์„ ์‹คํ–‰ํ–ˆ๋‹ค.

 

๐Ÿ’ก ํ”ผ๋“œ๋ฐฑ
  • ๋ฐ”๋กœ ์ „์— ํ’€์—ˆ๋˜ ๋ฌธ์ œ์™€ ์ •๋ง ์œ ์‚ฌํ•ด์„œ ๊ธˆ๋ฐฉ ํ’€ ์ˆ˜ ์žˆ์—ˆ๊ณ ,
    ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ณต๋ถ€ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
    ๋น„์Šทํ•œ ๋ฌธ์ œ๋“ค์„ ๋” ๋งŽ์ด ํ’€์–ด๋ณด๋ฉด ์ต์ˆ™ํ•ด์งˆ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

 


๋ฌธ์ œ

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

๋Œ“๊ธ€