본문 바로가기
Algorithm/프로그래머스

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

by code_pie 2024. 1. 6.
 
 
 

풀이

 

[풀이]

 

n진수로 변환만 잘 하면 되는 문제다.

 

진수 변환은 특정 숫자를 n으로 계속 나눠가면서 나머지를 구하고 처음 구한 나머지를 첫번째 자리, 두번째로 구한 나머지를 두번째 자리로 해 수를 만들어가면된다.

 

그리고 내가 부를 숫자를 구하기 위해서는 몇 명이 대답했는지 세면서, 내 차례인지 구분하고 만약 내 차례가 됐다면 그때 해당하는 수를 추가하면된다.

[아이디어 정리]

1. 숫자를 N진수로 변환한다.

2. N진수로 변환한 숫자를 한 자리씩 세면서, 내가 대답해야하는 숫자인지 구한다.

3. 내가 대답할 횟수만큼 숫자가 채워지면 코드를 종료한다.

 

 

Code

 

 

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

using namespace std;

string IntConvert(int N, int Num)
{
    string returnAns="";
    string conV="0123456789ABCDEF";
    int a;
    string str;
    while (true)
    {
        a=Num%N;
        str = conV[a];
        returnAns=str+returnAns;
        Num/=N;
        if (Num<N)
        {
            if (Num>0)
            {
                returnAns=conV[Num]+returnAns;
            }
            return returnAns;
        }
    } 
}


string solution(int n, int t, int m, int p) {
    string answer = "";
    int cnt=0; //0,1,2[1,0],3[1,1],4[1,1] 1,0 [1,1], [1,0,0] 
    int nowNum=0;
    string nowStr="";
    while (answer.length()<t)
    {
        nowStr = IntConvert(n, nowNum);
        nowNum+=1;
        for (int i=0; i<nowStr.length(); i++)
        {
            cnt+=1;
            if (cnt==p)
            {
                answer+=nowStr[i];
                if (answer.length()==t)
                {
                    return answer;
                }
            }
            if (cnt>=m)
            {
                cnt-=m;
            }
        }
    }
    return answer;
}

 


 
 

정말 어렵지 않은 문제인데 푸는데 2시간이 걸렸다.

C++로 풀었는데 중간에 A,B,C로 숫자를 변환하는 과정에서 다른 변환과 착각해 잘못 변환하고 있었는데 이걸 눈치채는데 너무 오래걸렸다... (왜 안되는지 확인하려고 Python으로 1번 C++로 다시 한번 풀어서 겨우 찾음;;;)

반응형