https://school.programmers.co.kr/learn/courses/30/lessons/12933
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
C++ 풀이 :
#include <string>
#include <vector>
long long solution(long long n)
{
std::string Str = std::to_string(n);
std::vector<int> Vec;
int A = '9';
int B = 9;
while (0 <= B)
{
for (size_t i = 0; i < Str.size(); i++)
{
if (Str.c_str()[i] == A)
{
Vec.push_back(B);
}
}
A -= 1;
B -= 1;
}
long long answer = 0;
for (size_t i = 0; i < Vec.size(); i++)
{
answer = answer * 10 + static_cast<long long>(Vec[i]);
}
return answer;
}
이전에 풀었던 방식이다.
새롭게 다시한번 풀어보자.
새로운 풀이 :
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
long long solution(long long n)
{
long long answer = 0;
string Strnum = to_string(n);
sort(Strnum.begin(), Strnum.end(), greater<int>());
answer = stol(Strnum);
return answer;
}
코드 설명 :
- Strnum = to_stirng(n) => n을 문자열로 변환한 값을 Strunm에 할당.
- sort를 사용하여 Strnum을 크기가 큰 순서로 나열 => 아스키코드로 비교하기 때문에 문자열도 크기 비교가 가능.
- 정렬된 문자를 다시 숫자형으로 변환. 여기서 stoi를 사용하게되면 long long의 데이터를 전부 담지 못해서 에러가 발생했었는데 string to long long 이라는 stol 함수가 있어서 그것을 사용했다.
JS 풀이 :
function solution(n) {
let answer = 0;
let Strnum = n + "";
answer = Strnum;
answer = Strnum.split('');
answer.sort((a, b) => b - a);
answer = answer.join("");
answer = parseInt(answer);
return answer;
}
코드 설명 :
- 숫자인 n을 + "" 를 통해 문자열로 변환해주고, split을통해 각 숫자마다 끊어 배열로 만들어준다.
- sort를 통해 a,b를 비교하여 b가 a보다 앞에 오는 경우로 정렬해준다.
- join("") 사용하면 배열의 모든 요소를 구분자 없이 연결할 수 있다. join() 만을 사용하면 구분자로 쉼표가 들어간다.
- 그렇게 합친문자를 parseInt를 통해 숫자로 되돌려주면 끝
'코드카타 > 코딩테스트' 카테고리의 다른 글
서울에서 김서방 찾기 (0) | 2024.08.20 |
---|---|
하샤드 수 (0) | 2024.08.20 |
정수 제곱근 판별 (0) | 2024.08.19 |
문자열을 정수로 바꾸기 (0) | 2024.08.19 |
도둑질 (0) | 2024.08.16 |