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] 는 범위를 점검하지 않는다. 따라서 빠르다.
즉 둘의 가장 큰 차이는 범위를 체크하는지에 대한 여부다.
'알고리즘 문제풀이' 카테고리의 다른 글
백준 9012번 괄호 C++/문자열/실버5 (0) | 2023.10.23 |
---|---|
백준 1152번 단어의 개수 C++/문자열/브론즈2 (0) | 2023.10.22 |
백준 12865 평범한 배낭 C++/DP/냅색 알고리즘/골드5 (1) | 2023.10.21 |
백준 9655번 돌 게임 C++/DP/실버5 (1) | 2023.10.21 |
백준 1149번 RGB 거리 C++/DP/실버1 (1) | 2023.10.21 |