문제 이해
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
'알고리즘 > 백준알고리즘' 카테고리의 다른 글
[백준 알고리즘/Python3] 1158 요세푸스 문제 (0) | 2021.12.24 |
---|---|
[백준 알고리즘/Python3] 1406 에디터 (0) | 2021.12.21 |
[백준 알고리즘/Python3] 9093 단어 뒤집기 (0) | 2021.12.18 |
[백준 알고리즘/Python3] 15649 N과 M(1) (0) | 2021.12.10 |
[백준 알고리즘/Python3] 2164 카드뽑기 (0) | 2021.12.08 |