Over the limit
[C++]프로그래머스 - 가장 큰 / sort 커스텀 본문
문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
입출력 예
numbers return
[6, 10, 2] | "6210" |
[3, 30, 34, 5, 9] | "9534330" |
주어진 정수를 개별적으로 취급할 수 있어야 하며, 이어 붙인 후
sort로 비교하여 문자열로 바꾸어 return 해야한다.
numbers의 순서를 재배치하여 만드는 과정은 새 벡터를 만들어서 for문 안에 돌리기
다만 헷갈리는 부분은 string변환, 그리고 string배열의 정렬이었다. 시도해본적이 없어서 낯설었는데,
타 코드를 보니 어려울 것 없이 변수에 배열 요소를 더한 값을 넣으면 되는 것이었다.
(앞으로도 쉽게 생각하는 습관 들일 것...)
string 변환은 학교 과제하면서 한번 써본 적이 있는 것 같은데
to_string -> int to string 이고, 말 그대로 int형을 string형으로 바꿔주는게 전부다.
다 풀고보니 문제 낸 의도는
문자열 숫자 변환 자유자재 가능하냐 + sort를 적절한 상황에 사용할 수 있냐(오름차순/내림차순) + 벡터 한스푼 정도 인 듯하다.
이번 풀이에서는 코드 참조가 많이 필요했다. sort를 오름차순용으로만 사용했는데, 커스텀 함수를
이용한 방법은 처음 사용해보았다.
cmp 내부에서의 비교도, 두개씩 비교하는 방법은 생각해내질 못했었다.
이외에도 다양한 방법들이 존재하니 참고해보자.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(string A, string B){
if(A+B>B+A) return true;
return false;
}
string solution(vector<int> numbers) {
string answer = "";
vector <string> tmp;
for(int i=0;i<numbers.size();i++){
tmp.push_back(to_string(numbers[i]));
}
sort(tmp.begin(),tmp.end(),cmp);
for(int i=0;i<tmp.size();i++) {
answer+= tmp[i];}
if (answer[0] == '0')
return "0";
return answer;
}
'Algorithm > Algorithm 풀이' 카테고리의 다른 글
[C++] 프로그래머스 - 입국심사 / 바이너리 트리 (0) | 2021.05.17 |
---|---|
[C++] 프로그래머스 - 체육복 (0) | 2021.05.16 |
[C++] 프로그래머스 - 타겟 넘버 (0) | 2021.05.09 |
[C++] 프로그래머스 - 모의고사 (0) | 2021.05.08 |
[C++] 프로그래머스 - 전화번호 목록 / core dumped 오류 (0) | 2021.05.06 |