프로그래머스
[프로그래머스] Lv.2 큰 수 만들기 [Python, 파이썬]
YoonJuHan
2023. 8. 31. 19:17
- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/42883
- Greedy
- Stack
- 현재 위치 값(p)과 이전 값(p-1)을 비교해서 이전 값이 더 작으면 빼준다.
- 제거 횟수(k)가 남아있으면 완성된 스택에서 남아있는 제거 횟수만큼 제일 뒤의 값을 빼준다.
def solution(number, k):
num = list(map(int,number)) # 문자열을 정수 리스트로 변환
stack = [] # 스택 리스트
p = -1 # 스택 포인터(위치)
for i in range(len(num)):
stack.append(num[i]) # 스택에 요소 추가
p += 1 # 스택 위치 증가
if p >= 1: # 스택에 두 개 이상 있을 때
while stack[p] > stack[p-1] and k != 0: # 현재 값보다 바로 이전 값이 작고, 제거 횟수가 있으면
stack.pop(p-1) # 작은 값을 제거
p -= 1 # 스택 위치 감소
k -= 1 # 제거 횟수 감소
if k != 0: # 제거 횟수가 남아있으면 제일 뒤의 숫자를 뺀다.
for i in range(k):
stack.pop()
return "".join(map(str, stack)) # 정수 리스트를 문자열로 변환 후 리턴