Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Algorithm/Baekjoon

[๋ฐฑ์ค€] (Swift) 1874๋ฒˆ - ์Šคํƒ ์ˆ˜์—ด

๊ฐ์ž ๐Ÿฅ” 2022. 1. 28. 18:48
๋ฐ˜์‘ํ˜•

 

๋ฌธ์ œ ๋งํฌ

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

๋ฐ˜์‘ํ˜•
 

1874๋ฒˆ: ์Šคํƒ ์ˆ˜์—ด

1๋ถ€ํ„ฐ n๊นŒ์ง€์— ์ˆ˜์— ๋Œ€ํ•ด ์ฐจ๋ก€๋กœ [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ˆ˜์—ด [4, 3, 6, 8, 7, 5, 2, 1]์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

www.acmicpc.net

 

๋‚˜์˜ ํ’€์ด

๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ์กฐ๊ธˆ ๊ฑธ๋ ธ์ง€๋งŒ, ์ดํ•ดํ•˜๊ณ  ๋‚˜๋‹ˆ ์–ด๋ ค์šด ๋ฌธ์ œ๋Š” ์•„๋‹ˆ์—ˆ๋‹ค.

  • ๋ฌธ์ œ์˜ ์ฒซ๋ฒˆ์žฌ ์ž…์ถœ๋ ฅ์„ ์˜ˆ์‹œ๋กœ ๋“ค์–ด๋ณด์•˜๋‹ค. (8 4 3 6 8 7 5 2 1)
  • ์ž…๋ ฅ์„ ํ•ด์„ํ•ด๋ณด๋ฉด, ์ฒ˜์Œ ์ˆซ์ž 8์„ ๊ธฐ์ค€์œผ๋กœ 8 ๋ฒˆ ์ž…๋ ฅ ๋ฐ›์„๊ฑฐ๊ณ , ์ˆ˜์—ด์€ 4,3,,,, ์ด๋ ‡๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. ๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค.
  • ๋”ฐ๋ผ์„œ n์„ 8 ๋กœ ๋‘๊ณ  for ๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ๋’ค์— 8๋ฒˆ ์ž…๋ ฅ์„ ๋ฐ›์ž.
  • ๊ทธ๋ฆฌ๊ณ  ๋ฌธ์ œ๋ฅผ ํ•ด์„ํ•ด๋ณด๋ฉด, stack์„ ์ด์šฉํ•ด์„œ 4,3,6,8,7,5,2,1 ์ด๋ผ๋Š” ์ˆ˜์—ด์„ ๋งŒ๋“ค๊ณ  ์‹ถ์€๋ฐ, stack์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€๋ฅผ ์•Œ๊ณ ์‹ถ๋‹ค๋Š” ๋œป์ด๋‹ค. ๋”ฐ๋ผ์„œ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๊ตฌ์„ฑ๊ฐ€๋Šฅํ•œ ๋นˆ์Šคํƒ์„ ๋งŒ๋“ค์–ด์ฃผ์ž. (stack ๋ฐฐ์—ด ์ƒ์„ฑ)
  • ๊ทธ๋ฆฌ๊ณ  stack์˜ ๋™์ž‘๋ฐฉ์‹์„ ์•Œ ์ˆ˜ ์žˆ๋„๋ก answer๋ผ๋Š” ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด +.- ๋ฅผ ๋„ฃ์–ด์ค„๊ฒƒ์ด๋‹ค.
  • ---------------------------------------------------------------------------------
  • ์ˆ˜์—ด์˜ ์ฒ˜์Œ ์ˆ˜๋กœ 4๊ฐ€ ์˜ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.
    • stack์€ Last in First Out ์ •์ฑ…์„ ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— [1, 2, 3, 4] ๋ผ๋Š” stack์ด์–ด์•ผ๋งŒ 4๊ฐ€ ์ถœ๋ ฅ ๊ฐ€๋Šฅํ•˜๋‹ค. (๋งจ ๋’ค์—์žˆ๋Š” ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ฒ˜์Œ์— ์ถœ๋ ฅ๋˜์–ด์•ผํ•˜๋ฏ€๋กœ)
    • ๋”ฐ๋ผ์„œ count ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ํ•˜๋‚˜์”ฉ ๋”ํ•ด๊ฐ€๋ฉด์„œ stack์— ๋„ฃ์–ด์ฃผ๊ณ , [1,2,3,4] stack์„ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ stack์—๋Š” 1,2,3,4 ๋ผ๋Š” ์ˆ˜๊ฐ€ push๋˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋™์‹œ์— + ๋ฅผ answer๋ฐฐ์—ด์— ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.
    • ๊ทธ๋ฆฌ๊ณ  ํ•œ ๋ฒˆ ์Šคํƒ์œผ๋กœ ๋“ค์–ด๊ฐ„ ์ˆซ์ž๋Š” ์ค‘๋ณต๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•˜์˜€๊ธฐ์— +=1 ์”ฉ count์— ๋”ํ•ด์ฃผ์—ˆ๋‹ค.
  • ์ฒ˜์Œ์ˆ˜๋กœ 4๋ฅผ ๋ฝ‘์•„๋‚ด๊ธฐ ์œ„ํ•ด stack์—์„œ 4๋ฅผ ๋ฝ‘์•„๋ฒ„๋ฆด ๊ฒƒ์ด๋‹ค.
    • stack์—์„œ popLast() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด 4๋ฅผ ๋ฝ‘์•„์ฃผ์—ˆ๋‹ค. ์ด์ œ ๋‚จ์€ stack = [1,2,3] ์ด๋‹ค.
    • ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ stack์˜ ๋™์ž‘์„ ์ถœ๋ ฅํ•ด์•ผํ•˜๋Š” answer ๋ฐฐ์—ด์— -๋ฅผ ๋„ฃ์–ด์ค€๋‹ค. ์ง€๊ธˆ answer=[+,+,+,+,-]์ด๋‹ค.
  • ๋‹ค์Œ ์ˆ˜์—ด๋กœ ์™€์•ผํ•˜๋Š” ์ˆ˜๋Š” 3์ด๋‹ค. 3์€ ์ง€๊ธˆ ๋ฐ”๋กœ stack์—์„œ ์ถ”์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 
    • count๋Š” 5๊ฐ€ ๋˜์—ˆ๊ณ , num์€ 3์ด๋‹ˆ๊นŒ while ์กฐ๊ฑด์€ ๋งŒ์กฑํ•˜์ง€ ์•Š์•„ ๊ฑฐ์น˜์ง€ ์•Š๋Š”๋‹ค. (push๋ฅผ ๊ฑด๋„ˆ๋›ด๋‹ค.)
    • if ๋ฌธ์œผ๋กœ ๊ฐ€๋Š”๋ฐ, stack.last = 3 ์ด๊ณ  num=3 ์ด๋‹ˆ, ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— if ๋ฌธ์„ ํ†ต๊ณผํ•˜๋ฉฐ pop ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์ด๋Ÿฐ์‹์œผ๋กœ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ๋™์ž‘์„ ํ•˜๊ฒŒ๋” ์ฝ”๋“œ๋ฅผ ์•„๋ž˜์ฒ˜๋Ÿผ ๊ตฌ์„ฑํ–ˆ๋‹ค. 

//push : + , pop : -, ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ : NO
//์ฒ˜์Œ ์ˆ˜ n , ์ดํ›„ n ๋ฒˆ ์ž…๋ ฅ ๋ฐ›์Œ

import Foundation

let n = Int(readLine()!)!

var count = 1
var stack: [Int] = []
var answer: [String] = []


for _ in 0..<n {
    
    let num = Int(readLine()!)!
    
    while count <= num {
        stack.append(count)
        answer.append("+")
        count += 1
    }
    
    if stack.last == num {
        stack.popLast()
        answer.append("-")
    } else {
        print("NO")
        exit(0)
    }
    
}

print(answer.joined(separator: "\n"))
๋ฐ˜์‘ํ˜•