알고리즘/프로그래머스

[프로그래머스 C++] - 124 나라의 숫자

문제 : 124 나라의 숫자

 

https://programmers.co.kr/learn/courses/30/lessons/12899

 

 분석

10 진법 숫자나라 진법 10 진법 숫자나라 진법
4 11 19 141
5 12 20 142
6 14 21 144

 숫자나라의 진법이 기본적으로 3진법을 따라가는 것을 알 수 있다.

따라서 맨 뒷자리인 1, 2, 4 는 각각 주어진 숫자를 3으로 나눈 나머지 1, 2, 0에 해당되는 것을 구할 수 있다.

또한 3개씩 끊어 생각할 때, 맨 뒷자리를 제외한 앞자리는 동일한 것을 알 수 있다.

 

19, 20, 21로 예를 들면 각기 맨 뒷자리는 나머지인 1, 2, 0에 해당하는 1, 2, 4이고, 앞자리는 14로 동일하다.

여기서 14는 10진법으로 6인데 6이 나온 순서는 다음과 같다.

3개씩 끊어 생각할 때, 그 중 3의 배수에서 3을 뺀 값을 3으로 나눈 값이다.

(3으로 나눈 이유는 자릿수가 올라가기 때문)

 

ex) 19, 20, 21인 경우 21-3 = 18, 18 / 3 = 6

 

위 방법을 반복하면 정답을 구할 수 있다.

 

 구현

string solution(int n) {
	string answer = "";
	while (n > 0)
	{
		int ret = n % 3;
		if (ret == 0)
		{
			answer = "4" + answer;
			n -= 3;
		}
		else
		{
			answer = to_string(ret) + answer;
			n -= ret;
		}
		n /= 3;
	}

	return answer;
}