programmers.co.kr/learn/courses/30/lessons/42746#
코딩테스트 연습 - 가장 큰 수
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰
programmers.co.kr
처음에 next_permutation 으로 브루트포스 방식으로 전체를 돌려서 할려 했으나
시간 초과가 나서 통과가 불가능했다.
c++ 에서 제공하는 string 은 비교 연산자를 자체적으로 가지고 있는데,
"123" 과 "1234" 를 비교하면, "1234" 가 더 큰 값으로 처리된다.
또한 이 문제에서 요구하는 것은 두 수를 합쳤을때, 더 큰 값이 나오게 만들기를 원한다.
"1" 과 "23" 이 있을때, "1" + "23" ("123") 보다는 "23" + "1" ("231") 이 더 크게 나와야 하는것.
그래서 정렬을 위한 별도의 함수 bool comp(string& a, string& b) 를 생성해주고
이것을 통해서 sort() 함수를 돌려주면 답이 나온다.
- c++
#include <bits/stdc++.h>
using namespace std;
bool comp(string& a, string& b) {
return a + b > b + a;
}
string solution(vector<int> numbers) {
string answer = "";
vector<string> vec;
for (int i = 0; i < numbers.size(); ++i) {
string tmp = to_string(numbers[i]);
vec.push_back(tmp);
}
sort(vec.begin(), vec.end(), comp);
for (int i = 0; i < vec.size(); ++i) answer += vec[i];
bool flag = true;
for (int i = 0; i < answer.length(); ++i) {
if (answer[i] != '0') {
flag = false;
break;
}
}
if (flag) answer = "0";
return answer;
}
|
cs |
- 테스트 케이스 참조
programmers.co.kr/questions/13432
프로그래머스
온라인 시험 감독 서비스 모니토. 부정행위 걱정 없이 온라인 시험을 운영, 감독하세요. 응시자의 실물과 컴퓨터 화면을 동시에 감독하며 공정하고 투명한 온라인 시험을 운영할 수 있습니다.
programmers.co.kr
'PS' 카테고리의 다른 글
프로그래머스 - 구명보트 (0) | 2020.11.24 |
---|---|
프로그래머스 - H-Index (0) | 2020.11.24 |
프로그래머스 - 이중 우선순위 큐 (0) | 2020.11.23 |
프로그래머스 - 더 맵게 (0) | 2020.11.23 |
SWEA 2819 - 격자판의 숫자 이어 붙이기 (0) | 2020.11.21 |