공대생의 비망록

[프로그래머스][Lv. 2] 124 나라의 숫자 C++ 풀이 본문

Programming Language/C, C++

[프로그래머스][Lv. 2] 124 나라의 숫자 C++ 풀이

myungsup1250 2022. 4. 17. 17:04

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

 

코딩테스트 연습 - 124 나라의 숫자

 

programmers.co.kr

풀이

 

처음에는 0, 1, 2가 아니라 1, 2, 4로 수를 표현해야한다는 점만 빼고는 크게 다를 것이라고 생각하지 않고 3진법으로 생각하고 대충 구현하면 될 줄 알았는데, 의외로 신경쓸 게 있었던 문제였다.

우선 N진법 변환하는 문제와는 크게 틀은 다르지 않다.

주어진 수를 N으로 나눈 나머지를 가지고 문자열 값을 구하고, 주어진 수를 N으로 나눠가며 그 수가 0보다 클 때까지 연산을 반복하면 된다.

단, 1과 2는 그대로 1, 2로 표현하면 되지만 0인 경우 (N으로 나누어 떨어지는 경우)에는 4를 문자열에 더해주고, N으로 나누어 떨어졌으므로 (N 이상의 수일 경우에는 다음 연산 단계에서 처리해야 하므로) 주어진 수에 -1 하면 된다.

 

끝!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <string>
#include <vector>
 
using namespace std;
 
string solution(int n) {
    string answer = "";
    int number = n;
    
    while (number > 0) {
        int tmp = number % 3;
        number /= 3;
        switch (tmp) {
            case 0: {
                answer = "4" + answer;
                number--;
                break;
            }
            case 1: {
                answer = "1" + answer;
                break;
            }
            case 2: {
                answer = "2" + answer;
                break;
            }
            default: {
                answer += "";
                break;
            }
        }        
    }
    
    return answer;
}
cs
Comments