문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/42746#
코딩테스트 연습 - 가장 큰 수
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰
programmers.co.kr
정렬 기준을 잘 작성해야 하는 문제였습니다.
알고리즘은 아래와 같습니다.
1. numbers 벡터를 모두 string으로 변환한 string 벡터를 생성합니다.
2. 정렬을 하는데 정렬 기준은 두 문자열을 합쳤을 때 사전 순서 역순으로 정렬을 진행해줍니다.
3. 2번에서 정렬한 벡터를 순서대로 더한 값이 답이며 이를 반환합니다.
3.1 3번에서 구한 답이 "000000000000"과 같은 형식이라면 "0"만 반환해줘야 합니다.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <string> | |
#include <vector> | |
#include <algorithm> | |
using namespace std; | |
bool cmp(string a, string b) | |
{ | |
string aConcatB = a + b; | |
string bConcatA = b + a; | |
return aConcatB > bConcatA; | |
} | |
string eraseLeadingZeros(string s) | |
{ | |
string result; | |
bool isLeadingZero = true; | |
for (char c : s) | |
{ | |
if (c == '0' && isLeadingZero) | |
{ | |
continue; | |
} | |
isLeadingZero = false; | |
result += c; | |
} | |
return result; | |
} | |
string solution(vector<int> numbers) { | |
vector<string> v; | |
for (int number : numbers) | |
{ | |
v.push_back(to_string(number)); | |
} | |
sort(v.begin(), v.end(), cmp); | |
string answer = ""; | |
for (string s : v) | |
{ | |
answer += s; | |
} | |
string result = eraseLeadingZeros(answer); | |
return result.length() ? result : "0"; | |
} | |
int main(void) | |
{ | |
vector<int> numbers = { 21, 212 }; | |
cout << solution(numbers) << "\n"; | |
return 0; | |
} |

개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
반응형
'알고리즘 > programmers' 카테고리의 다른 글
[Programmers 코딩테스트 고득점 Kit] N으로 표현 (0) | 2021.09.21 |
---|---|
[Programmers 코딩테스트 고득점 Kit] H-Index (0) | 2021.09.21 |
[Programmers 코딩테스트 고득점 Kit] K번째수 (0) | 2021.09.21 |
[Programmers 코딩테스트 고득점 Kit] 순위 (0) | 2021.09.21 |
[Programmers 코딩테스트 고득점 Kit] 방의 개수 (0) | 2021.09.21 |