코테

boj1874

SigLee0505 2023. 6. 21. 11:14

문제

문제 해석

스택 수열이다.
여기서 내가 고민했던 것은

  1. 마지막으로 저장한 값을 알고 있어야한다. -> 변수 하나 만들자.
  2. if문을 통해 분기를 해야겠다.
    • 조건은?
      1. 스택의 마지막 값 보다 크다.
        1. 마지막 입력 수 보다 크다.
          • 진행
        2. 마지막 입력 수 보다 작다.
          • 탈출 조건 성립 불가능
      2. 스택의 마지막 값 보다 작다.
        • push 이후 다시 검증
      3. 스택의 마지막 값과 같다.
        • 다음 수로 넘엉간다.
  3. if문의 조건들이 무수히 반복되어야한다.

코드

  1. 문자열로 만들었을때
    import sys
    from collections import deque
    

n = int(sys.stdin.readline())
tmp = 0
d = deque()
d.append(0)
answer = ""

for _ in range(n):
num = int(sys.stdin.readline())

while True:
    if d[-1] < num:
        if tmp < num:
            tmp += 1
            d.append(tmp)
            answer += "+\n"
        else:
            answer = "NO"
            break
    elif d[-1] == num:
        d.pop()
        answer += "-\n"
        break
    else:  # 최대 값보다 작을 경우
        if d[-1] == 0:
            answer = "NO"
            break
        d.pop()
        answer += "-\n"

if answer == "NO":
    break

print(answer)

참고로 이 코드 더럽게 느리다.

코드2
```python
import sys
from collections import deque

n = int(sys.stdin.readline())
tmp = 0
d = deque()
d.append(0)
answer = ""

for _ in range(n):
    num = int(sys.stdin.readline())

    while True:
        if d[-1] < num:
            if tmp < num:
                tmp += 1
                d.append(tmp)
                answer += "+\n"
            else:
                answer = "NO"
                break
        elif d[-1] == num:
            d.pop()
            answer += "-\n"
            break
        else:  # 최대 값보다 작을 경우
            if d[-1] == 0:
                answer = "NO"
                break
            d.pop()
            answer += "-\n"

    if answer == "NO":
        break
print(answer)

1번 코드는 그때그때 str 변수에 데이터를 추가했고, 2번 코드는 일단 list로 추가해서 마지막에 str값을 만들어준다.

'코테' 카테고리의 다른 글

리트코드 27.Remove Element JAVA  (0) 2023.08.24
리트코드 88. Merge Sorted Array JAVA  (0) 2023.08.23
boj 9012  (0) 2023.06.21
Entity와 DTO  (0) 2023.06.20
백준 1463  (0) 2023.05.09