알고리즘 문제 풀기

[프로그래머스 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를 주어 더욱 간편하게 해결하는 방법도 알게 되었다. 덕분에 차례별 글차 추출도 더욱 간편해졌다.
이렇게 간결한 코드를 짜도록 노력해야겠다..