일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 인터섹션
- RTK Query
- recoil
- 무한 스크롤
- Cypress
- autosize
- tailwind
- 호이스팅
- app router
- webpack
- dfs
- 공변성
- map
- useAppDispatch
- CORS
- 태그된 유니온
- ESlint
- SSR
- 결정 알고리즘
- Jest
- 투포인터
- 이분 검색
- 타입 좁히기
- CI/CD
- 리터럴 타입
- async/await
- React
- TS
- Promise
- 반공변성
- Today
- Total
짧은코딩
1874 스택 수열 본문
https://www.acmicpc.net/problem/1874
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
내 풀이(맞음)
n = int(input())
ary = []
for i in range(n):
x = int(input())
ary.append(x)
lst = []
rst = []
i = 0#ary
j = 1#rst
while(True):
if lst and lst[-1] == ary[i]:
rst.append('-')
lst.pop()
i += 1
continue
if j == n+1:
break
lst.append(j)
j += 1
rst.append('+')
test = []
bol = []
l = 1
k = 0
for i in rst:
if i == '+':
test.append(l)
l += 1
else:
t = test.pop()
if t == ary[k]:
bol.append(t)
k += 1
else:
break
if ary == bol:
for i in rst:
print(i)
else:
print('NO')
ary에 만들어야 할 수열을 입력한다. lst는 1부터 넣어가는 리스트이고 rst는 +, -를 넣는 리스트이다. i는 ary, j는 rst의 위치 값을 나타낸다. 그리고 while문에서는 lst가 안비어 있고 마지막 숫자가 ary의 첫번째랑 같으면 rst에 -를 넣고 lst의 끝 값을 삭제하고 ary의 위치 값을 1 올린다. 그리고 j가 n+1이랑 같아지면 더 이상 조건문을 진행하지 않는다. 그리고 lst에 숫자를 넣고 다음 숫자로 바꿔준다. 그리고 rst에 +를 넣어준다.
그 다음에 test는 lst 처럼 넣어가는 리스트이고 bol는 ary와 같은지 확인해주는 리스트이다. for문에서 rst만큼 반복하면서 +이면 test에 l을 더해주고 다음 1을 더해준다. -이면 t에 test의 오른쪽 값을 삭제한 것을 저장하고 만약에 t가 ary[k]번째와 같으면 bol에 더해주고 k에 1을 더해 ary의 위치 값을 옮겨준다. 만약에 ary의 위치값과 다르면 종료한다.
그리고 ary와 bol이 같으면 정싱적으로 rst를 출력하고 아니면 NO를 출력한다.
'코딩 테스트(Python) > 백준, 프로그래머스' 카테고리의 다른 글
9375 패션왕 신해빈 (0) | 2022.03.08 |
---|---|
11286 절대값 힙 (1) | 2022.03.07 |
1764 듣보잡 (0) | 2022.02.23 |
1966 프린터 큐 (0) | 2022.02.23 |
10816 숫자 카드 2 (0) | 2022.02.22 |