일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 디지털 포렌식 트랙
- codeengn basic rce 01
- BoB 12기
- 사회적 사실
- CodeEngn
- malware
- 리버싱
- BoB 12기 최종합격 후기
- CodeEngn Basic 5
- 코드엔진 basic 5
- 철학
- 자살론
- 사회분업론
- Best of the Best
- bob
- h4ckinggame
- 코드엔진 베이직
- 코드엔진
- 논문리뷰
- CodeEngn Basic 01
- 에밀 뒤르켐
Archives
- Today
- Total
SEO
[프로그래머스/파이썬] 큰 수 만들기 본문
반응형
문제 설명
어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다.
예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다.
문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요.
제한 조건
- number는 2자리 이상, 1,000,000자리 이하인 숫자입니다.
- k는 1 이상 number의 자릿수 미만인 자연수입니다.
입출력 예
number | k | return |
"1924" | 2 | "94" |
"1231234" | 3 | "3234" |
"4177252841" | 4 | "775841" |
문제의 숨겨진(?) 요구사항은 숫자의 순서를 유지하면서 K개의 숫자를 제거했을 때 얻을 수 있는 가장 큰 수를 구해야합니다.
뒤에 오는 숫자가 앞에 오는 숫자보다 클 경우에 앞에 오는 숫자를 제거하면 순서를 지키며 가장 큰 수를 만들 수 있습니다.
def solution(number, k):
stack = []
for num in number:
while stack and k > 0 and stack[-1] < num:
stack.pop()
k -= 1
stack.append(num)
return ''.join(stack[:len(stack) - k])
현재 while 문의 조건은 k가 0보다 크다면 조건이 포함되어있는데, 987654와 같이 숫자가 내림차순인 경우, while문 안에 존재하는 코드들이 실행되지 않으면서 k개의 숫자를 제거하지 못하게됩니다.
따라서 마지막에 가장 작은 k개의 숫자를 뒤에서부터 제거해줌으로써 가장 큰 수를 만들 수 있습니다.
반응형
'코딩테스트 > 문제 풀이' 카테고리의 다른 글
[프로그래머스/파이썬] 구명보트 (0) | 2025.02.15 |
---|---|
[프로그래머스/파이썬] 흉부외과 또는 일반외과 의사 목록 출력하기 (0) | 2025.02.11 |
[프로그래머스/파이썬] 3월에 태어난 여성 회원 목록 출력하기 (0) | 2025.02.11 |
[프로그래머스/파이썬] 평균 일일 대여 요금 구하기 (1) | 2025.02.11 |
[프로그래머스/파이썬] 조이스틱 (0) | 2025.02.11 |