[프로그래머스/C++] ㅡ LV1 - 정수 내림차순으로 배치하기
2021. 3. 27. 17:31ㆍ필요/코딩테스트(프로그래머스)
문제
programmers.co.kr/learn/courses/30/lessons/12933
풀이
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
long long solution(long long n) {
string s = to_string(n);
vector<int> a;
for (int i=0; i<s.size(); i++) { // vector a 에 대입
a.push_back(s[i]-'0');
}
sort(a.begin(), a.end(), greater<int>()); // 내림차순으로 sort
s = "";
for (int i=0; i<a.size(); i++) { // string에 대입
s+=to_string(a[i]);
}
long long answer = stoll(s); // long long으로 형변환
return answer;
}
개념
to_string()은 숫자타입(int, long 등)의 데이터를 string으로 바꾸는 함수이다.
stoll()은 string을 long long으로 바꿔주는 함수이다.
풀이
처음 문제를 봤을 때, 바로 생각나는 방법으로 문제를 풀었다.
숫자 -> 문자열
이유 : 자릿수 별로 값을 옮기기 위해
문자열 -> 숫자(vector)
이유 : 숫자를 통해 sort 하기 위해
숫자 -> 문자열
이유 : 자릿수 별로 값을 옮기기 위해
문자열 -> 숫자
이유 : 출력을 위해
그 과정에서 s는 초기화한뒤 한번 더 사용했다.
+a
위 방식은 형변환이 너무 많아 번거롭다.
사실 숫자가 아니여도 sort 할 수 있다.
이 경우 아스키코드에 따라 사전순 나열이 되는데, 이렇게 하면 vector를 사용하지 않아도 된다.
그리고 문자열-> 숫자, 숫자-> 문자열의 과정을 없애도 된다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
long long solution(long long n) {
string s = to_string(n);
sort(s.begin(), s.end(), greater<char>());
long long answer = stoll(s);
return answer;
}
'필요 > 코딩테스트(프로그래머스)' 카테고리의 다른 글
[프로그래머스/C++] ㅡ LV1 - 콜라츠 추측 (0) | 2021.04.04 |
---|---|
[프로그래머스/C++] ㅡ LV1 - 정수 제곱근 판별 (0) | 2021.04.03 |
[프로그래머스/C++] ㅡ LV1 - 이상한 문자 만들기 (0) | 2021.03.27 |
[프로그래머스/C++] ㅡ LV1 - 시저암호 (0) | 2021.03.27 |
[프로그래머스/C++] ㅡ LV1 - 수박수박수박수박수박수? (0) | 2021.03.24 |