알고리즘/프로그래머스

Programers 큰 수 만들기

내이름은 킹햄찌 2022. 7. 26. 23:15

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

프로그래머스 큰 수 만들기 문제입니다.

 

아이디어

Greedy문제입니다. 큰 수를 만들기 위한 전략을 로직으로 녹여내는 것이 중요한데, 본인은 앞에서 부터 가장 큰 수를 찾고 작은 수들은 걸러내는 방식을 사용했습니다.

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

string solution(string number, int k) {
	int cnt = k;
	int maxPos = 0;
	int start = 0;
	string answer = "";
	while (cnt>0) {
		int frontMax = 0;
		int cnt2 = cnt;
		if (answer.length() + cnt == number.length()) break;
		//앞에서 가장 큰수를 찾는다
		for (int i = start; cnt2>=0; cnt2--,i++) {
			if (frontMax<int(number[i])) {
				frontMax = int(number[i]);
				maxPos = i;
			}			
		}
		cnt -= (maxPos - start);
		answer += number[maxPos];
		if (cnt == 0 && (number.length() - answer.length() != k)) answer += number.substr(maxPos + 1);
		start = maxPos+1;
	}
	return answer;
}