추천 문제 풀이 시간 : 30분


틀린 코드

n = int(input())
stack = list()
ans = list()
num = 1
for i in range(1,n+1):
  p = int(input())
  for j in range(num, n+1):
    if not stack or stack[-1] != p: # 비어있거나 다를때
      stack.append(j)
      num += 1
      ans.append("+")
    else: # 같을 때
      stack.pop()
      ans.append("-")
      break
print(ans)

 

틀린 이유

for문과 while 문을 구별해서 잘 쓸 줄 알아야 한다.

 

카운트 하는 변수가 여러개가 있고, 개별로 늘려갈 때 꼭

for j in range(..) 로 쓰는 방법만 있는 것이 아니라

 

while 문을 통해 변수 하나를 지정해서

while num <= p

    num += 1

을 통해 하나씩 늘려갈 수 있다.


정답 코드

n = int(input())

stack = list()
ans = list()
num = 1

for i in range(1, n+1):
    p = int(input())
    
    while num <= p: # 다를 때
      stack.append(num)
      num += 1
      ans.append('+')
    
    if stack[-1] == p: # 같을 때
      stack.pop()
      ans.append('-')
    else: # 불가능한 경우
      print("NO")
      exit(0)
print("\n".join(result))

 

스택, 그리디

복사했습니다!