본문 바로가기
알고리즘/프로그래머스

[ 프로그래머스 / 문자열 / 진법 ] [3차] n진수 게임 (Kakao)

by 뎁꼼 2020. 7. 10.

1. 문제


 

 

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

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

programmers.co.kr

 

 

2. 소스코드


 

- 간단한 구현문제.

- 다음과 같은 로직으로 구현했다.

1) 자신의 마지막 순서까지, 모든 숫자의 string을 만든다. ( 2진법, 4번, 2명인 경우 0 1 10 11 100 )

2) 자신의 순서의 숫자만 출력한다.

 

소스코드

#include <string>
#include <vector>
#include <iostream>
using namespace std;
const char LUT [] = {'A','B','C','D','E','F'};

string conv(int num, const int & n){
    string res = ""; res.reserve(16);
    if(num == 0) return "0";
    while(num){
        int temp = num % n;
        if(temp > 9) res = LUT[temp-10] + res;
        else res = to_string(num % n) + res;
        num /= n;
    }
    return res;
}

string getAllSeq(const int & n, const int & t, const int & m){
    string total = ""; total.reserve(t * m);
    for(int i = 0 ; total.size() < t * m; ++i)
        total += conv(i, n);
   
    return total;
}

string solution(int n, int t, int m, int p) {
    string answer = ""; answer.reserve(t);
    string seq = getAllSeq(n,t,m);
    
    for(int i = p - 1 ; answer.size() < t; i += m )
        answer += seq[i];
    
    return answer;
}