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

[Swift Algorithm] ์ฃผ์‹ BOJ #11501

by seolhee2750 2021. 9. 2.
๋ฌธ์ œ ์„ค๋ช…

ํ™์ค€์ด๋Š” ์š”์ฆ˜ ์ฃผ์‹์— ๋น ์ ธ์žˆ๋‹ค. ๊ทธ๋Š” ๋ฏธ๋ž˜๋ฅผ ๋‚ด๋‹ค๋ณด๋Š” ๋ˆˆ์ด ๋›ฐ์–ด๋‚˜, ๋‚  ๋ณ„๋กœ ์ฃผ๊ฐ€๋ฅผ ์˜ˆ์ƒํ•˜๊ณ  ์–ธ์ œ๋‚˜ ๊ทธ๊ฒŒ ๋งž์•„๋–จ์–ด์ง„๋‹ค. ๋งค์ผ ๊ทธ๋Š” ์•„๋ž˜ ์„ธ ๊ฐ€์ง€ ์ค‘ ํ•œ ํ–‰๋™์„ ํ•œ๋‹ค.

  1. ์ฃผ์‹ ํ•˜๋‚˜๋ฅผ ์‚ฐ๋‹ค.
  2. ์›ํ•˜๋Š” ๋งŒํผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ฃผ์‹์„ ํŒ๋‹ค.
  3. ์•„๋ฌด๊ฒƒ๋„ ์•ˆํ•œ๋‹ค.

ํ™์ค€์ด๋Š” ๋ฏธ๋ž˜๋ฅผ ์˜ˆ์ƒํ•˜๋Š” ๋›ฐ์–ด๋‚œ ์•ˆ๋ชฉ์„ ๊ฐ€์กŒ์ง€๋งŒ, ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ์ž์‹ ์ด ์ตœ๋Œ€ ์ด์ต์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š”์ง€ ๋ชจ๋ฅธ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹น์‹ ์—๊ฒŒ ๋‚  ๋ณ„๋กœ ์ฃผ์‹์˜ ๊ฐ€๊ฒฉ์„ ์•Œ๋ ค์ฃผ์—ˆ์„ ๋•Œ, ์ตœ๋Œ€ ์ด์ต์ด ์–ผ๋งˆ๋‚˜ ๋˜๋Š”์ง€ ๊ณ„์‚ฐ์„ ํ•ด๋‹ฌ๋ผ๊ณ  ๋ถ€ํƒํ–ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‚  ์ˆ˜๊ฐ€ 3์ผ์ด๊ณ  ๋‚  ๋ณ„๋กœ ์ฃผ๊ฐ€๊ฐ€ 10, 7, 6์ผ ๋•Œ, ์ฃผ๊ฐ€๊ฐ€ ๊ณ„์† ๊ฐ์†Œํ•˜๋ฏ€๋กœ ์ตœ๋Œ€ ์ด์ต์€ 0์ด ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋งŒ์•ฝ ๋‚  ๋ณ„๋กœ ์ฃผ๊ฐ€๊ฐ€ 3, 5, 9์ผ ๋•Œ๋Š” ์ฒ˜์Œ ๋‘ ๋‚ ์— ์ฃผ์‹์„ ํ•˜๋‚˜์”ฉ ์‚ฌ๊ณ , ๋งˆ์ง€๋ง‰๋‚  ๋‹ค ํŒ”์•„ ๋ฒ„๋ฆฌ๋ฉด ์ด์ต์ด 10์ด ๋œ๋‹ค.

 

์ž…๋ ฅ

์ž…๋ ฅ์˜ ์ฒซ ์ค„์—๋Š” ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ž์—ฐ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ๋ณ„๋กœ ์ฒซ ์ค„์—๋Š” ๋‚ ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ž์—ฐ์ˆ˜ N(2 ≤ N ≤ 1,000,000)์ด ์ฃผ์–ด์ง€๊ณ , ๋‘˜์งธ ์ค„์—๋Š” ๋‚  ๋ณ„ ์ฃผ๊ฐ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” N๊ฐœ์˜ ์ž์—ฐ์ˆ˜๋“ค์ด ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋‚  ๋ณ„ ์ฃผ๊ฐ€๋Š” 10,000์ดํ•˜๋‹ค.

 

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ๋ณ„๋กœ ์ตœ๋Œ€ ์ด์ต์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ํ•˜๋‚˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋‹ต์€ ๋ถ€ํ˜ธ์žˆ๋Š” 64bit ์ •์ˆ˜ํ˜•์œผ๋กœ ํ‘œํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

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

์ž…๋ ฅ

3
3
10 7 6
3
3 5 9
5
1 1 3 1 2

์ถœ๋ ฅ

0
10
5

 

๋‚ด ๋ฌธ์ œ ํ’€์ด
import Foundation

var testCase = Int(readLine()!)!

for _ in 0..<testCase {
    let day = Int(readLine()!)!
    let stocks = readLine()!.split(separator: " ").map({Int(String($0))!})
    
    var answer = 0
    var max = 0
    
    for i in (0..<day).reversed() {
        if max < stocks[i] { max = stocks[i] }
        else { answer += max - stocks[i] }
    }
    
    print(answer)
}

๐Ÿ‘‰ ๋‚  ๋ณ„๋กœ ํ˜„์žฌ ์ฃผ๊ฐ€๋ณด๋‹ค ์ถ”ํ›„์— ์ฃผ๊ฐ€๊ฐ€ ๋” ์ƒ์Šนํ•˜๋Š” ๋‚ ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์ฃผ๋Š” ๊ฒƒ์ด ํฌ์ธํŠธ!

๋”ฐ๋ผ์„œ ๋‚˜๋Š” ๋งˆ์ง€๋ง‰๋‚ ๋ถ€ํ„ฐ ๋ฐ˜๋Œ€๋กœ ๋ฐ˜๋ณตํ•ด์ฃผ๋ฉด์„œ ํ˜„์žฌ ์ฃผ๊ฐ€๋ณด๋‹ค,

์ง€๊ธˆ๊นŒ์ง€ ๊ฒ€์‚ฌํ•œ ๋‚ ๋“ค์˜ ์ฃผ๊ฐ€ ์ค‘ ๋” ๋†’์€ ๋‚ ์ด ์กด์žฌํ•˜๋Š”์ง€ ์ฒดํฌํ•ด์ฃผ์—ˆ๋‹ค.

(๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ์ž…๋ ฅ ์˜ˆ์‹œ ์ค‘, 1 1 3 1 2 ์ˆœ์œผ๋กœ ๋ฐฐ์น˜๋œ ์ฃผ๊ฐ€ ๋ฐฐ์—ด์„ ๋Œ€ํ‘œ๋กœ ๋ณด๋ฉด

๋งˆ์ง€๋ง‰๋‚ ์ธ 2๋ถ€ํ„ฐ ๊ฒ€์‚ฌํ•˜๋Š”๋ฐ, max๊ฐ€ 0์œผ๋กœ ์ดˆ๊ธฐํ™”๋œ ์ƒํƒœ๊ธฐ ๋•Œ๋ฌธ์— max๋ฅผ 2๋กœ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ์œผ๋กœ ๋„˜์–ด๊ฐ€๋ฉด ์ฃผ๊ฐ€๊ฐ€ 1์ธ๋ฐ, max๋ณด๋‹ค ์ž‘์€ ๊ฐ’์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์ด ๋•Œ max๋ณด๋‹ค ํ˜„์žฌ ์ฃผ๊ฐ€๊ฐ€ ์ž‘๋‹ค๋Š” ์–˜๊ธฐ๋Š” '์˜ค๋Š˜'์ดํ›„์— ์ฃผ๊ฐ€๊ฐ€ ๋” ์˜ค๋ฅด๋Š” ๋‚ ์ด ์กด์žฌํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๊ณ ,

'์˜ค๋Š˜' ์ดํ›„์˜ ๋‚ ๋“ค ์ค‘ ๊ฐ€์žฅ ์ฃผ๊ฐ€๊ฐ€ ๋†’์€ ๋•Œ์˜ ์ฃผ๊ฐ€๊ฐ€ ๋ฐ”๋กœ max๋ผ๋Š” ๋œป์ด๋‹ค.

๋”ฐ๋ผ์„œ ์ด ๋•Œ ์ฃผ์‹์„ ํ•˜๋‚˜ ์‚ฌ๊ณ  max์ผ ๋•Œ ํŒ”๋ฉด ์ˆ˜์ต์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ

(max - ํ˜„์žฌ๊ฐ€)๋ฅผ ์ „์ฒด ์ˆ˜์ต์ธ answer์— ๋”ํ•ด์ค€๋‹ค.)

  • ์ˆ˜์ต์„ ๋ˆ„์ ํ•  answer ๋ณ€์ˆ˜์™€ ํƒ์ƒ‰ํ•œ ์ฃผ๊ฐ€ ์ค‘ ๊ฐ€์žฅ ๋†’์€ ์ฃผ๊ฐ€๋ฅผ ์ €์žฅํ•  max ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ–ˆ๋‹ค.
  • ์ž…๋ ฅ๋ฐ›์€ ์ฃผ๊ฐ€ ๋ฐฐ์—ด์„ ๋’ค์—์„œ๋ถ€ํ„ฐ ๋ฐ˜๋ณตํ•ด์ฃผ์—ˆ๋‹ค.
  • max๋ณด๋‹ค ํ˜„์žฌ๊ฐ€๊ฐ€ ๋†’์„ ๊ฒฝ์šฐ max๋ฅผ ์—…๋ฐ์ดํŠธํ–ˆ๊ณ ,
    max๋ณด๋‹ค ํ˜„์žฌ๊ฐ€๊ฐ€ ๋‚ฎ์„ ๊ฒฝ์šฐ max์—์„œ ํ˜„์žฌ๊ฐ€๋ฅผ ๋บ€ ๊ฐ’์„ answer์— ๋”ํ–ˆ๋‹ค.

 

๐Ÿ’ก ํ”ผ๋“œ๋ฐฑ
  • ์•ž์—์„œ๋ถ€ํ„ฐ ๊ฒ€์‚ฌํ•ด์ฃผ๋ฉด ๊ณ„์† max๋ฅผ ๊ฒ€์ƒ‰ํ•ด์ค˜์•ผํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋†’์•„์ง€๋Š”๋ฐ,
    ๋’ค์—์„œ๋ถ€ํ„ฐ ๊ฒ€์‚ฌํ•˜๋ฉด ๋œ๋‹ค๋Š” ์ ๋งŒ ์บ์น˜ํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๊ฐ™๋‹ค.

 


 

๋ฌธ์ œ

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

๋Œ“๊ธ€