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

김지현·2023년 11월 9일
0

알고리즘

목록 보기
1/7
post-thumbnail

문제

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

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

분류

정렬

풀이

  1. 숫자를 문자열로 변환
  2. 두 문자열을 이어붙였을 때 큰 수를 기준으로 벡터 정렬
  3. 정렬된 벡터를 문자열로 이어붙임
bool compare (string a, string b) {		// 비교 함수
	return a + b > b + a;				// 붙인 문자열을 그대로 비교
}

string solution(vector<int> numbers) {
	string answer = "";
	vector <string> num_s;

	for (int i = 0; i < numbers.size(); i++)
		num_s.push_back(to_string(numbers[i]));		// 문자열로 변환하여 저장

	sort(num_s.begin(), num_s.end(), compare);		// 정렬

	for (int i = 0; i < numbers.size(); i++)		// answer 문자열에 붙임
		answer += num_s[i];

    if (answer[0] == '0') return "0";				// 0일 경우 "0" 처리
    
	return answer;
}

⚠️ C++에서 문자열을 그대로 비교하면 길이가 같을 경우 정수처럼 크기 비교가 가능하다. 길이가 다를 경우 앞자리수부터 큰 수가 크다(사전순)고 반환한다. ex) 9 > 12

0개의 댓글