https://school.programmers.co.kr/learn/courses/30/lessons/68645
나의 풀이
def solution(number, k):
stack = []
for num in number:
while k>0 and stack and stack[-1] < num:
stack.pop()
k -= 1
stack.append(num)
return "".join(stack[:len(stack)-k])
제거하는 수를 제외한 나머지 수의 위치를 변경하지 않고 만들 수 있는 최댓값을 구하는 문제였다.
Stack을 사용해 number 값들을 넣고 while문으로 Stack의 맨 위의 원소보다 number 값이 크면 Stack 원소를 pop함과 동시에 k값을 1 줄여가며 k가 0일 때까지 반복한다.
이렇게 하면 Stack에 남은 원소들로 원하는 답을 구할 수 있지만 332211과 같이 예외가 있을 때 처리할 수 없기 때문에 stack[:len(stack) - k]로 처리하여 예외까지 고려할 수 있다.
'코딩테스트 > programmers (python)' 카테고리의 다른 글
Programmers / 2단계 / 124 나라의 숫자 / python (0) | 2024.04.08 |
---|---|
Programmers / 2단계 / 연속된 부분 수열의 합 / python (0) | 2024.04.06 |
Programmers / 2단계 / 삼각 달팽이 / python (0) | 2024.04.02 |
Programmers / 3단계 / 두 큐 합 같게 만들기 / python / 2022 KAKAO TECH INTERNSHIP (0) | 2024.03.31 |
Programmers / 3단계 / 단속카메라 / python / 탐욕법(Greedy) (0) | 2024.03.29 |