파이썬/문제풀다 하나씩

프로그래머스 큰 수 만들기 파이썬 (백준도 있음)

mcdn 2021. 7. 16. 16:09
반응형

프로그래머스 

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

 

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

 

programmers.co.kr

 

백준

https://www.acmicpc.net/problem/2812

 

2812번: 크게 만들기

N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.

www.acmicpc.net

 

 

# https://programmers.co.kr/learn/courses/30/lessons/42883#
# 탐욕법(Greedy) > 큰 수 만들기

from collections import deque
import sys 

def solution(number, k):
    bucket = deque()
    answer = ''
    cnt = 0

    # enumerate (idx, item in number) 튜플을 반환한다 
    for i, item in enumerate(number):
        
        # stack에 있는 수가 작으면 pop한다 
        while (bucket):
            if (bucket[-1] < item):
                bucket.pop()
                cnt += 1
                if (cnt == k):
                    break
            else:
                break
        # 더 큰 수를 stack에 계속 넣는다 
        bucket.append(item)
        # 만약 k개의 수를 제거했다면 for문을 탈출한다 
        if (cnt == k):
            break

    # 현재 bucket에 있는 숫자를 answer에 추가한다 
    for x in range(0, len(bucket)): # 여길 k라고 써서 에러남 
        answer += bucket[x]
    # 만약 cnt==k로 인해 일찍 break했으면 뒤에 이어서 추가한다 
    answer += number[i + 1:]
    # 만약 cnt==k가 되기 전에 for문을 다 돌았다면 cnt==k가 될때까지 뒤를 삭제한다 
    answer = answer[:len(answer) - (k - cnt)]
    return answer

# 백준용
# n, k = map(int, sys.stdin.readline().split())
# number = input()
# print(solution(number, k))

# 반례  
#  "999", 2 -> "9" 
# "1111", 2 -> "11"
# "9929191", 5 -> "99"

프로그래머스보다 

백준이 더 까다롭게 채점한다 

한번 돌려보는 걸 추천 

반례 꼭 돌려보기 

 

설명은 주석 

 

 

반응형