기계는 거짓말하지 않는다

[Programmers] n진수 게임 본문

Programming Test

[Programmers] n진수 게임

KillinTime 2021. 5. 27. 13:31

프로그래머스 - n진수 게임 문제 입니다.

 

문제
입출력 예

0부터 시작되는 수를 2~16진수로 바꿔줄 수 있으면 됩니다.

10진수를 n진수의 n으로 나눈 나머지를 n진수에 맞게 문자열로 변환하면 됩니다.

이 문자열에서 자신의 순서와 같은 문자를 정답에 추가합니다.

게임에 참가하는 인원이 m이므로 m으로 나눈 나머지의 +1이 자신의 순서가 됩니다.

#include <string>

using namespace std;

string convertNum(int n) {	// 나머지를 n진수에 맞게 변환
    switch(n) {
        case 10:
            return "A";
        case 11:
            return "B";
        case 12:
            return "C";
        case 13:
            return "D";
        case 14:
            return "E";
        case 15:
            return "F";
        default:
            return to_string(n);
    }
}

string chgBase(int base, int num) {	// n진수 숫자를 문자열로 변환
    if(num < base) return convertNum(num);
    
    return chgBase(base, num / base) + convertNum(num % base);
}

string solution(int n, int t, int m, int p) {
    string answer = "";
    string preNumStr;
    int preNum = 0, cnt = 0, order = 0;
    int i;
    
    while(cnt != t) {
        preNumStr = chgBase(n, preNum++);	// preNum = 현재 n진수로 바꿀 숫자, 0부터 시작
        for(i = 0; i < preNumStr.length(); i++) {
            order = order % m;
            if(order + 1 == p) {	// 자신의 차례와 같으면
                cnt++;	// 미리 구할 숫자의 현재 개수
                answer += preNumStr[i];	// 현재 변환된 n진수 숫자의 일부분 정답에 추가
                order++;	// 다음 순서로
                if(cnt == t) break;	// 미리 구할 숫자의 개수와 같으면 종료
            }
            else order++;
        }
    }
    
    return answer;
}

'Programming Test' 카테고리의 다른 글

[Programmers] 다음 큰 숫자 (C++)  (0) 2022.10.09
[Programmers] 프린터  (0) 2021.06.24
[Programmers] 더 맵게  (0) 2021.05.18
[Programmers] 올바른 괄호  (0) 2021.05.03
[Programmers] 등굣길  (0) 2021.05.02
Comments