-
프로그래머스 큰 수 만들기(Lv2)알고리즘 2020. 8. 6. 18:59
200728 기상 : 5시 40분
200729 : 아직 안 잠(2시)
이 문제 언제 했지 저번 달에 했나 7월 초에 했나?
문제 설명
어떤 숫자에서 k 개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다. 예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24]를 만들 수 있습니다. 이 중 가장 큰 숫자는 94입니다.
문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요.
제한 조건
number는 1자리 이상, 1,000,000자리 이하인 숫자입니다.
k는 1 이상 number의 자릿수 미만인 자연수입니다.
입출력 예
number
k
return
1924
2
94
1231234
3
3234
4177252841
4
775841
⛏ 첫 번째
첫 번째 (16.7점) 시간 초과..
모든 경우의 수를 생각해서 틀림. ( 순서를 생각해야 함)
import itertools # 라이브러리 가져오기 def solution(number, k): answer = '' # k를 뺀 글자 수에 해당하는 모든 경우의 수 다 가져옴 tmp =list(map(''.join,itertools.permutations(number,len(number)-k))) answer =max(tmp)# 가장 큰값 return answer# 정답
⛏ 두 번째
(_순서 생각 못 했음 순서 지키기 )
9점 나옴.ㅎ 예제는 다 맞음, 테스트 중 2개는 시간 초과
661일 경우 계속 돌아감
def solution(number, k): number=list(number) #list로 만들어서 비교할라고 i=0 # k 가 소진될 때까지 while k>0: # 앞에 있는 숫자보다 클 경우 if number[i]<number[i+1]: # 앞에 삭제 number.pop(i) # 삭제했으니까 k도 -1 k-=1 else : # 작을경우, i그냥 넘기기 i+=1 # 다 돌았을 경우, k없어질때까지 계속 돌기 if len(number)-1==i: i=0 # 남은거 join 해주기 return ''.join(number)
⛏ 다른 사람 풀이
def solution(number, k): answer = '' for i in number: # answer 에 맨 뒤에 값과 비교 i가 더 클 경우, while len(answer) > 0 and int(answer[-1]) < int(i) and k > 0: k -= 1 # 값제거 answer = answer[:-1]# -1은 맨 뒤에값 맨뒤에 값 포함 안함 answer += i # 값 추가 일단 한번씩은 다 들어감. 근데 while에서 걸러짐. # 다 돌아도 남아있을 경우, # 값이 중복이 있는 경우 이 조건문에 들어감. # 661 if k > 0: answer = answer[:-k]# 남아있는 K 값 만큼 뒤에 값 빼기. return answer
느낀 점
요즘 한없이 우울하다
난 왜 이렇게 못할까
위에 언제 썼지 아냐 할 수 있다 다시 해야지
'알고리즘' 카테고리의 다른 글
프로그래머스 카펫(Lv 2) (0) 2020.08.06 🤦♂️프로그래머스 이중 우선순위 큐(LV 3)🤦♂️ (0) 2020.08.06 백준 바이러스(BFS, DFS) (0) 2020.08.06 프로그래머스 소수 찾기(LV2) (0) 2020.08.06 프로그래머스 [1차] 비밀지도(Python) (0) 2020.08.06