코딩테스트/그리디
뒤에 있는 큰 수 찾기
수타.
2023. 9. 12. 21:32
https://school.programmers.co.kr/learn/courses/30/lessons/154539
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 요약:
배열이 주어졌을 때, 자신보다 뒤에 있는 숫자 중에서 자신보다 크면서 가장 가까이 있는 수를 구하여라.
소요시간:
@
난이도:
난이도2
시도횟수:
@
다른사람코딩:
def solution(numbers):
stack = []
result = [-1] * len(numbers)
for i in range(len(numbers)):
while stack and numbers[stack[-1]] < numbers[i]:
result[stack.pop()] = numbers[i]
stack.append(i)
return result
여러 시도들을 해보았지만 풀지 못했고, 다른 사람이 쓴 코드를 참고했습니다.
빈 배열을 선언 후, 만약 새로운 숫자가 기존에 숫자보다 작은 경우 커야 우리가 찾는 뒤에 있는 큰 수 이기 때문에, 계속 빈 배열에 append시켜줍니다. 하지만 만약 가장 최근에 저장한숫자보다 커진 경우 우리가 찾는 뒤에 있는 큰 수 이기 때문에, 배열을 pop시켜서 뒤에있는 큰수 보다 작은 숫자들은 전부 방금 찾은 수를 큰수라고 하고, 할 수 있을 만큼 한 뒤, 그 수 역시 배열에 다시 append시켜줍니다. 이렇게 끝까지 가면 결국 배열엔 자기 뒤로부턴 자신보다 큰수가 없는 수들의 모임이 되고(자연스럽게 내림차순임) 이 숫자들의 위치엔 할당을 따로 하지 않았기 떄문에, 처음에 선언한 -1이 들어가게 됩니다.