[문제보기]

  2018 KAKAO BLIND. n진수 게임

 

코딩테스트 연습 - [3차] n진수 게임

N진수 게임 튜브가 활동하는 코딩 동아리에서는 전통적으로 해오는 게임이 있다. 이 게임은 여러 사람이 둥글게 앉아서 숫자를 하나씩 차례대로 말하는 게임인데, 규칙은 다음과 같다. 숫자를 0�

programmers.co.kr

 

[풀이과정]

이 문제는 찾아야되는 수까지 n진법에 맞춰 변환을 해준 뒤, t의 간격으로 찾으면 되는 문제이다.

찾아야되는 수는 t*m으로 미리구할 개수 t와 모든 인원 m이 있을 때, 미리 구할 개수라는 것은 내 차례를 

뜻하므로 t*m을 해줘야 내 차례까지 수를 구할 수 있다.

 

n진법으로 변환하는 부분에서 int으로 하면 받아지는 값을 역수로 취해야되지만, 

필자는 string으로 받아 새로운 값을 앞으로 더해주는 방식을 사용했다.

 

n진법으로 변환을 다하면 내 차례에 자리하고 있는 값을 출력한다.

 

[소스코드]

//n진수 게임
#include <string>
#include <vector>
using namespace std;

string change(int n, int num){
    string temp = "";
    string code[] = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};

    while(num/n != 0){
        temp = code[num%n] + temp;
        num /= n; 
    }

    temp = code[num%n] + temp;
    return temp;
}

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

    string val = "0";
    for(int i=1; i<t*m; i++){
        val += change(n, i);
    }

    int cnt = 1;
    for(int i = p-1; i<val.size();){
        answer += val[i];
        if(cnt == t) break;

        cnt++;
        i += m;
    }
    return answer;
}

 

[해결 과정 중 실수한 부분]

n진법을 만드는 부분에서 위에서 말한 int로 사용을 해서 나눠주고 역수도 취하고 다시 string으로 변환을 해주고,

하는 형식이 너무 복잡하고, 더러워져서 string으로 자료형을 변경하니 훨씬 코드가 간단해졌다.