욤미의 개발일지

[Programmers] 큰 수 만들기 (Python) 본문

Coding Test/프로그래머스

[Programmers] 큰 수 만들기 (Python)

욤미 2023. 4. 21. 20:09
728x90
반응형
 

프로그래머스

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

programmers.co.kr

문제

  • 어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다.
  • 예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다.
  • 문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요.

구현

  • Greedy로 분류되는 문제이고 코테에서 비슷한 문제로 출제된적이 있다고 해서 풀어보게 되었다.
  • max나 index등을 이용할 필요가 없고 최대 number의 길이만큼만 stack에 삽입 삭제하기 때문에 짧은 시간에 답을 얻을 수 있다.
# 어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 수를 구한다.
num = []
max_num = 0
def solution(number, k):
    stack = [number[0]]
    # 현재의 값을 저장한 뒤 다음에 나오는 값이 현재 값보다 크면 교체하고 작다면 이어 붙이는 방법
    for i in number[1:]:
    	# 현재 값 i가 stack에 저장된 값들보다 크면
        # stack의 값은 빼주고 제거해야하는 숫자 개수 k를 1씩빼준다.
        while len(stack) > 0 and stack[-1] < i and k > 0:
            stack.pop()
            k -= 1 
        stack.append(i)
    for i in range(k): : # 전부 이어붙인 상태에서 제거해야하는 숫자 개수가 남았다면 제거해줌
        stack.pop()
    
    answer = "".join(stack)
    return answer
728x90
반응형

'Coding Test > 프로그래머스' 카테고리의 다른 글

[Programmers] 단속카메라 (Python)  (0) 2023.04.21
[Programmers] 문자열 압축 (Python)  (0) 2023.04.21
Comments