본문 바로가기
  • Thank you for visiting.....
프로그래머스 문제

[JAVA/프로그래머스] N진수 게임

by HyunSoooo 2024. 1. 26.
728x90

안녕하세요

'N진수 게임' 문제는 참가자들이 순차적으로 숫자를 말하며 , 10진수가 아닌 주어진 N진수로 변환 합니다. 문제에서 요구하는 답은 특정 참가자가 말하는 숫자를 미리 계산하는 것 입니다.

 

 

class Solution {
    public String solution(int n, int t, int m, int p) {
        String temp = conversion(t * m, n);
        StringBuilder sb = new StringBuilder();

        for (int i = 0, j = 1; i < temp.length(); i++) {
            if (t == sb.length()) {
                break;
            }
            if (p == j) {
                sb.append(temp.charAt(i));
            }
            j++;
            if (j > m) {
                j -= m;
            }
        }
        return sb.toString().toUpperCase();
    }

    public static String conversion(int number, int N) {
        StringBuilder sb = new StringBuilder();
        sb.append(0);
        StringBuilder resultSb = new StringBuilder();

        for (int i = 0; i <= number; i++) {
            int current = i;
            while (current > 0) {
                if (current % N < 10) {
                    sb.append(current % N);
                } else {
                    sb.append((char) (current % N - 10 + 'A'));
                }
                current /= N;
            }
            resultSb.append(sb.reverse().toString());
            sb = new StringBuilder();
        }

        return resultSb.toString();
    }
}
  • 진법 변환 로직: 'conversion' 함수는 주어진 숫자를 N진법으로 변환합니다. 숫자가 10 이상일 경우 알파벳 문자를 치환 합니다
  • 숫자 추출 : 'm' 과 튜브의 순서 'p'에 따라, 튜브가 말해야하는 숫자만을 순차적으로 추출합니다.
  • 문자열 처리 : 추출된 숫자들을 이어 붙여 최종 문자열을 형성합니다

시간 복잡도 : O(nm), 여기서 n은 구해야 하는 숫자의 개수 , m은 참가자의 수 입니다. 각 숫자의 변환과 추출 과정에서 반복문이 중첩되어 사용됩니다.

공간 복잡도 : O(nm)  , 변환 된 숫자들을 저장하기 위한 공간이 필요합니다.

728x90