[백준] 오큰수 17298번 파이썬 Python 자료구조

Jeony·2021년 11월 10일
0

백준

목록 보기
11/25
post-thumbnail

📌생각해보기

예제 입력:
4
3 5 2 7

  1. 3의 경우, 오큰수 5를 찾을 수 있다.
  2. 5의 경우, 오큰수를 찾지 못했다.
    2-1. 이때 5를 stack에 넣어보자.
  3. 2의 경우, 오큰수 7을 찾을 수 있다.
    3-1. 이때 오큰수 7과 stack에 들어있는 5를 비교해보자.
    3-2. 5의 경우, 오큰수 7을 찾을 수 있게 된다.

📌내가 작성한 코드

num_count = int(input())
nums = list(map(int, input().split()))

stack = []
answer = [-1] * num_count

for i in range(num_count):
    while stack and nums[stack[-1]] < nums[i]:
        answer[stack.pop()] = nums[i]
    stack.append(i)
  
print(*answer)

📌풀이

  1. 크기가 4개인 수열을 주었으므로 4회 반복한다.
  1. 3의 경우, 오큰수 5를 찾을 수 있다.
  2. 5의 경우, 오큰수를 찾지 못했다.
    2-1. 이때 5를 stack에 넣어보자.
  3. 2의 경우, 오큰수 7을 찾을 수 있다.
    3-1. 이때 오큰수 7과 stack에 들어있는 5를 비교해보자.
    3-2. 5의 경우, 오큰수 7을 찾을 수 있게 된다.
  1. 위의 내용처럼 stack에 있는 것과 비교해서 오큰수를 찾을 수 있게 해야하기 때문에 반복문을 써준다.
    반복문: while
    조건:
    1. stack에 값이 있을 때
    2. nums 리스트에서 stack의 제일 위에 있는 원소번째의 수가 nums[i]보다 작을 때

  2. stack의 제일 위에 있는 원소는 비교 했으니 stack 제일 위에 있는 원소를 없애고(pop) nums 리스트에서 stack의 pop한 원소번째에 nums[i] 넣기.

profile
알고리즘으로 문제를 해결하다가 포기함

0개의 댓글