Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- c3 second
- grafana dashboard
- c++ 정규식
- python popen
- 1697
- CentOS7
- regex_search
- c3 축 없애기
- snmp
- telegraf
- 정규식 문자열 출력
- influxdb 설치
- snmp test
- c3 step graph
- python os
- python subprocess
- c3 축 가리기
- 정규식 활용
- gcc 업데이트
- subporcess path
- c3 초
- linux시간으로 변경
- selinux port 등록
- gcc regex
- 정규식 컴파일
- g++ 업데이트
- InfluxDB
- 백준
- centos pyhon 설치
- semanage
Archives
- Today
- Total
리셋 되지 말자
[백준 1874] 스택 수열 - 스택 본문
코드
def solution(arr):
# stack에 차례대로 넣을 수 배열
nums = [i for i in range(1, len(arr)+1)]
# nums의 index
nums_idx = 0
stack = []
# push, pop 연산 순서 저장
cals = []
# flag가 True이면 NO 출력
flag = False
# pop을 해야하는 타겟 숫자를 차례대로 순회
for target in arr:
while True:
# stack이 비어있거나, stack의 맨 위가 target과 다르면 nums를 append
if len(stack) == 0 or stack[-1] != target:
# target을 pop할 수 없으면, flag를 True로 변경한 뒤 break로 반복문 탈출
if nums_idx == len(arr):
flag = True
break
stack.append(nums[nums_idx])
# append 연산인 +를 추가
cals.append('+')
# append를 했으니 추가할 수 있는 숫자에 대한 index를 1 증가
nums_idx += 1
# stack이 비어있지 않고, stack의 맨 위에 있는 수자와 target이 같으면 pop
elif len(stack) >= 1 and stack[-1] == target:
stack.pop()
# pop 연산인 -를 추가
cals.append('-')
break
# flag가 True이면 수열을 완성할 수 없으므로 NO 출력
if flag:
print('NO')
# flag가 False이면 수열을 완성할 수 있으므로 cals에 저장된 연산을 차례대로 출력
else:
for cal in cals:
print(cal)
n = int(input())
arr = []
for _ in range(n):
arr.append(int(input()))
solution(arr)
'알고리즘' 카테고리의 다른 글
Tip (0) | 2022.02.27 |
---|---|
[백준 18111] 마인크래프트 - 브루트포스 (0) | 2022.01.20 |
[백준 1966] 프린터 큐 - 큐 (0) | 2022.01.18 |
[백준 4949] 균형잡힌 세상 - 스택 (0) | 2022.01.18 |
[백준 1080] 체스판 다시 칠하기 - 브루트포스 (0) | 2022.01.18 |
Comments