[프로그래머스]큰 수 만들기 - 그리디

2021. 10. 16. 22:50·SW개발/코딩테스트

https://programmers.co.kr/learn/courses/30/lessons/42883

 

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

 

programmers.co.kr

 

def solution(number, k):
    # 스택을 활용한다
    stk = []
    
    # number 리스트를 순회함
    for num in number: 
        # 제거해야할 값(k)가 남아있고, stk에 값이 있고, stk의 마지막의 값보다 현재 나온수가 더 크다면 
        # (큰 숫자가 큰 자릿수를 가지게 하기 위해)
        # 스택의 마지막 숫자를 없애버리고, 제거해야할 값을 하나 줄임
        while k > 0 and stk and stk[-1] < num:
            stk.pop()
            k -= 1
        # 기본적으로 값을 한개씩 넣어줌, (위의 조건에 부합할 경우에만 스택에서 값 제거하면 큰 수만 남게됨)
        stk.append(num)
    
    # 순회를 마쳤는데도 제거할 수가 남아있다면 (ex: 999, k=2 인 경우)
    # 뒤에서 k개의 숫자는 다 제거해버림 (작은 자릿수라서 상관 없음)
    if k > 0:
        stk = stk[:len(stk) - k]
        
    answer = ''.join(stk)

    return answer

 

문제 해결 Point

스택을 활용해 숫자를 순차적으로 넣는 것이 기본 과정이다. 여기에 더해 다음에 나올 숫자가 스택의 마지막 숫자보다 크다면 스택에 있는 작은 수들은 모두 제거하는 것이 포인트이다.

 

그럼 위의 코드를 순서대로 풀어 설명해보겠다.

  1. 숫자 배열을 순회한다.
  2. 기본적으로 스택에 값을 하나씩 넣는다. 하지만 이 때, 앞에 조건이 붙는다.
    1. k (제거할 숫자 갯수)가 남아있고, 스택에 값이 존재하고, 스택의 마지막에 들어있는 값보다 현재 나온 num이 더 큰 경우
    2. 스택에 넣은 값을 제거하고, k도 -1 한다
  3. 이렇게 순회를 마치고도 k가 0보다 크다면, (999, k=2) 와 같은 경우이다.
    이러한 경우에는 남은 k 만큼 뒷자리를 제거해버리면 된다.

스택을 문제에 적용한다는 포인트를 생각해내기가 굉장히 어려웠던 문제이다. 스택, 큐 등을 사용해 푸는 여러 유형들을 접해보는 것이 좋을 것 같다.

 

728x90

'SW개발 > 코딩테스트' 카테고리의 다른 글

[프로그래머스]섬 연결하기 - 그리디, 최소 신장 트리, Prim  (0) 2021.10.21
[프로그래머스]조이스틱 - 그리디  (0) 2021.10.16
[프로그래머스]입국심사 - 이분탐색  (0) 2021.10.11
[프로그래머스]8주차_최소직사각형 - 위클리 챌린지  (0) 2021.10.11
[프로그래머스]카펫 - 완전탐색  (0) 2021.10.11
'SW개발/코딩테스트' 카테고리의 다른 글
  • [프로그래머스]섬 연결하기 - 그리디, 최소 신장 트리, Prim
  • [프로그래머스]조이스틱 - 그리디
  • [프로그래머스]입국심사 - 이분탐색
  • [프로그래머스]8주차_최소직사각형 - 위클리 챌린지
Leffe_pt
Leffe_pt
개발자로서 성장하면서 배워온 지식과 경험을 공유하는 공간입니다.
  • Leffe_pt
    Leffe's tistory
    Leffe_pt
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • SW개발 (303)
        • 코딩테스트 (172)
        • 개발이야기 (23)
        • IT 용어 (17)
        • Python (22)
        • Django (46)
        • Flask (2)
        • Database (1)
        • SQLAlchemy (0)
        • Javascript (5)
        • Linux, Unix (3)
        • JAVA (2)
        • Spring (10)
      • 회고 (4)
      • 사진 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    배달비 공유
    플레이스토어
    컨트리뷰터
    음식
    g
    Contributor
    라이프 스타일
    django
    트리 #AVL #알고리즘 #자료구조
    배공파용
    어플리케이션
    배달
    오픈소스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Leffe_pt
[프로그래머스]큰 수 만들기 - 그리디
상단으로

티스토리툴바