[PG] 큰 수 만들기

nerry·2022년 4월 29일
0

알고리즘

목록 보기
79/86

그리디
문제

me

python

def solution(number, k):
    answer = ''
    result_len = len(number)-k
    pivot = 0
    while(result_len>0): # 선택하기
        until = len(number)-result_len+1 # k+1까지란 소리..
        if len(number)-pivot == result_len : # 남은 배열의 수가 선택할 수 있는 수만큼 남았다면
            answer+=number[pivot:]
            break
        current_max='0'
        for n in range(pivot,until): # 시작부터 선택할 수 있는 수 내로
            if current_max < number[n]:  # 가장 큰 수 찾기
                current_max=number[n]
                pivot = n
                if number[n]=='9': break
        #current_max = max(number[pivot:until]) #max 직접 구현하기
        answer+=current_max
        pivot +=1 #number[pivot:until].find(current_max)+pivot+1 # 찾은 가장 큰 수 다음부터 다시 찾기
        ## 범위 내로 선택할 수 있는 가장 큰 수를 선택하는 것
        result_len-=1
    return answer

JavaScript

function solution(number, k) {
  let list = number.split('').map(e=>parseInt(e))
  stack=[]
  list.forEach(element => {
    while(stack && stack[stack.length-1] < element && k >0){
      // 삭제 권한이 아직있고, 스택의 top이 지금 나온 수보다 작으면 pop 앞에는 이 수보다 크면 안됨! 뒤로갈수록 수가 작아지니깐
      k-=1
      stack.pop()
    }
    stack.push(element)
  });
  if( k!=0){
    stack= stack.slice(0,stack.length-k)
  }
  return stack.join('')
}
profile
터벅터벅 개발(은좋은)자 로그

0개의 댓글

관련 채용 정보