- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/42883
Lv2 문제고, 드디어 (3번째 풀이만에) 스스로 풂!
풀이 로직
순차적으로 진행하면서 만나는 숫자 중 들어온 것보다 큰 경우가 있을 때만 answer에 넣어주면 된다
number의 가장 왼쪽에서 오른쪽으로 진행하면서 3가지 조건을 만족할 때 숫자를 제거한다
- 제거할 횟수가 남아있을 때 (K > 0)
- 제거할 숫자가 있을 때 (answer)
- answer 가장 끝 숫자가 새로 들어올 숫자보다 작을 때 (answer[-1] < number[i])
위 경우에 숫자들을 제거하고, 아닌 경우는 answer에 추가해준다
number의 길이에서 k번을 제거했으니 answer에서 n - k 만큼의 길이만큼 인덱싱해서 반환해주면된다
(어차피 k번 제거해서 길이가 n - k이겠지만, 43344 k = 3인 경우에 answer = [4, 4, 4] 가 나온다. 이때 답은 44가 나와야하므로 n - k를 해준다)
- 정답 풀이 :
def solution(number, k):
answer = []
n = len(number)
K = k
for i in range(len(number)):
while K > 0 and answer and answer[-1] < number[i]:
K -= 1
answer.pop()
answer.append(number[i])
return ''.join(answer)[:n - k]
'프로그래머스 > Level 2' 카테고리의 다른 글
[연습문제 / 프로그래머스] 132265번 : 롤케이크 자르기 (0) | 2022.10.25 |
---|---|
[완전 탐색 / 프로그래머스] 86971번 : 전력망을 둘로 나누기 (0) | 2022.10.22 |
[스택, 큐 / 프로그래머스] 42583번 : 다리를 지나는 트럭 (0) | 2022.10.05 |
[완전탐색 / 프로그래머스] 42839번 : 소수찾기 (0) | 2022.10.05 |
[정렬 / 프로그래머스] 42746번 : 가장 큰 수 (1) | 2022.10.04 |