반응형
https://programmers.co.kr/learn/courses/30/lessons/17687
[ 문제풀이 ]
이전에 풀었던 비밀지도 문제처럼 10진수를 n진수로 변환하는 방법을 알고 있다면 쉽게 해결할 수 있는 문제이다.
주어진 10진수의 수가 0보다 클 때까지 n으로 계속해서 나눠주면 된다. 출력할 때는 역순으로 출력해준다.
문자열의 길이가 내가 미리 구해야 할 숫자가 나오는 길이보다 클 때까지 모든 정수를 변환해서 문자열에 붙여준 후 내 턴에 맞는 문자를 출력해주면 된다.
mport java.util.*;
class Solution {
//10보다 큰 수는 영어로 변환해야하기 때문에
char[] ch = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
public String solution(int n, int t, int m, int p) {
//0은 나누기가 안되기 때문에 예외처리하고 1부터 시작
StringBuilder sb = new StringBuilder("0");
int num = 1;
while (true) {
int now = num;
StringBuilder temp = new StringBuilder();
//10진수 now를 n진수로 변환
while (now > 0) {
int mod = now % n;
now /= n;
//제일 앞에 삽입해줘야함
temp.insert(0, Character.toString(ch[mod]));
}
sb.append(temp);
//문자열의 길이가 미리 구해야할 숫자가 나오는 길이보다 크면 종료
if (sb.length() >= t * m) break;
num++;
}
StringBuilder answer = new StringBuilder();
//나의 턴인 문자를 정답에 삽입
for (int i = p, j = 0; j < t; i += m, ++j) {
answer.append(sb.charAt(i - 1));
}
return answer.toString();
}
}
이후에 찾아보니 10진수를 n진수로 변환할 수 있는 간단한 라이브러리가 존재하였다.
Integer.toString(i, n) //10진수 i를 n진수로 변환 (문자열)
이를 활용하면 굉장히 쉽게 해결할 수 있다. 다만, Integer.toString() 메서드는 'A'~'Z'를 'a'~'z'로 변환해주기 때문에 원하는 출력을 위해서 대문자로 변환해줘야 한다.
import java.util.*;
class Solution {
public String solution(int n, int t, int m, int p) {
StringBuilder answer = new StringBuilder();
StringBuilder sb = new StringBuilder();
for (int i = 0; sb.length() < t * m; ++i) {
//10진수 i를 n진수로 변환
//단, 'A'~'F'가 'a'~'z' 소문자로 변환되기 때문에
//이후에 대문자로 변환해줘야함
sb.append(Integer.toString(i, n));
}
for (int i = p, j = 0; j < t; i += m, ++j) {
answer.append(sb.charAt(i - 1));
}
//대문자로 변환
return answer.toString().toUpperCase();
}
}
반응형
'Problem Solving > 카카오 블라인드 기출' 카테고리의 다른 글
2019 - 실패율 (0) | 2021.08.08 |
---|---|
2019 - 오픈채팅방 (0) | 2021.08.08 |
2018 - [3차] 파일명 정렬 (0) | 2021.08.07 |
2018 - [3차] 자동완성 (0) | 2021.08.07 |
2018 - [3차] 압축 (0) | 2021.08.07 |
댓글