- 문제 링크
오큰수
- 풀이 전 계획과 생각
target 숫자를 기준으로 오른쪽으로 1씩 증가시키면서 target 숫자와 대소를 비교하며 target보다 비교한 숫자가 더 클 경우 해당값을 출력하는 경우를 생각했는데 그러면 시간 초과가 발생하여 왼쪽 index부터 stack에 넣어가며 다음 index에 대해 stack의 가장 마지막 원소가 비교하는 index의 값보다 작을 경우 해당 원소에 대한 오큰수가 결정된다. 이를 반복 수행하도록 코드를 작성
- 풀이
def right_big_number(num_array):
output_list = []
stack = []
for count in range(len(num_array)):
output_list.append(-1)
for i in range(len(num_array)):
while len(stack) > 0 and num_array[stack[-1]] < num_array[i]:
output_list[stack.pop()] = num_array[i]
stack.append(i)
return output_list
number_count = int(input())
number_input = list(map(int,input().split(" ")))
output_list=right_big_number(number_input)
for value in output_list:
print(value, end=" ")
- 풀이하면서 막혔던 점과 고민
생각하기 쉬운 방법을 선택하니 시간이 너무 많이 걸린다는 단점이 있었다. 그래서 문제의 구조를 아예 새로 이해해서 stack을 사용해야 한다는 과정을 알게되는데 너무 힘들었음
- 풀이 후 알게된 개념과 소감
stack이 여러 용도로 사용할 수 있음을 알게됨