μ•Œκ³ λ¦¬μ¦˜ πŸ‘©πŸ»‍πŸ’»/λ°±μ€€

[BAEKJOON] 1874 | μŠ€νƒ μˆ˜μ—΄

flowing1ife 2024. 11. 12. 11:55

πŸ”Ž 1874 | μŠ€νƒ μˆ˜μ—΄

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


πŸ’‘ Solution

Callout Box
✍🏻
Logic
1. ν•΄λ‹Ή μˆ˜μ—΄μ„ λ§Œλ“€κΈ° μœ„ν•΄μ„œλŠ” λ¨Όμ € λͺ©ν‘œλ‘œν•˜λŠ” μˆ˜μ—΄μ˜ μˆ˜κΉŒμ§€ μŠ€νƒμ— 수λ₯Ό λ„£μ–΄μ€€λ‹€.
2. 이후, μŠ€νƒμ˜ top μ›μ†Œκ°€ λͺ©ν‘œλ‘œ ν•˜λŠ” μˆ˜μ™€ κ°™μœΌλ©΄ pop ν•΄μ€€λ‹€.
3. μœ„μ˜ 과정을 λ°˜λ³΅ν•˜λ©°, λ§Œμ•½ 1번 과정을 마친 ν›„ 2번 κ³Όμ •μ˜ 쑰건이 좩쑱이 μ•ˆλ˜λ©΄ μˆ˜μ—΄μ„ λ§Œλ“€ 수 μ—†λ‹€.
import sys
input =  sys.stdin.readline

n = int(input())
num_list = [int(input()) for _ in range(n)]

def findNumList(n, num_list) :
    stack = []
    result = []
    
    i = 0
    m = 1
    for i in range(n) :
        num = num_list[i]
        
        while m <= num :
            stack.append(m)
            result.append('+')
            m += 1
        
        if stack[-1] == num :
            stack.pop()
            result.append('-')
        else :
            return 0
            
    return result
    
result = findNumList(n, num_list)

if result :
    for d in result :
        print(d)
else :
    print('NO')

import sys
input =  sys.stdin.readline

n = int(input())
num_list = [int(input()) for _ in range(n)]

def findNumList(num_list) :
    stack = []
    result = []
    
    i = 0
    m = 1
    max_num = max(num_list)
    while m <= max_num : 
        if m <= num_list[i] :
            stack.append(m)
            result.append('+')
            m += 1
            
        while stack and stack[-1] == num_list[i]:
            stack.pop()
            result.append('-')
            i += 1
            if i >= len(num_list):  # 리슀트 λκΉŒμ§€ λ„λ‹¬ν•˜λ©΄ 쀑단
                break
    
    if len(stack) == 0:
        return result
    else:
        return 0
        
result = findNumList(num_list)

if result :
    for d in result :
        print(d)
else :
    print('NO')
Toggle Example
β–Ά πŸ“Œ Note
βˆ™ μ‹œκ°„μ΄ˆκ³Ό 문제둜 많이 μ• μ“΄ 문제
1. μˆ˜μ—΄μ„ μ°Ύμ§€ λͺ»ν•˜λŠ” 경우의 else 처리λ₯Ό 잘λͺ»ν•΄μ„œ λ¬΄ν•œλ£¨ν”„λ₯Ό 돌게 됨.
2. 예λ₯Ό λ“€μ–΄ 5,3 μˆ˜μ—΄μ΄λΌλ©΄ 이미 '5'μ—μ„œ m은 5κΉŒμ§€ κ°„ ν›„ 5λ₯Ό pop ν–ˆκΈ° λ•Œλ¬Έμ— stack의 top은 4, m은 5이기에 λ‘λ²ˆμ§Έ 수인 3λ³΄λ‹€λŠ” ν¬λ―€λ‘œ κ³„μ†ν•΄μ„œ 쑰건이 λ²ˆκ°ˆμ•„κ°€λ©° μ²΄ν¬λ˜μ§€λ§Œ breakλ₯Ό ν•  수 μ—†μŒ.