Notice
250x250
Recent Posts
Recent Comments
Link
넘치게 채우기
[프로그래머스] - 큰 수 만들기 본문
728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/42883
문제 유형 : 그리디
문제 난이도 : Level 2
문제
어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다.
예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다.
문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요.
제한 조건
- number는 2자리 이상, 1,000,000자리 이하인 숫자입니다.
- k는 1 이상 number의 자릿수 미만인 자연수입니다.
풀이
인덱스 0부터 탐색을 시작합니다. 시작점보다 큰 수가 나오면 큰 수를 바꿔끼는 로직부터 시작합니다.
처음에는 start + 1부터 length - remain까지 k개만큼의 수들만 골랐다고 가정합니다.
이 중에서 가장 큰 값을 찾아 문자열에 넣고, remain의 값이 줄어들며 수 범위를 조금씩 넓혀갑니다.
remain이 0이 될 때 까지 반복합니다.
코드(C++)
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string solution(string number, int k) {
int length = number.length();
int remain = length - k;
string answer = "";
int start = 0;
while (remain > 0) {
char maxNum = number[start];
int idx = start;
for (int i = start + 1; i <= length - remain; i++) {
if (number[i] > maxNum) {
maxNum = number[i];
idx = i;
}
}
answer += maxNum;
start = idx + 1;
remain--;
}
return answer;
}
728x90
반응형
'PS > Programmers' 카테고리의 다른 글
[프로그래머스] 전력망을 둘로 나누기 (0) | 2023.09.02 |
---|---|
[프로그래머스] 기능개발 (0) | 2023.07.20 |
[프로그래머스] - 카펫 (0) | 2023.07.18 |
[프로그래머스] - 완주하지 못한 선수 (0) | 2023.07.17 |
[프로그래머스] 더 맵게 (0) | 2023.07.16 |