-
프로그래머스 Level 2 - 가장 큰 수 C++쾌락없는 책임 (공부)/알고리즘 문제풀이 2021. 4. 10. 10:44반응형
#include <string> #include <vector> #include <algorithm> using namespace std; bool compare(string a, string b){ return a+b > b+a; } string solution(vector<int> numbers) { string answer = ""; vector<string> v; for(int i = 0; i < numbers.size(); i++) v.push_back(to_string(numbers[i])); sort(v.begin(), v.end(), compare); if(v.at(0) == "0") return "0"; for(int i = 0; i < v.size(); i++) answer += v[i]; return answer; }
숫자를 문자열로 변경한 후 더하기를 해야 자리수를 고려하지 않고 비교를 할 수 있는 문제였습니다. 때문에 기존 배열은 int라서 string배열을 만든 뒤 넣어주는 작업을 했으며 algorithm 헤더에 있는 sort함수를 커스텀해서 compare로 문자열 더한 값중 큰 수가 앞에 오게 했습니다. 위 compare를 거치고 나면 앞자리가 큰 수가 앞에 오게 됩니다.
처음 2번은 11번을 계속 틀렸는데 다시 보니 solution이 string타입인데 return 0를 해서 그랬습니다.
- return = "0"로 변경하니 맞았습니다.
추가로 위 compare함수에서 단순 string a가 아니라 const string &a 이런 식으로 하면 copy construct되지 않아서 메모리를 효율적으로 쓴다는 이야기가 있습니다!
반응형'쾌락없는 책임 (공부) > 알고리즘 문제풀이' 카테고리의 다른 글
백준 2263 트리의 순회 - C++ (0) 2021.04.28 프로그래머스 Level3 - 정수 삼각형, C++ (0) 2021.04.26 프로그래머스 Level2 - 구명보트 C++ (0) 2021.04.08 프로그래머스 Level 1 - 체육복 C++ (0) 2021.04.07 프로그래머스 Level2 - 타겟 넘버 C++ (0) 2021.04.06