본문 바로가기

알고리즘/백준알고리즘

[백준 알고리즘/Python3] 1874 스택 수열

문제 이해 

4를 출력시킬려면 1,2,3를 스택에 미리 넣어넣고 4 push하고 다시 pop 해야 합니다.

 

제가 생각했던건

  • 4를 입력 -> + + + - 가 출력
  • 3을 입력 -> - 가 출력

한 줄에 한 개씩 출력한다 해서 이렇게 생각했는데 아니였습니다.

43687521을 입력하면 +++--++-++-----가 출력되는 형태로 만들어야 합니다.

import sys

test_case = int(sys.stdin.readline())
list = []
value = 1
result = []
for i in range(1,test_case+1):
    
    num = int(sys.stdin.readline())

    for j in range(value ,num+1):
        list.append(j)
        print("+")
        value = num+1

    if(list[-1] == num):
        list.pop()
        print("-")
    else:
        print("NO")
        exit(0)

여기서 value변수는 이전에 스택에 넣어둔 값을 저장한 것입니다. 만약 4을 입력하면 다음에 넣을 수는 5가 되겠지요. 그러면 for문은 5부터 시작하게 됩니다. 그래서 5 이후의 값만 저장할 수 있지요.

이렇게 출력을 하면 답은 나옵니다 하지만 출력초과 라고 뜨면서 실패가 됩니다. 그래서 뭐가 문제일까 하고 다른 사람의 코드를 살펴보니 결과값을 list에 담아서 마지막에 출력하더군요. 그 때 "아.. 이거 숫자 넣을 때 출력되는게 아니구나.." 살펴봤습니다.

 

 

 

 

그래서 코드 수정결과

코드

import sys

test_case = int(sys.stdin.readline())
list = []
value = 1
result = []
for i in range(1,test_case+1):
    
    num = int(sys.stdin.readline())

    for j in range(value ,num+1):
        list.append(j)
        result.append("+")
        value = num+1

    if(list[-1] == num):
        list.pop()
        result.append("-")
    else:
        print("NO")
        exit(0)
        
for j in result:
    print(j)

result라는 list에 결과값을 담아서 출력을 하면 결과 값이 나옵니다.

 

 

 

기타

백준 예제를 보면 

5 ->3 으로 갈 때 NO가 출력이 되야합니다. 여기서 결과값을 담아서 출력해야한다는 힌트를 알아차릴 수 있습니다.

728x90