본문 바로가기
프로그래머스/Python

[프로그래머스] 큰 수 만들기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 10. 24.
728x90
반응형

 

 

프로그래머스

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

programmers.co.kr

 

1. 문제 설명

2. 풀이과정

해당 문제는 숫자 문자열에서 특정 숫자를 제거했을 때 가장 큰 수를 만드는 문제이다.

숫자의 위치를 바꿀 수는 없으므로 앞 숫자가 커야 한다.

최종 큰 수를 저장할 리스트를 만들고 숫자 문자열에서 숫자를 하나씩 불러오며 이전에 있는 값보다 크면 바로 이전 값을 제거하고 새로 불러온 숫자를 추가한다.

이때 제거할 문자가 더 이상 없거나 리스트의 원소 개수가 최종 출력할 자리 수와 동일하면 종료한다.

 

  1. 최종 큰 숫자를 저장할 리스트를 생성한다. stack = list()
  2. 입력받은 숫자를 하나씩 불러오며 for i in number
  3. 만약 리스트가 비어있다면 if (not stack)
  4. 불러온 숫자를 리스트에 추가한다. stack.append(i)
  5. 반면에 리스트가 비어있지 않다면 else
  6. 리스트의 마지막 원소 값이 불러온 숫자보다 작거나 제거해야 할 숫자가 남아있으면 while (stack[-1] < i) and (k > 0)
  7. 리스트의 마지막 원소를 제거하고 stack.pop()
  8. 숫자를 하나 제거했으므로 제거할 숫자의 개수를 줄인다. k -= 1
  9. 만약 제거한 뒤 리스트가 비어있거나 제거할 숫자가 더 이상 없으면 if (not stack) or (k <= 0)
  10. 반복을 종료한다. break
  11. 제거하는 반복이 종료되면 불러온 숫자를 추가한다. stack.append(i)
  12. 만약 리스트의 원소 개수가 출력할 숫자의 자리 수와 동일하면 if (len(stack) == len(number) - k)
  13. 종료한다. break
  14. 리스트에 최종적으로 저장된 숫자를 하나의 문자열로 이어 저장한다. answer = ''.join(stack)
반응형

3. 소스코드

def solution(number, k):
    answer = ''
    
    stack = list()

    for i in number:
        if (not stack):
            stack.append(i)
        else:
            while (stack[-1] < i) and (k > 0):
                stack.pop()
                k -= 1
                if (not stack) or (k <= 0):
                    break

            stack.append(i)
            if (len(stack) == len(number) - k):
                break

    answer = ''.join(stack)
    return answer
728x90
반응형