✔ n진수 게임
문제 분석하기
문자열에 n진수의 숫자를 저장한 후 이를 하나씩 잘라 n진수로 변환해서 반환하도록 함
예) 2진수 게임에 참여하는 인원이 2명이고 튜브의 순서가 1일 때, 미리 4개의 숫자를 구해보자.
2진수 = 0 + 1 + 10 + 11 + 100 + 101 + 110 + ...
0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0 ... 이므로 "0111"
손으로 풀어보기
- 문자열에 0부터 m * t개를 n진수로 저장
- 문자열에서 튜브의 순서에 해당하는 글자만을 추출하여 반환
슈도코드 작성하기
n(진법)
t(미리 구할 숫자의 개수)
m(게임에 참가하는 인원)
p(튜브의 순서)
answer(튜브가 말해야 하는 숫자 StringBuilder)
game(n진법으로 미리 구해야 하는 숫자들 StringBuilder)
for(i -> 0부터 m * t까지) {
game에 i를 n진수 변환하여 대문자로 저장
}
for(i -> p - 1부터 answer의 길이가 t보다 작을 동안, i를 m만큼 증가) {
answer에 game의 i번째 글자를 저장
}
answer을 문자열로 변환하여 반환
코드 구현하기
/**
* 17687) n진수 게임
*/
public class L034_17687 {
// n(진법)
// t(미리 구할 숫자의 개수)
// m(게임에 참가하는 인원)
// p(튜브의 순서)
public String solution(int n, int t, int m, int p) {
// answer(튜브가 말해야 하는 숫자 StringBuilder)
StringBuilder answer = new StringBuilder();
// game(n진법으로 미리 구해야 하는 숫자들 StringBuilder)
StringBuilder game = new StringBuilder();
// game에 i를 n진수 변환하여 대문자로 저장
for (int i = 0; i <= m * t; i++) {
game.append(Integer.toString(i, n).toUpperCase());
}
// answer에 t만큼 game의 i번째 글자를 저장
for (int i = p - 1; answer.length() < t; i += m) {
answer.append(game.charAt(i));
}
// answer을 문자열로 변환하여 반환
return answer.toString();
}
// 테스트 케이스
public static void main(String[] args) {
L034_17687 solution = new L034_17687();
int n = 16;
int t = 16;
int m = 2;
int p = 1;
String result = solution.solution(n, t, m, p);
System.out.println(result);
}
}
'Coding Test > Java 알고리즘 실전' 카테고리의 다른 글
[42890] 후보키 (0) | 2024.01.17 |
---|---|
[42888] 오픈채팅방 (0) | 2024.01.16 |
[17686] 파일명 정렬 (0) | 2024.01.15 |
[17684] 압축 (0) | 2024.01.15 |
[17683] 방금그곡 (0) | 2024.01.14 |