[lv2] n진수 게임

·2023년 4월 28일
0

알고리즘 문제 풀이

목록 보기
118/165
post-thumbnail

풀이 요약

구현

풀이 상세

  1. 해당 문제의 중요한 점은 크게 2가지 이다.

    • 십진수를 nn 진수로 변환하는 코드를 구현해야 한다.
    • mmpp 를 기반으로 자신의 차례가 돌아올 때 해당 글자를 문자에 추가해야 한다.
  2. nn 의 범위는 16 이기에 11 진수 부터 16진수까지 구할 값들을 배열에 저장하여, 나눗셈 연산을 통해 nn 진수 값을 구한다.

  3. 현재 자신의 차례를 확인하는 방법은 현재 글자수에서 총 플레이어를 나눴을 때의 나머지 값과 ppmm 을 나눴을 때의 나머지 값이 동일한 경우이다.

배운 점

  • 수학 구현 문제는 식을 도출하기 까지 답이 오래 걸린다. 그런데 아이러니하게도 카카오는 또 이런 문제를 좋아한다ㅠ
#include <string>
#include <vector>
#include <iostream>
using namespace std;
char arr[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
string go(int num, int n) {
    if(num==1 || num==0) return to_string(num);
    string str;
    str = arr[num%n];
    int d = num/n;
    return (d == 0 ?  "" : go(num/n, n))+str;
}
string solution(int n, int t, int m, int p) {
    string answer = "";
    int num = 0, idx = 1;
    while(true) {
        string str = go(num++, n);
        for(int j=0; j<str.size(); j++) {
            if((idx%m)==(p%m)) {
                answer+=str[j];
                if(answer.size() == t) break;
            }
            idx++;
        }
        if(answer.size() == t) break;
    }
    
    return answer;
}
profile
새로운 것에 관심이 많고, 프로젝트 설계 및 최적화를 좋아합니다.

0개의 댓글