๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 1874_์Šคํƒ ์ˆ˜์—ด

๋ฟŒ์•ผ._. 2021. 10. 1. 15:16

Silver III

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/1874)

<์Šคํƒ ์ˆ˜์—ด>

๋ฌธ์ œ 

 

์Šคํƒ (stack)์€ ๊ธฐ๋ณธ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ ์ค‘ ํ•˜๋‚˜๋กœ, ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ๋•Œ ์ž์ฃผ ์ด์šฉ๋˜๋Š” ๊ฐœ๋…์ด๋‹ค.
์Šคํƒ์€ ์ž๋ฃŒ๋ฅผ ๋„ฃ๋Š” (push) ์ž…๊ตฌ์™€ ์ž๋ฃŒ๋ฅผ ๋ฝ‘๋Š” (pop) ์ž…๊ตฌ๊ฐ€ ๊ฐ™์•„ ์ œ์ผ ๋‚˜์ค‘์— ๋“ค์–ด๊ฐ„ ์ž๋ฃŒ๊ฐ€ ์ œ์ผ ๋จผ์ € ๋‚˜์˜ค๋Š”
(LIFO, Last in First out) ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
1๋ถ€ํ„ฐ n๊นŒ์ง€์˜ ์ˆ˜๋ฅผ ์Šคํƒ์— ๋„ฃ์—ˆ๋‹ค๊ฐ€ ๋ฝ‘์•„ ๋Š˜์–ด๋†“์Œ์œผ๋กœ์จ, ํ•˜๋‚˜์˜ ์ˆ˜์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ, ์Šคํƒ์— push ํ•˜๋Š”
์ˆœ์„œ๋Š” ๋ฐ˜๋“œ์‹œ ์˜ค๋ฆ„์ฐจ์ˆœ์„ ์ง€ํ‚ค๋„๋ก ํ•œ๋‹ค๊ณ  ํ•˜์ž.
์ž„์˜์˜ ์ˆ˜์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ์Šคํƒ์„ ์ด์šฉํ•ด ๊ทธ ์ˆ˜์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€, ์žˆ๋‹ค๋ฉด ์–ด๋–ค ์ˆœ์„œ๋กœ
push์™€ pop ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ.

 

์ž…๋ ฅ

 

์ฒซ ์ค„์— n (1 ≤ n ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ n๊ฐœ์˜ ์ค„์—๋Š” ์ˆ˜์—ด์„ ์ด๋ฃจ๋Š” 1 ์ด์ƒ n์ดํ•˜์˜
์ •์ˆ˜๊ฐ€ ํ•˜๋‚˜์”ฉ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋ฌผ๋ก  ๊ฐ™์€ ์ •์ˆ˜๊ฐ€ ๋‘ ๋ฒˆ ๋‚˜์˜ค๋Š” ์ผ์€ ์—†๋‹ค.

 

์ถœ๋ ฅ 

 

์ž…๋ ฅ๋œ ์ˆ˜์—ด์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์—ฐ์‚ฐ์„ ํ•œ ์ค„์— ํ•œ ๊ฐœ์”ฉ ์ถœ๋ ฅํ•œ๋‹ค.
push์—ฐ์‚ฐ์€ +๋กœ, pop ์—ฐ์‚ฐ์€ -๋กœ ํ‘œํ˜„ํ•˜๋„๋ก ํ•œ๋‹ค. ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ NO๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

๋ฌธ์ œ ํ’€์ด

   - my solution

import sys

if __name__=='__main__':
    n=int(sys.stdin.readline().strip())

    arr=[]
    for i in range(n): #์ˆ˜์—ด ์ž…๋ ฅ
        arr.append(int(sys.stdin.readline().strip()))

    idx=0
    idx_stack=1
    temp=[] #์˜ค๋ฆ„์ฐจ์ˆœ push
    answer=[] # +,-
    result=[] # ๋งŒ๋“ค์–ด์ง„ ์ˆ˜์—ด
    while True:
        if idx>=n or idx_stack>n+1: #์ข…๋ฃŒ ์กฐ๊ฑด
            break
        if len(temp)!=0 and temp[-1]==arr[idx]: #temp์— ์ด๋ฏธ ์žˆ๋Š” ๊ฐ’ pop
            result.append(temp.pop())
            answer.append("-")
            idx+=1
        elif arr[idx]!=idx_stack: # push
            temp.append(idx_stack)
            idx_stack+=1
            answer.append("+")
        elif arr[idx]==idx_stack: # ๋„ฃ์œผ๋ ค๋Š” ๊ฐ’์ด ํ•„์š”ํ•œ ๊ฐ’์ด๋ฉด
            result.append(idx_stack) # push ์ „์— ๋ฐ”๋กœ result์— ์ถ”๊ฐ€
            answer.append("+") # puxh
            answer.append("-") # pop
            idx_stack+=1
            idx+=1

    if arr==result: # ๋งŒ๋“ค์–ด์ง„ ์ˆ˜์—ด์ด ์ž…๋ ฅ ์ˆ˜์—ด๊ณผ ๊ฐ™์œผ๋ฉด
        for i in answer:
            print(i)
    else: # ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ
        print("NO")

 

์˜ˆ์ „๋ถ€ํ„ฐ ๋ฌธ์ œ๋งŒ ๋ณด๊ณ  ์ดํ•ด๋ฅผ ๋ชปํ•ด์„œ ํฌ๊ธฐํ–ˆ๋˜ ๋ฌธ์ œ์ด๋‹ค.

์ฐจ๊ทผ์ฐจ๊ทผ ์‚ดํŽด๋ณด๋‹ˆ ์ƒ๊ฐ๋ณด๋‹ค ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์› ๋‹ค.

 

1) n์ž…๋ ฅ, ๋งŒ๋“ค ์ˆ˜์—ด ์ž…๋ ฅ_arr

2) while๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜์—ด ๋งŒ๋“ค๊ธฐ

  2-1) ์ข…๋ฃŒ ์กฐ๊ฑด) arr์˜ index๋ฅผ ๋„˜๊ฑฐ๋‚˜ n+1๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ

  2-2) temp์— ์ด๋ฏธ ์žˆ๋Š” ๊ฐ’์ด๋ฉด pop

  2-3) idx_stack์ด ํ•„์š”ํ•œ ๊ฐ’์ด ์•„๋‹ˆ๋ฉด
  2-4) idx_stack์ด ์ˆ˜์—ด์— ํ•„์š”ํ•œ ๊ฐ’์ด๋ฉด push

3) ๋งŒ๋“ค์–ด์ง„ ์ˆ˜์—ด์ด ์ž…๋ ฅ ์ˆ˜์—ด๊ณผ ๊ฐ™์œผ๋ฉด ์ถœ๋ ฅ, ๊ฐ™์ง€ ์•Š์œผ๋ฉด 'NO' ์ถœ๋ ฅ


์ƒ๊ฐ๐Ÿค”

 

๋ช‡ ๋ฒˆ์ด๋‚˜ ์ง€๋‚˜์นœ ๋ฌธ์ œ ์น˜๊ณ ๋Š” ์ƒ๊ฐ๋ณด๋‹ค ๋นจ๋ฆฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋ฌธ์ œ ์ดํ•ด๋ฅผ ๋ชปํ–ˆ๋˜ ๊ฒƒ์ด ์ปธ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๊ณ  ๋‚˜์„œ๋Š” ๊ธˆ๋ฐฉ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

ํŒŒ์ด์ฌ์—์„œ๋Š” list๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๊ธฐ์— ์ด ๋ฌธ์ œ์˜ ํฌ์ธํŠธ๋Š”

1) ๋ฌธ์ œ ์ดํ•ด!!! ๊ฐ€ ๊ฐ€์žฅ ํฌ๊ณ 

2) ํŒŒ์ด์ฌ_ list์˜ ํ™œ์šฉ, ์กฐ๊ฑด๋ฌธ ์‚ฌ์šฉ

์ด์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.