PS

프로그래머스 - 가장 큰 수

728x90

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

 

728x90

'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