일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 추석맞이 코딩챌린지
- Re
- 자바
- 파이썬
- 다익스트라
- 프로그래머스
- 재귀함수
- java
- 이분탐색
- python
- 그리디
- 수학
- backjoon
- programmers
- KAKAO BLIND RECRUITMENT
- 정렬
- 동적 계획법
- Combinations
- DateTime
- 백준
- heapq
- lambda
- BFS
- 위클리 챌린지
- 정규식
- dfs
- 카카오
- Zip
- Set
- divmod
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