<문제 설명>
함수 solution은 정수 n을 매개변수로 입력받습니다.
n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요.
예를 들어 n이 118372면 873211을 리턴하면 됩니다.
<제한 조건>
n은 1이상 8000000000 이하인 자연수입니다.
<입출력 예>
n return
118372 873211
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
long long solution(long long n) {
string num = to_string(n);
sort(num.begin(), num.end(), greater<>());
return stol(num);
}
sort 함수가 지원하는 오름차순/내림차순을 사용하면 좋다
이때 끝이 greater<>()라면 내림차순이고 less<>()라면 오름차순이다! 오름차순 쓸거면 less는 안써도 된다
다만 c++14 이전이라면 greater<int>() 이런 식으로 자료형을 명시해야 한다
stol은 string to long인데 stoi처럼 형변환을 해준다. stoll도 있다
std::stoi, std::stol, std::stoll - cppreference.com
int stoi ( const std::string& str, std::size_t* pos = nullptr, int base = 10 ); (1) (since C++11) int stoi ( const std::wstring& str, std::size_t* pos = nullptr, int base = 10 ); (2) (si
en.cppreference.com
공식 레퍼런스에 잘 설명되어 있다
<문제 설명>
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요.
예를 들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
<제한 조건>
n은 10,000,000,000이하인 자연수입니다.
<입출력 예>
n return
12345 [5,4,3,2,1]
#include <string>
#include <vector>
using namespace std;
vector<int> solution(long long n) {
vector<int> answer;
string num = to_string(n);
for (int i = num.length() - 1; i >= 0; i--) {
answer.push_back(num[i] - 48);
}
return answer;
}
왜 48을 빼었느냐? 저도 잘 모릅니다... 어거지로 끼워 맞췄읍니다...
정확한 해설을 위해 채찍피티 쌤에게 물어보기로 했다
문자 0은 아스키 값으로 48이다. 따라서 num[i]가 '5'라면 53의 값을 가진다.
테스트 시 결과값이 [5, 4, 3, 2, 1]가 아니라 [53,52,51,50,49]으로 나온 건 아스키코드 때문에 그렇다.
때문에 각 값에서 48을 빼면 문자열에서 숫자로 변환되는 것과 같은 결과를 제공한다
문자가 0부터 9까지일때의 아스키값 표를 가져와봤다
48 빼기... 간결하면서 좋은 아이디어인 것 같다. 실제 코테에서도 언젠가 쓸 날이 오길 바라며~
'C++ Programmers Test > Level 1' 카테고리의 다른 글
[Programmers] [C++] 가장 가까운 글자 / 소수 찾기 (0) | 2025.01.17 |
---|---|
[Programmers] [C++] 약수의 개수와 덧셈 / 이상한 문자 만들기 (0) | 2025.01.10 |
[Programmers] [C++] 콜라츠 추측 / 푸드 파이트 대회 (0) | 2025.01.08 |
[Programmers] [C++] 정수 제곱근 판별 / 나누어 떨어지는 숫자 배열 (0) | 2025.01.04 |
[Programmers] [C++] 최대공약수와 최소공배수 / 제일 작은 수 제거하기 (0) | 2025.01.03 |