[문제풀이] N진수 게임
업데이트:
2018 Kakao Blind Recruitment 기출 문제
문제 링크 : N진수 게임
풀이 시간 : 40분
1. 문제 풀이
1) 먼저 0부터 어떤 수(num)까지 필요한지 찾는다.
2) 1부터 시작하여 N진법으로 변환하여 붙여준다(temp). 2-1) 미리 구할 숫자의 갯수와 인원 수를 곱하여 그 값보다 temp의 길이가 커지면 종료한다.
3) 시작(p)순서부터 인원 수(m)만큼 건너면서 미리 구할 숫자들을 저장한다.
2. 소스 코드
static public String solution(int n, int t, int m, int p) {
String answer = "";
// N진수로 변환된 숫자들의 최대 길이
int size = t*m;
// N진수로 변환된 숫자들
String temp = "0";
// 숫자가 어디까지 필요한지 구한다.
int num =1;
while(temp.length()<size) {
// N진수 변환 되었을 때 숫자들을 붙여서 저장
temp +=conv(num,n);
num++;
}
// 처음 p번째 부터 사람 수만큼 건너뛰면서 말해야하는 숫자 저장
for (int i = p-1; answer.length()!=t; i=i+m) {
answer +=temp.charAt(i);
}
return answer;
}
static String conv(int num, int n) {
String result = "";
// 나머지 연산을 통해 각 자리 수에 맞는 값 저장
while(num>0) {
int remainder = num%n;
// 10진법 이상일 때, 나머지가 10이상이면 A,B 순으로 저장
if(10<=remainder) {
result = (char) ('A'+(remainder-10))+result;
}else {
result =remainder+result;
}
num /=n;
}
return result;
}
3. 후기
처음에 예시로 7을 3진법으로 계산해봤는데
21이 맞는데 101로 생각해서
N진법 계산하는 방법이라 달라서 시간을 버렸다.