반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

짧은코딩

1874 스택 수열 본문

코딩 테스트(Python)/백준, 프로그래머스

1874 스택 수열

5_hyun 2022. 2. 25. 00:52
반응형

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
Comments