[프로그래머스] 큰 수 만들기 _ 파이썬

메링·2021년 6월 23일
0

알고리즘 문제

목록 보기
11/22

문제 : https://programmers.co.kr/learn/courses/30/lessons/42883

사용한 방법
1. 최소한 첫번째 자리는 number 문자열에서 k번째에서 시작해야 함 -> 그래야 len-k 자리의 숫자 만들기 가능
2. 뒤이어 다음 자리 숫자들은 최소한 k+1, k+2 ... 번째 안에서 결정해야 함
3. 이렇게 최소한 이 안에 결정되야 한다 하는 자리수를 limit에 저장.
4. i가 limit이 될 때마다 answer에 숫자 업데이트 하고 max 초기화. limit은 +=1 해주기. i는 현재 자리수에서 채택된 최댓값의 idx 다음 것부터 탐색하도록 한다.

1차 시도에서는 테스트케이스 8, 10에서 시간초과
예외처리를 안해줘서 시간초과 남.
시간 초과를 줄이는 중요 포인트: 예외처리 해주기

  • 숫자가 9일 때는 굳이 더 확인 안 해도 그 자리는 무조건 9
    -> 9이면 무조건 answer에 업데이트
  • 처음에 list로 int형태로 안 바꿔주고 문자열 그대로 하면 더 빠를텐데 그렇게 바꾸니까 런타임에러.. 다시 도전해봐야 함.
def solution(number, k):
    answer = ''
    lst = [int(n) for n in number]
    max_num = 0
    max_idx = 0
    i = 0
    limit = k
    
    while len(answer) != len(number)-k:
        if lst[i] > max_num:
            max_num = lst[i]
            max_idx = i
            
        if i == limit or max_num == 9:
            answer += str(max_num)
            i = max_idx + 1
            max_num = 0
            limit += 1
        else:
            i += 1
            
    return answer
profile
https://github.com/HeaRinKim

0개의 댓글