1 minute read



문제 풀이


이 문제는 진법 변환과 문제에서 요구하는 요구사항을 그대로 구현하면 되는 쉬운 문제이다.


아이디어 도출

먼저 핵심은 구헤야 할 문자열의 경우 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);
    }

}

회고



출처

- —

  • 해당 문제의 저작권은 문제를 만든이에게 있으며 자세한 내용은 문제 링크에서 참조바랍니다.