큰 수 만들기 lv2
🌈문제 링크
입출력 예
를 보니 number에서 숫자를 k번 만큼 차감하여 제일 큰 수로 반환하네, 물론 자리 배치는 고정
1
2
3
4
5
6
7
8
9
10
11
def solution(number, k):
storage = [] # Stack
for num in number:
while k > 0 and storage and storage[-1] < num:
storage.pop()
k -= 1
storage.append(num)
return ''.join(storage[:len(storage) - k])
# 괄호 안에 든 것을 문자열로 결합
헷갈리지 말자!!
1
2
3
len(storage) == 6
:len(storage) == [1, 2, 3, 4, 5, 6]
def solution(number, k):
storage = []
solution 함수 내에 스택으로 사용할 빈 리스트 초기화
1
2
`for num in number:`
`while k > 0 and storage and storage[-1] < num:`
- num이 주어진 number 안에서 순회한다, 이 3가지 조건이 맞을 동안만
k>0
–> 아직 제거할 횟수(k)가 남았는지 확인
and storage
–> 그리고 storage라는 스택이 비어 있지 않고
and storage[-1] < num
–> 현재 순회중인 num이 스택의 마지막 숫자보다 클 때
1
2
3
`storage.pop()
k -= 1
storage.append(num)`
- 위의 while의 3가지 조건에 동시에 부합한다면 storage라는 스택의 마지막 숫자 제거
- 그리고 제거할 횟수(k)를 1개 차감하고 그 숫자를 스택에 추가한다.
return ''.join(list[:len(list) - k])
1
2
3
4
5
6
7
2개로 나누어보자
---> list[:len(list) - k]
- 리스트 길이의 처음부터 계산해 k를 뺀것
‘’.join(?)
- 선택된 리스트 요소들을 문자열로 결합
다른 코드
1
2
3
4
5
6
7
8
9
10
11
def solution(number, k):
stack = []
for n in number:
while len(stack)>0 and k>0 and stack[-1]<n:
stack.pop()
k -= 1
stack.append(n)
if k:
return number[:-k] # ex) number[:-4] 뒤에서 4개까지 빼고 숫자 싹다 갖고 오기
else:
return "".join(stack)
또 다른 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def solution(number, k):
storage = []
for i, num in enumerate(number):
while storage and storage[-1] < num and k > 0:
storage.pop()
k -= 1
if k == 0:
storage += list(number[i:])
break
storage.append(num)
storage = storage[:-k] if k > 0 else storage
return ''.join(storage)
storage = storage[:-k] if k > 0 else storage
k가 참이면 storage 스택의 마지막에서 k번까지 제외하고 가져오고
그 외는 스택을 그대로 유지한다.
참고
https://velog.io/@soo5717/프로그래머스-큰-수-만들기-파이썬
https://scarletbreeze.github.io/articles/2019-07/pythonKit문제풀이(4)탐욕법큰수
This post is licensed under CC BY 4.0 by the author.