본문 바로가기
Python

[백준] 1874번 : 스택 수열

by Leunco 2021. 12. 8.

 

1. 내가 푼 풀이(틀림)

  • 결론적으로 올바른 결과를 구하지 못했다.
  • 리스트 전체를 입력받아서 이를 처리하는 게 까다로웠던 것 같고, 핵심 포인트를 잘못 잡았다. (밑에 핵심 포인트 2번을 놓친 듯하다)
더보기
# 내 풀이(틀림)
n = int(input())
print(n)

list1 = []
for i in range(n):
    list1.append(int(input()))

list2 = []
num = 1
i = 0
while(i < n):
    print('i : ', i)
    print('num : ', num)
    print('list1[i] : ', list1[i])

    if num == list1[i]:
        print('+')
        print('-')
        list2.append('+')
        list2.append('-')
        i = i+1
        num = num-1
        continue

    elif num < list1[i]:
        print('+')
        list2.append('+')
        num = num + 1

    elif num > list1[i]:
        print('-')
        list2.append('-')
        num = num-1

    else:
        print('No')
        break

if i == n:
   print(list2)

 

2. 해설

** 핵심 포인트 **
1. 스택에 원소를 삽입할 때 단순히 특정 수에 도달할 때까지 삽입하면 됨
2. 스택에서 원소를 연달아 빼낼 때 내림차순을 유지할 수 있는지 확인
  • 입력을 하나씩 받아서 push나 pop연산을 쉽게 할 수 있는 것 같다.
  • join()을 이용
    - '구분자'.join(리스트)
    : 리스트의 값과 값 사이에 '구분자'를 넣어 하나의 문자열로 합칠 수 있다.

    출처: https://blockdmask.tistory.com/468 [개발자 지망생]
n = int(input())

count = 1
stack = []
result = []

for i in range(1,n+1):
    data = int(input())
    while count <= data:
        stack.append(count)
        count += 1
        result.append('+')
    if stack[-1] == data: # 스택의 최상위 원소가 데이터와 같을 때 출력
        stack.pop()
        result.append('-')
    else:
        print('No')
        exit(0)

print('\n'.join(result))

 

3. 해설 수정

  • 위의 코드를 제출하니 틀렸다는 결과가 나왔다.
  • 구글링을 통해 대부분 사람들이 No 출력부분에서 어떤 임의의 변수(여기서는 temp)를 이용하는 것을 알았다.
  • 그런데 왜 위의 코드는 안 되는지 모르겠다...
count = 1
stack = []
result = []
temp = True

n = int(input())

for i in range(1,n+1):
    data = int(input())
    while count <= data:
        stack.append(count)
        count += 1
        result.append('+')
    if stack[-1] == data: # 스택의 최상위 원소가 데이터와 같을 때 출력
        stack.pop()
        result.append('-')
    else:
        temp = False
        break

if temp == False:
    print("NO")
else:
    print('\n'.join(result))

 

 

출처 : 패스트캠퍼스 - 알고리즘 / 기술면접 완전 정복 올인원 패키지 Online

 

반응형

'Python' 카테고리의 다른 글

[알고리즘] 탐욕(그리디) 알고리즘  (0) 2021.12.09
[자료구조] 큐(Queue) 정리  (0) 2021.12.09
[백준] 2798번 : 블랙잭  (0) 2021.12.06
[백준] 2920번: 음계  (0) 2021.12.06
[Tensorflow] 텐서플로우 버전 확인 + 설치  (0) 2021.10.24

댓글