알고리즘 문제 풀기
[프로그래머스 17687] 3진수 게임 (java)
Solu-
2021. 5. 19. 19:00
나의 코드
class Solution {
public String solution(int n, int t, int m, int p) {
String answer = "";
String game = "0";
int max = t * m; // 최대 갯수
int count = 0;
while(game.length() <= max) {
count++;
String temp = ""; // 한 숫자의 값을 담을 문자열
for (int i = count; i != 0; ) {
if (i % n > 9) {
char ch = (char)(55 + (i % n)); // 'A' - 10 + 나머지
temp += Character.toString(ch);
}
else {
temp += Integer.toString(i % n);
}
i /= n;
}
StringBuffer sb = new StringBuffer(temp);
game += sb.reverse().toString();
}
// 자신의 차례에 맞는 아이템만 추출
int start = p-1;
for (int i = 0; i < t; i++) {
answer += game.charAt(start);
start += m;
}
return answer;
}
}
각 자릿수를 구하기 위해 나누기 -> (혹시 10 이상일 경우 알파벳으로 표현) -> 문자열 뒤집기를 통해 각 자릿수를 구해서 전체 게임에서 나오는 경우를 계산한다.
그 다음, 자신의 차례에 맞는 글자만 뽑아서 정답에 더해서 풀이했다.
모범 답안
class Solution {
public String solution(int n, int t, int m, int p) {
String answer = "";
int startNum = 0;
String targetString = new String();
String retString = new String();
while (targetString.length() < m * t) {
targetString += Integer.toString(startNum++, n);
}
for (int i=0; i<t; i++) {
retString += targetString.charAt(p - 1 + i * m);
}
answer = retString.toUpperCase();
return answer;
}
}
나의 코드에서 while문을 통해 복잡하게 한 처리 과정을 Integer.toString(num, radix)
를 통해 깔끔하게 해결했다. 일반적으로 toString(num)만 사용하는데
, radix를 주어 더욱 간편하게 해결하는 방법도 알게 되었다. 덕분에 차례별 글차 추출도 더욱 간편해졌다.
이렇게 간결한 코드를 짜도록 노력해야겠다..