수미니그
개발자 X
수미니그
전체 방문자
오늘
어제
  • 전체 (17)
    • Algorithms (13)
      • Concepts (0)
      • 백준 (BOJ) (4)
      • 프로그래머스 (Programmers) (9)
    • SQL (4)
    • 일상 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 스택
  • BFS
  • 정렬
  • Algorithm
  • DP
  • 알고리즘
  • 알고리즘 풀이
  • select
  • 자료구조
  • 해시
  • BOJ
  • group by
  • Dictionary
  • Python
  • sum
  • 소수
  • 구현
  • SQL
  • 집계 함수
  • MIN
  • programmers
  • MAX
  • 백준
  • count
  • n진수
  • 프로그래머스
  • DFS
  • Lambda

최근 댓글

최근 글

@ 수미니그
hELLO · Designed By 정상우.
수미니그

개발자 X

Algorithms/프로그래머스 (Programmers)

[프로그래머스] 큰 수 만들기 (Python)

2022. 3. 29. 18:42
 

코딩테스트 연습 - 큰 수 만들기

 

programmers.co.kr

문제 설명

어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다.

예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다.

문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요.

제한 조건
  • number는 2자리 이상, 1,000,000자리 이하인 숫자입니다.
  • k는 1 이상 number의 자릿수 미만인 자연수입니다.
입출력 예
number k return
"1924" 2 "94"
"1231234" 3 "3234"
"4177252841" 4 "775841"

문제 풀이

프로그래머스 기준 LEVEL 2 난이도의 문제이다. 

처음 문제를 보고 combinations로 가능한 조합 중 제일 큰 걸 찾으려고 했지만 시간 초과로 실패했다. 제한 조건에 number의 크기가 최대 1,000,000자리라고 하니 당연한 결과일 것이다. 

그다음에는 number[i]가 number[i+1]보다 작으면 삭제하는 방식으로 접근했는데... 1924 같은 케이스에서는 문제없지만 당장 4177272841에서는 5가 지워지는 등 문제가 많았다. 

그래서 여러 블로그 포스트에서 참고해가며 스택을 이용하면 쉽게 풀린다는 걸 알아냈다. 

다음은 전체 코드이다:

def solution(number, k):
    stack = [number[0]]
    for num in number[1:]:
        while stack and stack[-1] < num and k > 0:
            stack.pop()
            k -= 1
        stack.append(num)
        
    return "".join(stack) if k == 0 else "".join(stack[:-k])

스택이 비어있지 않고, 스택의 마지막 아이템이 현재 들어오는 숫자보다 작다면 계속해서 지워주는 방법이다. 다만, number = 10000, k = 2 같은 경우는 계속해서 들어오는 0이 stack[-1]와 같기 때문에 아무 숫자도 지워지지 않는다.

따라서 마지막에 k가 0이 아닐 경우를 대비해 stack에서 k만큼 자른 값을 반환하면 된다. 

 

GitHub에서 코드 보기

저작자표시 (새창열림)

'Algorithms > 프로그래머스 (Programmers)' 카테고리의 다른 글

[프로그래머스] 로또의 최고 순위와 최저 순위 (Python)  (0) 2022.03.28
[프로그래머스] 신고 결과 받기 (Python)  (0) 2022.03.27
[프로그래머스] 야근 지수 (Python)  (0) 2022.03.25
[프로그래머스] 주식가격 (Python)  (0) 2022.03.25
[프로그래머스] 베스트앨범 (Python)  (0) 2022.03.25
    수미니그
    수미니그

    티스토리툴바