[프로그래머스 C++] [3차] n진수 게임

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


 

해결전략

 

문자열

진법 변환 (2진수, 16진수 변환)

 

 


 

코드

 

#include <string>
#include <vector>
using namespace std;

// n: 진법, t: 미리 구할 숫자의 갯수(튜브가 말해야 하는 숫자의 개수), m: 게임 참가 인원, p: 튜브의 순서

string Convert(int k, int n) // k: 주어진 숫자, n: 진법
{
    if (k == 0) return "0";
    if (n == 10) return to_string(k);

    string tmp;
	while (k > 0)
	{
        string newNum; // 진법 계산 후 나머지 값
        if (k % n < 10) // 나머지가 10보다 작으면
            newNum = to_string(k % n);
        else{ // 나머지가 10 이상이면
            newNum = 'A' + (k % n - 10);
        }

        tmp = newNum + tmp;
        k /= n;
	}
    return tmp;
}

string solution(int n, int t, int m, int p) {
    string answer = "";
    
    string s;
    for(int i=0; i<t*m; i++) //t*m (튜브 말해야 하는 숫자의 개수 * 참가 인원)
    {
        s = s + Convert(i, n); // 등장할 수 나열하여 문자열에 저장
    }

    for(int i = 1; i <= s.size(); i++)
    {
    	if(i % m == p) // 튜브의 순서
            answer += s[i-1];
        else if (i % m == 0 && m == p) // 튜브의 순서, 마지막 순서인 경우 나머지가 0이므로
            answer += s[i - 1];
	    
        if (answer.size() == t) // t번 말할 수 answer에 담으면 break
            break;
    }

    return answer;
}