본문 바로가기

알고리즘/프로그래머스

[2018 KAKAO BLIND RECRUITMENT] [3차] n진수 게임

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

 

코딩테스트 연습 - [3차] n진수 게임 | 프로그래머스

N진수 게임 튜브가 활동하는 코딩 동아리에서는 전통적으로 해오는 게임이 있다. 이 게임은 여러 사람이 둥글게 앉아서 숫자를 하나씩 차례대로 말하는 게임인데, 규칙은 다음과 같다. 숫자를 0부터 시작해서 차례대로 말한다. 첫 번째 사람은 0, 두 번째 사람은 1, … 열 번째 사람은 9를 말한다. 10 이상의 숫자부터는 한 자리씩 끊어서 말한다. 즉 열한 번째 사람은 10의 첫 자리인 1, 열두 번째 사람은 둘째 자리인 0을 말한다. 이렇게 게임을 진행할

programmers.co.kr

 

 

n진수 게임은, 특정한 수를 n진법에 맞게 변환하는 규칙을 찾으면 쉽게 해결할 수 있다.

 

 


 

 

숫자 10을 2진수, 3진수 정도로만 변환해봐도 쉽게 규칙을 알 수 있다.

 

 

이 문제는 특별한 어려움없이 해결할 수 있다.

 

 


 

해설코드(C++).

 

 

 

#include <string>

#include <vector>

#include <iostream>

 

using namespace std;

 

string solution(int n, int t, int m, int p) {

    string answer = "";

    string temp;

    char c[2];

 

    p = p - 1;

    for (int i = 0; i < m * t; i++) {

        string str;

        int num = i;

        while (true) {

            if (num >= n) {

                if (num % n >= 10) {

                    c[0= 'A' + (num % n - 10);

                    c[1= '\0';

                    str.insert(0, c);

                }

                else {

                    c[0= '0' + num % n;

                    c[1= '\0';

                    str.insert(0, c);

                }

                num /= n;

            }

            if (num < n) {

                if (num % n >= 10) {

                    c[0= 'A' + (num % n - 10);

                    c[1= '\0';

                    str.insert(0, c);

                }

                else {

                    c[0= '0' + num % n;

                    c[1= '\0';

                    str.insert(0, c);

                }

                break;

            }

        }

        temp.append(str);

    }

    cout << temp << endl;

    for (int i = 0; i < t; i++) {

        c[0= temp[p + m * i];

        c[1= '\0';

        answer.append(c);

    }

 

    return answer;

}