풀이
[풀이]
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++로 다시 한번 풀어서 겨우 찾음;;;)
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스/C++] 연속된 부분 수열의 합 (0) | 2024.01.06 |
---|---|
[프로그래머스/C++] 에어컨 (feat.Python) (0) | 2024.01.06 |
[프로그래머스/C++] 전력망을 둘로 나누기 (0) | 2024.01.06 |
[프로그래머스/C++] PCCP 기출문제 4번 (0) | 2024.01.06 |
[프로그래머스/Python] 미로 탈출 (0) | 2024.01.06 |