algorithm/프로그래머스
[프로그래머스] n 진수 게임 (09.02)
자바왕세자
2020. 9. 2. 23:06
문제
https://programmers.co.kr/learn/courses/30/lessons/17687
코딩테스트 연습 - [3차] n진수 게임
N진수 게임 튜브가 활동하는 코딩 동아리에서는 전통적으로 해오는 게임이 있다. 이 게임은 여러 사람이 둥글게 앉아서 숫자를 하나씩 차례대로 말하는 게임인데, 규칙은 다음과 같다. 숫자를 0�
programmers.co.kr
접근법
알고리즘 요즘 너무 어렵다..
콘이 t번 외치려면 적어도 t*m(콘이 외칠 횟수 x 참가인원 수) 만큼은 모두 알아야 한다.
0부터 시작해서 계속 n진수로 변환을 하면서 길이를 계산하여 충분한 길이가 되었을 때 멈춘다.
n진수로 변환된 문자열에서 콘이 외쳐야할 순서의 문자들을 결과 StringBuiler에 append 해준다.
변환하는 로직은 메서드로 따로 빼서 구현했다.
처음에 0은 그냥 0이 되므로 res에 0을 append해준다.
그 후 1부터 n진수를 계산해 올라가면서 res에 append해준다.
n진수로 변환하는 로직에 대한 설명은 주석에 포함했다.
코드
class Solution {
public String solution(int n, int t, int m, int p) {
StringBuilder answer = new StringBuilder();
String convertedStr = convert(n, t, m);
for(int i=p-1;i<convertedStr.length();i +=m){
if(answer.length() == t)
break;
answer.append(convertedStr.charAt(i));
}
return answer.toString();
}
public String convert(int n, int t, int m){
StringBuilder res = new StringBuilder();
res.append(0);
int i=1;
while(true){
int num = i;
StringBuilder sb = new StringBuilder();
while(num > 0){
//tmp에 나머지 값을 저장한 후
int tmp = num%n;
//tmp 값이 10이상이면 알파벳 출력하고
//tmp 값이 10이 안되면 순서대로 sb에 append
sb.append(tmp >= 10 ? String.valueOf((char)('A' + (tmp-10))) : tmp);
num/=n;
}
i++;
//n진수를 계산하고 나서 그 결과의 역순을 res에 append
res.append(sb.reverse());
if(res.length() > t*m)
break;
}
return res.toString();
}
}