Hippo's data
[프로그래머스] 큰 수 만들기 Python 풀이 본문
728x90
프로그래머스(Programmers) 큰 수 만들기 문제
난이도 : Level 2
<문제 링크>
https://school.programmers.co.kr/learn/courses/30/lessons/42883
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
2가지 접근방식이 있다
1. 가능한 모든 조합을 구현 후 최대값(max)을 찾기
2. 각 숫자를 순회하면서 가장 큰수를 선택하기 -> greedy 방법
1. 가능한 모든 조합을 구현 후 최대값(max)을 찾기
-> 제한조건에 number가 1,000,000자리 까지 수가 올 수 있으므로 조합을 다 찾는 것은 매우 비효율적
from itertools import combinations
def solution(number, k):
# 모든 가능한 조합 생성
comb = list(combinations(number, len(number) - k))
dap = []
for i in comb:
dap.append(int(''.join(list(i))))
# max최대값 찾아주기
answer = str(max(dap))
return answer
-> 역시 시간초과 발생
2. 각 숫자를 순회하면서 가장 큰수를 선택하기 -> greedy 방법
# 제일 큰수값을 저장할 빈틀 만들어서 number 값을 하나씩 비교하면서 넣음
# 빈틀에는 비교하는 number 값보다 크거나 같은 값이 들어가도록 하기
def solution(number, k):
# 빈 틀 만들기
lst = []
# enumerate 함수 이용 -> 인덱스 번호와 값 불러옴
for i, num in enumerate(number):
# 빈틀에 값이 있고(없으면 마지막 값 비교못함), 빈틀 마지막 값이 number값보다 작고, 남은 제거할 횟수(k)가 존재할때 반복
while len(lst) > 0 and lst[-1] < num and k >0:
lst.pop()
k -=1
# 남은 제거할 횟수(k) 없을때 멈춤
if k == 0:
lst += list(number[i:])
break
lst.append(num)
# 제거할 횟수(k)가 남았지만 이미 큰수값이 다 들어가 있는 경우
if k > 0:
lst = lst[:-k]
answer = ''.join(lst)
return answer
728x90
'Algorithm > 프로그래머스(programmers)' 카테고리의 다른 글
[프로그래머스] K번째수 Python 풀이 (0) | 2024.01.23 |
---|---|
[프로그래머스] 컨트롤 제트 Python 풀이 (0) | 2024.01.23 |
[프로그래머스] 체육복 Python 풀이 (0) | 2024.01.21 |
[프로그래머스] 피보나치 수 Python 풀이 (0) | 2024.01.20 |
[프로그래머스] 가장 큰 수 Python 풀이 (0) | 2024.01.20 |