μκ³ λ¦¬μ¦ π©π»π»/λ°±μ€
[BAEKJOON] 1874 | μ€ν μμ΄
flowing1ife
2024. 11. 12. 11:55
π 1874 | μ€ν μμ΄
https://www.acmicpc.net/problem/1874
π‘ Solution
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')
βΆ π Note
β μκ°μ΄κ³Ό λ¬Έμ λ‘ λ§μ΄ μ μ΄ λ¬Έμ
1. μμ΄μ μ°Ύμ§ λͺ»νλ κ²½μ°μ else μ²λ¦¬λ₯Ό μλͺ»ν΄μ 무ν루νλ₯Ό λκ² λ¨.
2. μλ₯Ό λ€μ΄ 5,3 μμ΄μ΄λΌλ©΄ μ΄λ―Έ '5'μμ mμ 5κΉμ§ κ° ν 5λ₯Ό pop νκΈ° λλ¬Έμ stackμ topμ 4, mμ 5μ΄κΈ°μ λλ²μ§Έ μμΈ 3보λ€λ ν¬λ―λ‘ κ³μν΄μ μ‘°κ±΄μ΄ λ²κ°μκ°λ©° 체ν¬λμ§λ§ breakλ₯Ό ν μ μμ.
πμ°Έκ³ : https://www.acmicpc.net/board/view/152451