본문 바로가기

C++/프로그래머스

[프로그래머스] [C++] 가장 큰 수

문제 풀이

 

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

// 배열에서 인접한 두 원소를 더하여 그 중 더 큰 순서대로 원소를 배열한다.
// ex) '6' + '10'= '610' | '10' + '6' = '106'
// string 형태이기 때문에 사용 가능하다.
bool st_cmp(string a, string b) {
	return a + b > b + a;
}

string solution(vector<int> numbers) {
    string answer = "";
    vector<string> s;
    
    // numbers에 있는 원소들을 string 타입으로 변경하여 s에 삽입
	for (int i = 0; i < numbers.size(); i++) {
		string tmp = to_string(numbers[i]);
		s.push_back(tmp);
	}
    
    // 원소를 st_cmp를 기준으로 정렬. 맨 위를 보자 
	sort(s.begin(), s.end(), st_cmp);
    
    // 첫 번째 원소가 "0"이라면 원소의 배열이 [0, 0, 0, 0]이 되어있을 수도 있다. 
    // string 형태로 반환해야 하기 때문에 저대로 반환한다면 "0000"이 반환될 가능성이 존재
    // 때문에 첫 번째 원소가 0이라면 "0"을 반환하고 종료한다
	if (s[0] == "0") return "0";
	
    // s의 값을 answer에 하나씩 추가.
	for (int i = 0; i < s.size(); i++) 
		answer += s[i];
	
    return answer;
}

 

 

 

문제 링크

 

programmers.co.kr/learn/courses/30/lessons/42746?language=cpp

 

코딩테스트 연습 - 가장 큰 수

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰

programmers.co.kr