Coding Test/Programmers
큰 수 만들기 - 프로그래머스 - 파이썬 풀이
심재훈
2019. 10. 13. 19:00
문제 풀이
-
주어진 number 에서 순차적으로 각 숫자가 넣을만한 숫자인지 비교해봅니다.
- 앞으로 넣어야 할 숫자가 스택에 있는 마지막 숫자보다 크다면 마지막 숫자를 pop 해줍니다.
- 이 때 k(제거해야 할 숫자의 수)가 0보다 커야 합니다.
- 또한 스택이 비어있다면 넘어갑니다.
- 이 로직을 pop_until_condition 에 구현합니다.
-
1번에서 넣을만한 숫자는 다 candidates에 넣었습니다. 이제 k가 0이 될 때까지 숫자를 제거해주어야 합니다.
pop_until_zero
-
candidates 안의 숫자들을 하나의 문자열로 합치면 정답을 구할 수 있습니다.
클린 코드 작성법
- stack 과 같은 자료구조를 명시하는 변수명 대신 candidates 처럼 구체적으로 변수가 의미하는 바가 드러나게 변수명을 짓습니다.
- number_str 처럼 변수가 특이한 경우 자료형을 변수명 뒤에 붙여줍니다.
- 최대한 for문 중첩을 줄이기 위해 함수를 이용합니다.
- 함수명을 통해 주석을 대신합니다.
해답 코드
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