코딩 테스트/프로그래머스

Lv2. 큰 수 만들기

  • -
728x90
반응형

문제 보기 :  큰 수 만들기

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제

  • 정답률 : 53%


작성 코드

from collections import deque
def solution(number, k):
    answer_leng = len(number)-k
    
    number = list(number)
    j = number.index(max(number[:k]))
    k -= j
    number = number[j:]
    
    number = deque(number)
    p = number.popleft()
    num = p
    while k and number:
        p = number.popleft() 
        for i in range(len(num)):
            if int(num[-1]) < int(p) and k:
                num = num[:-1]
                k -= 1
                if num == '':
                    num += p
            else:
                num += p
                break
    # return num,k,list(number)
    
    ## 지워야하는 갯수가 남았을 때
    if k and len(number)==0: 
        num = num[:answer_leng]
    elif number:
        n = ''.join(number)
        num += n

    return num

풀이

진짜 별거 아닌 문제 같은데 하루종일 풀었다..
deque로 맨 앞 원소부터 popleft로 가져오고, 문자열에 추가하는데 추가할 때 조건을 설정했다.

이미 문자열에 있는 숫자 a(임의)가 4고, p=7이라면, 문자열에 있는 -1번째는 삭제한다.
총 횟수는 문자열 내 원소 수만큼 시행하는데, 만약  a > p가 하나라도 나타나면 바로 p를 문자열에 추가하고 반복문은 멈춘다. 
그리고 만약 num이 빈 문자열이 되었다면 p를 더하고 for문을 종료하도록 한다. (계속 null일 경우 for문이 아예 돌아갈 수 없다) 

k와 number을 조건으로 걸었던 while문 종료 후, 이 두 자료형의 상태에 따라 후작업을 한 뒤 답을 출력했다.
k는 1 이상인데, number은 null일 경우, 포함될 수 있는 숫자 갯수만 앞부터 선택한다.
k가 0이고, number에 원소가 남아있을 경우엔, number에 있는 숫자들은 num에 모두 붙인다.

이렇게 해서, 답을 출력하면 시간초과, 런타임에러, 실패 없이 모두 통과했다

320x100
728x90

'코딩 테스트 > 프로그래머스' 카테고리의 다른 글

Lv2. 두 큐 합 같게 만들기  (0) 2024.10.01
Lv2. 소수 찾기  (0) 2024.10.01
Lv1. 햄버거 만들기  (0) 2024.09.30
Lv2. 2개 이하로 다른 비트  (0) 2024.09.28
Lv1. 숫자 짝꿍  (0) 2024.09.28
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.