본문 바로가기
알고리즘 문제풀이

프로그래머스 가장 큰 수 C++/정렬/레벨2

by yoogani 2023. 10. 22.

https://school.programmers.co.kr/learn/courses/30/lessons/42746

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. int형 벡터를 string 으로 변환해서 temp 벡터에 넣는다.

2. temp 벡터를 정렬하는데, 이때 더할때 더 큰 수가 앞에 올 수 있도록 정렬한다.

3. cmp 함수처럼 더한 것이 큰 순으로 정렬할 수 있도록..!

4. temp 의 처음 숫자가 0이라면 0을 반환한다. 왜냐면 0이 가장 크다면 합은 당여니 0이니까.

5. 그리고 나서 문자열을 그대로 answer 에 합치고 리턴한다.

6. 왜 그냥 바로 합치냐구 ? temp 정렬시 애초에 큰 수대로 합쳐졌기 때문이다.

 

#include <string>
#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

bool cmpfunction(string a, string b) {
    return a + b > b + a;
}
 
string solution(vector<int> numbers) {
    string answer = "";
    
    vector<string> temp;
    
    for (int i=0; i<numbers.size();i++) temp.push_back(to_string(num));
    
    sort(temp.begin(), temp.end(), cmpfunction);
    
    if (temp[0] == "0") return "0";
    
    for (auto num : temp) answer += num;
        
        
        
    return answer;
}

 

더 찾아보니 temp[0] 이 아닌 temp.at(0) 을 사용하는 사람도 있었다.

이게 무슨 차이인지 모르겠어서 더 찾아보았다.

 

.at(index) 은 범위를 점검한다. 따라서 안전하다.
[index] 는 범위를 점검하지 않는다. 따라서 빠르다.

 

즉 둘의 가장 큰 차이는 범위를 체크하는지에 대한 여부다.