728x90
https://school.programmers.co.kr/learn/courses/30/lessons/42584
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
릿 코드인가
언제 한번 풀어본 거 같다 이런 문제 그때 알았던 스택
스택을 모르면 일반적으로 시간 복잡도가 n**2라는 비효율적인 결과가 나온다
핵심은 지금 수보다 큰 수가 언제 나오는지이다
하나씩 스택에 쌓다가 제일 마지막 보다 큰 수가 나오면 마지막보다 작아질 때까지 스택에서 마지막 수를 계속 빼준다
어차피 큰 수를 만나면 그보다 작은 건 다 제거되기 때문에 정렬이나 순서는 신경 쓰지 않아도 된다
다만 스택에 인덱스도 같이 넣어서 제거되는 숫자에 인덱스를 확인해 그 인덱스 번호의 값을 바꿔준다
def solution(p):
t=[]
s=list(range(len(p)-1,-1,-1))
for n,i in enumerate(p):
while t and t[-1][0]>i:
s[t.pop()[1]]=n-t[-1][1]
t.append([i,n])
return s
'알고리즘 > 프로그래머스' 카테고리의 다른 글
과제 진행하기 (0) | 2023.04.03 |
---|---|
저자 별 카테고리 별 매출액 집계하기 (0) | 2023.04.02 |
영어 끝말잇기 (0) | 2023.03.31 |
이진 변환 반복하기 (0) | 2023.03.28 |
다단계 칫솔 판매 (0) | 2023.03.27 |
댓글