1. 문제
programmers.co.kr/learn/courses/30/lessons/42746
2. 접근 방법
1) 처음에 "한자리수 끼리 비교하는 법 ", "두 자리 수끼리 비교하는 법".. 등 자리수 별로 조건을 달리해야 하나 고민이 있었다. 그런데 많은 자리수를 일일히 다 비교하는 게 말이 안된다고 생각했고, 다른 방법으로 접근했다.
2) string으로 표현하라는 게 힌트라고 생각했다. 예를 들어 10, 1이 있다고 하면 101 보다 110이 크다는 것을 어떻게 알아낼까.. 하다가 두 값을 string으로 바꿔서 string a = '10', string b = '1'이라고 하면 a + b= '101' , b + a = '110'으로 쉽게 대소 비교를 할 수있었다. 그래서 string단위로 대소 비교를 위한 compare함수를 만들었다.
3) string으로 숫자를 표현할 땐 항상 가장 첫 자리 수가 0으로 시작하는 지를 유의하자.
3. 실수했던 것 & 새로 안 것
1) string 자체로 비교하는 법
4. 코드
더보기
// 0 처리 주의할 것
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool comp( string a, string b) {
return a + b > b + a ? true: false;
}
string solution(vector<int> numbers) {
vector<string> v;
string answer= "";
for (auto x : numbers) { //numbers를 string으로 바꿔서 다시 저장
v.push_back(to_string(x));
}
sort(v.begin(),v.end(),comp); //정렬
for (auto x : v)
answer += x;
if (answer[0] == '0')
return "0";
return answer;
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[Lv2] 행렬 테두리 회전하기(python) (0) | 2021.07.28 |
---|---|
[Lv2]소수찾기(C++) (0) | 2020.10.23 |
[Lv1] K번째 수(C++) (0) | 2020.10.17 |
[Lv2]구명보트(C++) (0) | 2020.10.17 |
[Lv2]삼각달팽이(C++) (0) | 2020.10.17 |