[c++/프로그래머스] n진수 게임

조히·2023년 3월 2일
0

PS

목록 보기
36/82

문제 링크

n진수 게임

풀이

진수 구하는 문제

  1. curNum을 하나씩 더하면서 n진수로 바꿔주는데, 모든 문자열을 all에 넣는다.
    1-1. m명 있는 데서 t개를 구하려면 최소 m*t개의 문자가 있어야하기 때문에 all.size()m*t보다 클 때까지 반복한다.
    1-2. n진수로 바꿔주기 위해서 최대 16진법이기 때문에 배열 c0부터 F까지 넣어주었고, num%n 했을 때 나오는 숫자가 c의 인덱스 숫자이다. num<=0가 될 때 까지 반복해주고 reverse해서 return한다.
  2. 내 차례일 때 말해야 하는 숫자를 구하기 위해서 turn은 몇 번째 차례인지 알려주는 변수이다. turn*m+p-1turn 차례일 때 내가 말해야하는 숫자의 인덱스이다. -1을 해주는 이유는 순서가 1번째부터(0번째가 아닌) 시작되기 때문이다.
  3. turn++ 해주면서 answer.size()t가 될 때까지 반복한다.

코드

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

string jinsu(int n, int num)
{
    char c[]="0123456789ABCDEF";
    
    string s = "";
    while(num>0)
    {
        s+=c[num%n];
        num/=n;
    }
    reverse(s.begin(), s.end());
    
    return s;
}

string solution(int n, int t, int m, int p) {
    string answer = "";
    
    int curNum = 1;
    string all="0";
    while(1)
    {
        if(all.size()>=t*m) break;
        all += jinsu(n,curNum);
        curNum++;
    }
    
    int turn = 0;
    while(1)
    {
        if(answer.size()==t) break;
        answer+=all[turn*m+p-1];
        turn++;
    }
    
    return answer;
}
profile
Juhee Kim | Game Client Developer

0개의 댓글