https://school.programmers.co.kr/learn/courses/30/lessons/12899
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
10진법 수 n이 주어졌을 때, 1, 2, 4 3개 숫자로 표현하여 출력해야 하는 문제입니다.
10진수를 k 진수로 표현할 때 10진수를 0이 될 때 까지 나누고, 나머지 값인 n % k 를 역으로 이어 붙이게 됩니다.
https://namu.wiki/w/%EC%A7%84%EB%B2%95
진법 - 나무위키
정수 NNN이 밑수 bbb에 대하여 서로 다른 두가지 이상의 표현방법이 존재한다고 가정하자. 그렇다면, 두 표현방법을 각각 N1,N2N_1, N_2N1,N2라고 표기하면 다음과 같다. N1=∑i=0maibi=∑i=0mcibi=N2\displ
namu.wiki
하지만 예제에서, 3, 6, 9 등 3으로 나눠 떨어지는 숫자에서 1, 2, 4를 사용해 나타내야 하는 부분에서 문제가 발생합니다.
즉, 3을 3진법으로 나타내면 10(3) 인데, 예제에서는 4 입니다. 규칙이 존재하는데, 현재 값이 나눠 떨어지는 수라면, 몫-1 값이 다음 n이 됩니다.
algorithm 라이브러리의 reverse 함수를 사용해 역순으로 변환해줍니다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string str[3] = {"4", "1", "2"};
string solution(int n) {
string answer = "";
while (n > 0) {
answer += str[ n % 3];
if (n % 3 == 0)
n = (n / 3) - 1;
else
n = n / 3;
}
reverse(answer.begin(), answer.end());
return answer;
}
'프로그래머스 > Lv.2' 카테고리의 다른 글
[C++] 프로그래머스 [3차] 압축 (1) | 2023.10.09 |
---|---|
[C++] 프로그래머스 [3차] n진수 게임 (2) | 2023.10.09 |
[C++] 프로그래머스 전력망을 둘로 나누기 (0) | 2023.10.06 |
[C++] 프로그래머스 k진수에서 소수 개수 구하기 (0) | 2023.10.01 |
[C++] 프로그래머스 뉴스 클러스터링 (0) | 2023.09.24 |