문제
힌트
- 다른 자릿수 끼리 크기 비교는 어떻게 하면 좋을까? (예: 한자리 숫자에 10을 곱해서 두자리 숫자랑 비교 해볼까?)
소스코드 (첫번째 시도)
// [프로그래머스] 가장 큰 수
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
string solution(vector<int> numbers) {
string answer = "";
vector<pair<int,int>> pair_vec;
vector<int>::iterator numbers_iter;
for (numbers_iter = numbers.begin(); numbers_iter != numbers.end(); numbers_iter++) {
if (*numbers_iter >= 10) {
if (*numbers_iter >= 100) {
if (*numbers_iter >= 1000) pair_vec.push_back(make_pair(3, *numbers_iter));
else pair_vec.push_back(make_pair(2, *numbers_iter * 10 + (*numbers_iter / 100) * 1));
} else pair_vec.push_back(make_pair(1, *numbers_iter * 100 + (*numbers_iter / 10) * 11));
} else pair_vec.push_back(make_pair(0, *numbers_iter * 1000 + *numbers_iter * 111));
}
std::sort(pair_vec.begin(), pair_vec.end(), [](const pair<int,int> & a, pair<int,int> & b) -> bool {
if (a.second == b.second) return a.first < b.first;
else return a.second > b.second;
});
vector<pair<int,int>>::iterator pair_vec_iter;
for (pair_vec_iter = pair_vec.begin(); pair_vec_iter != pair_vec.end(); pair_vec_iter++) {
int element;
if (pair_vec_iter->first == 0) element = (pair_vec_iter->second - ((pair_vec_iter->second / 1000) * 111)) / 1000;
else if (pair_vec_iter->first == 1) element = (pair_vec_iter->second - ((pair_vec_iter->second / 1000) * 11)) / 100;
else if (pair_vec_iter->first == 2) element = (pair_vec_iter->second - (pair_vec_iter->second / 1000)) / 10;
else element = pair_vec_iter->second;
answer.append(to_string(element));
}
return answer;
}
- 채점 결과 (36.4 / 100.0)
- 정확성 (36.4 / 100.0)
'개발 관련 기타 > 알고리즘' 카테고리의 다른 글
[프로그래머스] (C++) 구명 보트 (0) | 2019.12.12 |
---|---|
[프로그래머스] (C++) N진수 게임 (0) | 2019.12.12 |
[프로그래머스] (C++) 피보나치 수 (0) | 2019.12.05 |
[프로그래머스] (C++) 행렬의 곱셈 (0) | 2019.12.05 |
[프로그래머스] (C++) 큰 수 만들기 (0) | 2019.12.04 |