[Java] 프로그래머스(level-2) - N진수 게임
문제 풀이
이 문제는 진법 변환과 문제에서 요구하는 요구사항을 그대로 구현하면 되는 쉬운 문제이다.
아이디어 도출
먼저 핵심은 구헤야 할 문자열의 경우 t개인데, m명에 따라서 순서가 생기기 때문에 t*m
만큼을 순회하며 p번째 순서의 문자를 선택해야 한다. 이를 토대로 생각해낸 아이디어는 다음과 같다.
- 0부터
t*m
번만큼 순회하며 해당 인덱스(숫자)를 n진법으로 변환한 후, 이를 빈 문자열에 넣어준다. - t*m번 만큼의 순회가 종료되면, n진법으로 변환된 숫자들이 문자열에 담겨있는데 이 문자열을 한자리 수 배열로 분할한다.
n진법으로 변환된 숫자가 두자리 수 이상일 경우를 고려하기 위해 문자열에 담은 후 한자리 수로 분할한다.
- 한자리 수로 분할된 배열을 순차적으로 탐색하며
인덱스(i) % 인원(m)
의 값이순서(p)-1
값과 같을 경우 선택한다.p-1과 비교하는 이유는 인덱스가 0부터 시작하기 때문이다.
문제 풀이를 위해 작성한 코드는 아래와 같다.
작성 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import java.util.*;
class Solution {
public String solution(int n, int t, int m, int p) {
String answer = "";
String str = "";
// 진법 변환 후의 문자가 두자리 수 이상의 문자열일 경우를 고려하기 위해
// 문자열에 변환된 모든 문자를 담은 후 split 배열을 만든다.
for(int i=0; i<t*m; i++) {
str += Integer.toString(i, n).toUpperCase();
}
String[] arr = str.split("");
// m명중 p번째 순서마다의 문자를 선택하여 담는다.
for(int i=0; i<t*m; i++) {
if(i%m == p-1) {
answer += arr[i];
}
}
return answer;
}
public static void main(String[] args) {
Solution sol = new Solution();
// int n = 2;
// int t = 4;
// int m = 2;
// int p = 1;
int n = 16;
int t = 16;
int m = 2;
int p = 2;
sol.solution(n, t, m, p);
}
}
회고
출처
- —
- 해당 문제의 저작권은 문제를 만든이에게 있으며 자세한 내용은 문제 링크에서 참조바랍니다.