일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- KAKAO BLIND RECRUITMENT
- 다익스트라
- 프로그래머스
- 추석맞이 코딩챌린지
- 동적 계획법
- Zip
- 카카오
- Re
- 위클리 챌린지
- 그리디
- lambda
- programmers
- 정렬
- divmod
- 파이썬
- 수학
- 백준
- dfs
- heapq
- backjoon
- python
- BFS
- 재귀함수
- java
- 자바
- 이분탐색
- 정규식
- Combinations
- DateTime
- Set
Archives
- Today
- Total
상상쓰
[백준] 크게 만들기 본문
https://www.acmicpc.net/problem/2812
2812번: 크게 만들기
N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
heapq 를 이용하여 처음에 올 수 있는 자리에 수 중 가장 큰 것을 뽑고 index 를 비교하여 다음으로 올 수 있는 수 중에서 가장 큰 값을 차례대로 뽑으면 된다.
예를 들어, N = 10, K = 4, number = 4177252841 라고 하자.
그럼 가장 처음에 올 수 있는 수는 417(1)7(2)2 중 하나의 수가 된다. 52841 중 하나를 택하면 6자리의 수가 될 수 없다.
가장 큰 값인 7과 7의 인덱스(I)를 잡는다. 다음으로, 417(1)7(2)25 중의 하나를 택하는데 인덱스를 비교하여 I 이하의 숫자들은 버리고 7(2)25 중의 하나를 택하여 주면 된다. number의 마지막 숫자까지 queue 에 하나를 넣고 I 보다 큰 숫자 하나를 뽑아 답을 완성해준다.
import sys
import heapq
N, K = map(int, sys.stdin.readline().split())
number = str(sys.stdin.readline().strip())
queue = []
answer = []
for i in range(K + 1):
heapq.heappush(queue, [-int(number[i]), i])
M, I = heapq.heappop(queue)
answer.append(str(-M))
for i in range(N - K - 1):
heapq.heappush(queue, [-int(number[K + 1 + i]), K + 1 + i])
m, j = 0, -1
while j < I:
m, j = heapq.heappop(queue)
I = j
answer.append(str(-m))
print(int(''.join(answer)))
'Coding Test' 카테고리의 다른 글
[백준] 8진수 2진수 (0) | 2021.07.13 |
---|---|
[프로그래머스] [1차] 추석 트래픽 (0) | 2021.07.13 |
[프로그래머스] 거리두기 확인하기 (0) | 2021.07.11 |
[프로그래머스] 호텔 방 배정 (0) | 2021.07.09 |
[프로그래머스] 숫자 문자열과 영단어 (0) | 2021.07.09 |
Comments