728x90
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42883
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
TIL
- 순서가 유지되어야하는 경우, 스택/큐 사용
- 어차피 큰 수를 결정하는 데 가장 앞 숫자가 제일 중요하기 때문에 앞에서부터 없애도 괜찮음
- 숫자를 이용해 큰 수 혹은 작은 수를 만드는 경우, 스택을 사용한 그리디 풀이 외우기
- 앞에서 pop한 작은 수가 뒤에서 다시 push 될 수 없음 (그럼 가장 큰 수가 될 수 없음) > Greedy
Code
def solution(number, k):
answer = [] # 결과로 반환할 숫자들의 리스트 (스택으로 사용)
# 순서가 유지되어야하는 경우, 스택 사용
# 어차피 큰 수를 결정하는 데 가장 앞 숫자가 제일 중요하기 때문에
# 앞에서부터 없애도 괜찮음
for n in number:
while answer and k>0 and answer[-1]<n:
answer.pop()
k -= 1
answer.append(n)
answer = answer[:-k] if k > 0 else answer
return ''.join(answer)
- 주어진 숫자 number를 왼쪽에서 오른쪽으로 스캔하면서, 결과 숫자를 만들기 위해 각 자리의 숫자를 결정한다.
- 숫자를 하나씩 결과 스택에 추가할 때, 스택의 마지막 숫자보다 현재 숫자가 더 크다면, 그리고 아직 k개의 숫자를 제거하지 않았다면, 스택의 마지막 숫자를 제거한다. 이 작업을 스택의 마지막 숫자가 현재 숫자보다 작거나 같아질 때까지, 혹은 k개를 모두 제거할 때까지 반복한다.
- 모든 숫자를 처리한 후, 스택에서 남은 숫자를 결과로 반환한다.
- 만약 k개를 모두 제거하지 않고 숫자를 모두 스캔했다면, 결과 스택의 끝에서 남은 k개의 숫자를 제거한다.
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] PCCP 모의고사 1회 : 운영체제 (우선순위큐) (0) | 2025.05.02 |
---|---|
[프로그래머스] 도넛과 막대 그래프 (2024 카카오 코테) (0) | 2025.03.19 |
[프로그래머스] 도둑질 (DP) (0) | 2025.03.14 |
[프로그래머스] N으로 표현 (DP) (0) | 2025.02.22 |
[프로그래머스] 조이스틱 (Greedy) (0) | 2025.02.21 |