본문 바로가기
프로그래머스

[프로그래머스] 연습문제 - 124 나라의 숫자, C++

by 황인태(intaehwang) 2020. 1. 6.
반응형

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

 

코딩테스트 연습 - 124 나라의 숫자 | 프로그래머스

124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다. 124 나라에는 자연수만 존재합니다. 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다. 예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다. 10진법 124 나라 10진법 124 나라 1 1 6 14 2 2 7 21 3 4 8 22 4 11 9 24 5 12 10 41 자연수 n이 매개변수로 주어질 때, n을 124

programmers.co.kr

 본 문제는 프로그래머스 연습문제다. 개인적으로 많이 고전했던 문제다. 10진법을 124 나라 진법으로 바꾸는 문제인데, 몇 진법으로 바꾸어야 할지 엄청 힘들었다. 결론적으로 10진법을 3진법으로 바꿔야 하며, 3진법에서 124 진법으로 다시 바꿔야 한다. 우선 3진법일 때, 배열을 {0, 1, 2}로 초기화하였는데 124 진법은 {4, 1, 2}로 초기화해야 한다. 즉, 3진법에서 3으로 나눴을 때 나머지가 0인 경우만 124 진법으로 바꾸면 된다. 

구분 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
3 1 2 10 11 12 20 21 22 100 101 102 110 111 112 120
124 1 2 4 11 12 14 21 22 24 41 42 44 111 112 114

 

    위 표와 같은 결과가 나오므로 다음과 같이 코딩하면 된다.
  1. 입력된 숫자 n을 3진법으로 바꾼다.
  2. n % 3 == 0 일 경우 n에서 1을 뺀 다음 진법 계산을 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <string>
#include <vector>
 
using namespace std;
 
string solution(int n) {
    string answer = "";
    char a[] = {'4''1''2'};
    while (n > 0) {
        int idx = n % 3;
        n /= 3;
        if (idx == 0) n -= 1;
        answer = a[idx] + answer;
    }
    return answer;
}
cs

 

반응형
Buy me a coffeeBuy me a coffee

댓글