본문 바로가기

코딩테스트/Python

[Python] 백준 #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())
s = []
op = []
count = 1
temp = True
for i in range(n):
    num = int(input())
    while count <= num:
        s.append(count)
        op.append('+')
        count += 1
    if s[-1] == num:
        s.pop()
        op.append('-')
    else:
        temp = False
if temp == False:
    print('NO')
else:
    for i in op:
        print(i)

1부터 n까지의 수를 스택에 넣고 빼면서 하나의 수열을 만들어야한다.

 

  1. count는 n까지의 수, s는 넣고 뺄 스택, op는 +와 -를 넣을 리스트, temp는 가능, 불가능 확인
  2. count가 입력받는 수 보다 작거나 같을때까지 s에 더해주고 +를 op에 더해준다. count도 +1해주었다.
  3. 만약 s의 가장 마지막 수가 num과 같으면 s를 pop해주고 op에 -를 더해준다.
  4. 같지 않다면 수열을 만들 수 없기 때문에 temp에 False 넣기
  5. 만약 False면 no출력, 아니면 op 출력

 

 

 

 

내 코드

n=int(input())
arr,s,answer=[],[],[]
for i in range(n):
    x = int(input())
    arr.append(x)
sol=False
i=0
while True:
    if not arr and not s: #1
        sol=True
        break
    if i==n and s and arr[0] != s[-1]: #2
        sol=False
        break
    if s and arr[0] == s[-1]: #3
        arr.pop(0)
        s.pop()
        answer.append("-")
    else: #4
        i+=1
        s.append(i)
        answer.append("+")
print('\n'.join(answer)) if sol else print("NO")

 

  1. 만들어야하는 수열을 입력받아 arr에 저장해주었다. 이 수열과 같은지 비교해줄것이다.
  2. 반복문을 돌리면서 스택에 넣고 뺄 것이다. 스택은 s라고 하였다.
  3. #1 (break문) : 만약 arr 과 s가 둘다 비었으면 True를 sol에 저장해준다.
  4. #2 (break문) : 만약 i가 n과 같고 s가 비지않았고 arr의 첫번째가 s의 마지막과 다르면 False 저장 
  5. #3 (- if문) : s[-1] 즉, 가장 마지막 수를 구하기 위해서 s가 비어있는지 확인해준다. 그리고 arr의 첫번째가 s의 마지막과 같으면 arr[0]을 pop하고 s[-1]도 pop 해준다. 그리고 answer 리스트에 -를 더해준다.
  6. #4 (+ if문) 위의 #3의 경우가 아니면 +를 추가해준다.
  7. sol의 결과에 따라서 출력

 

 

느낀점


이 문제는 일단 이해하는데 좀 걸렸다.. 문제읽고 응? 이라는 생각이 들었음., 그렇게 푼 코드도 바보같이 나왔다 ㅠ 다른사람꺼보니까 더 바보같음!!!!! 담엔 더 열심히 생각해보자..

 

'코딩테스트 > Python' 카테고리의 다른 글

[Python] 백준 #2164 - 카드2  (1) 2021.12.07
[Python] 백준 #18258 - 큐 2  (1) 2021.12.07
[Python] 백준 #4949 - 균형잡힌 세상  (0) 2021.12.03
[Python] 백준 #9012 - 괄호  (0) 2021.12.02
[Python] 백준 #10773- 제로  (0) 2021.12.01