Better Code, Better Life

큰 수 만들기 - 프로그래머스 - 파이썬 풀이 본문

Coding Test/Programmers

큰 수 만들기 - 프로그래머스 - 파이썬 풀이

심재훈 2019. 10. 13. 19:00

문제 풀이

  1. 주어진 number 에서 순차적으로 각 숫자가 넣을만한 숫자인지 비교해봅니다.

    1. 앞으로 넣어야 할 숫자가 스택에 있는 마지막 숫자보다 크다면 마지막 숫자를 pop 해줍니다.
    2. 이 때 k(제거해야 할 숫자의 수)가 0보다 커야 합니다.
    3. 또한 스택이 비어있다면 넘어갑니다.
    4. 이 로직을 pop_until_condition 에 구현합니다.
  2. 1번에서 넣을만한 숫자는 다 candidates에 넣었습니다. 이제 k가 0이 될 때까지 숫자를 제거해주어야 합니다.

    pop_until_zero

  3. candidates 안의 숫자들을 하나의 문자열로 합치면 정답을 구할 수 있습니다.

클린 코드 작성법

  1. stack 과 같은 자료구조를 명시하는 변수명 대신 candidates 처럼 구체적으로 변수가 의미하는 바가 드러나게 변수명을 짓습니다.
  2. number_str 처럼 변수가 특이한 경우 자료형을 변수명 뒤에 붙여줍니다.
  3. 최대한 for문 중첩을 줄이기 위해 함수를 이용합니다.
  4. 함수명을 통해 주석을 대신합니다.

해답 코드

def solution(numbers, k):
    candidates = []
    for number_str in numbers:
        candidates, k = pop_until_condition(candidates, k, number_str)
        candidates.append(number_str)
    candidates = pop_until_zero(candidates, k)
    answer = "".join(candidates)
    return answer

def pop_until_condition(candidates, k, number_str):
    while True:
        if k <= 0 or is_not_bigger_than_last(candidates, number_str):
            break
        else:
            k -= 1
            candidates.pop()
    return candidates, k

def is_not_bigger_than_last(candidates, number_str):
    is_not_bigger = False
    if not candidates:
        is_not_bigger = True
    elif number_str <= candidates[-1] :
        is_not_bigger = True
    return is_not_bigger

def pop_until_zero(candidates, k):
    while k != 0:
        k -= 1
        candidates.pop()
    return candidates

 

도움이 됐다면 공감버튼을 눌러주세요! 질문이 있다면 댓글 달아주세요!

 

문제 링크

 

코딩테스트 연습 - 큰 수 만들기 | 프로그래머스

 

programmers.co.kr

 

Comments