프로그래머스 - n진수 게임(카카오 기출) (java)

Mendel·2024년 5월 20일

알고리즘

목록 보기
47/85

문제 접근

n,t,m,p 가 순차적으로 매개변수로 주어진다.
각 매개변수의 의미는 다음과 같다.

  • n은 이번 문제의 n진수
  • t는 미리 구할 갯수
  • m은 총 참여 인원수
  • p는 튜브(주인공)의 차례 순서

위 정보들을 토대로, 튜브가 외쳐야할 숫자들을 t개 미리 구하면 된다.
잘 생각해보면, 그냥 숫자 0부터 시작해서 계속 n진수로 변환한 값을 results배열에 char단위로 한글자씩 집어넣고, 튜브의 순서에 대응하는 인덱스들을 차례로 순회하면서 t개 선택하면 된다.

이때, n진수로 변환하는 과정에서 스택을 쓰면 좀 더 시간복잡도 측면에서 효율적인 처리를 할 수 있다.
나같은 경우는 t*m 개의 차례에 불러야 할 숫자의 정보들을 미리 구했다.

문제 풀이

import java.util.*;

class Solution {
    public String solution(int n, int t, int m, int p) {
        StringBuilder sb = new StringBuilder();
        int targetSize = t * m;
        ArrayList<Character> results = new ArrayList();
        int size = 1;
        int number = 1;
        results.add('0');

        while (size < targetSize) {
            Stack<Character> st = new Stack();
            int num = number;
            while (num > 0) {
                int remain = num % n;
                num = num / n;
                if (remain >= 10) {
                    st.push((char) ('A' + remain - 10));
                } else {
                    st.push((char) ('0' + remain));
                }
            }
            size += st.size();
            while (!st.isEmpty()) {
                results.add(st.pop());
            }
            number++;
        }


        for (int i = p - 1, c=0; i < size && c<t; i += m, c++) {
            sb.append(results.get(i));
        }

        return sb.toString();
    }
}

profile
이것저것(안드로이드, 백엔드, AI, 인프라 등) 공부합니다

0개의 댓글