프로그래머스 - [3차] n진수 게임

leehyunjon·2022년 5월 16일
0

Algorithm

목록 보기
33/162

[3차] n진수 게임 : https://programmers.co.kr/learn/courses/30/lessons/17687#


Problem


Solve

n진수로 변경하는 법을 알면 쉽게 풀수 있다. 하지만 문제를 잘못 이해해서 0~1000까지의 숫자를 n진수로 변경해서 런타임이 발생하는걸 못잡아서 시간이 걸렸다.

문제 풀이는 아래와 같다.

  1. 숫자를 n진수로 저장한 문자열의 길이가 t(미리 구할 숫자의 갯수)*m(게임에 참가하는 인원)이 될때까지 n진수로 변경을 한다.
  2. p를 m씩 증가시키며 p-1에 위치하는 숫자 t개를 반환한다.

Code

class Solution {
    public String solution(int n, int t, int m, int p) {
        String numbers;
        StringBuilder numbersBuilder = new StringBuilder();
        numbersBuilder.append("0");
        int num=1;
        //n진수로 변경한 문자열의 길이가 t*m이 될때까지만 변환.
        while(numbersBuilder.toString().length()<=t*m){
            numbersBuilder.append(conversion(num++,n));
        }
        numbers = numbersBuilder.toString();
        
        StringBuilder answer = new StringBuilder();

		//말해야하는 숫자 저장
        for(int i=0;i<t;i++){
            answer.append(numbers.charAt(p-1));
            p += m;
        }

        return answer.toString();
    }
    
    //n진수 전환
    String conversion(int num, int N){
        StringBuilder sb = new StringBuilder();
        int current = num;
        
        //현재 숫자가 0보다 작을때까지 반복
        while(current > 0){
        	//현재 숫자를 N으로 나누었을때 10보다 작다면 나머지의 값을 그대로 저장
            if(current%N < 10){
                sb.append(current%N);
            // 10이상으로 넘어갔을 경우 'A'로 표현해야하기 때문에
            // 나머지값에서 10을 빼고 아스키코드를 이용해 'A'부터 'F'까지의 값을 구할수 있다.
            }else{
                sb.append((char)(current%N-10+'A'));
            }
            current/=N;
        }
        sb.reverse();
        return sb.toString();
    }
}

Result


Reference

profile
내 꿈은 좋은 개발자

0개의 댓글