1874번: 스택 수열
1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.
www.acmicpc.net
문제에서 시키는대로 단순 구현만 하면 되는 문제다. 문제 이해를 잘못해서 2시간이나 걸렸다... 끙 아이디어는 맞게 잡은 것 같은데 자꾸 코드가 불필요하게 지저분해져서 잠깐 방향이 맞나 타 코드를 참고했고 너무 꼬아서 생각했다는 걸 깨달았다. 문제를 너무 어렵게 보지 말고, 매번 조건을 달아서 처리해줘야 하는 경우에는 필시... 내가 생각못한 테케에서 걸리는 경우가 많다. 범용적이게 코드를 짜자.
스택에 넣을 수 있는 숫자는 오름차순만 가능하다. 즉 내가 지금까지 넣은 숫자의 개수를 갖고 있으면 내가 새로운 숫자를 어디부터 시작해야 되는지 알 수 있다.
내가 넣은 숫자의 개수보다 출력해야 하는 숫자가 크면 더 넣어준다. 다 넣어준 뒤, pop()을 하여 해당 숫자가 출력해야하는 숫자인지 체크한다. 만약 pop() 했을 때 해당 숫자가 출력해야 하는 숫자와 다르다면 스택 수열을 만들 수 없는 상황이므로 바로 반복문을 종료하면 된다. 나는 push/pop 연산을 담은 answer 배열을 초기화해주고 끝냈다.
코드는 다음과 같다. (깃헙에는 삽질했던 버전을 함께 올려두었다... )
import sys
input = sys.stdin.readline
N = int(input())
DATA = [int(input()) for _ in range(N)]
count = 0
answer = []
nums = []
for num in DATA:
while count < num:
answer.append("+")
count += 1
nums.append(count)
top = nums.pop()
if top == num:
answer.append("-")
else:
answer.clear()
break
if len(answer) == 0:
print("NO")
else:
for i in answer:
print(i)
어려운 문제가 아니어도 말리기 시작하면 진짜 끝도 없이 말리는 것 같다. 문제를 풀다가 딱 생각을 환기하고 새로운 마음으로 풀 수 있게 노력해야지.
'Algorithm > BOJ' 카테고리의 다른 글
[백준] 2493 탑 - python (0) | 2022.10.14 |
---|---|
[백준] 10799 쇠막대기 - python (0) | 2022.10.13 |
[백준] 1406 에디터 - python (0) | 2022.10.12 |
(다시 풀어볼 문제) [백준] 1935 후위 표기식2 - python (0) | 2022.10.11 |
(다시 풀어볼 문제) [백준] 2981 검문 - python (0) | 2022.10.10 |