프로그래머스 | n진수 게임 (Java)

mul·2023년 3월 5일
0

코딩테스트연습

목록 보기
34/56

🔒 문제

프로그래머스 Lv.2 2018 KAKAO BLIND RECRUITMENT [3차] n진수 게임

🔑 해결

진법 n, 미리 구할 숫자의 개수 t, 게임에 참가하는 인원 m, 튜브의 순서 p가 주어질 때, 튜브가 말해야 하는 숫자 t개를 공백 없이 차례대로 나타낸 문자열을 return하는 solution함수를 작성하는 문제이다.

  1. 튜브가 말해야 하는 숫자를 구할 수 있을 때까지만 숫자를 n진수로 변환한다.
    1-1. numberToN()함수를 만들어 숫자를 n진수로 변환한다.
    1-2. char배열 AF를 생성하여 A부터 F까지 저장한다.
    1-3. 만약 변환해야하는 숫자(number)가 0이라면 "0"을 return
    1-4. number가 0이 아닐 때까지, number를 n으로 나눈 나머지(nn)과 number를 n으로 나눈 몫을 구한다.
    1-5. 나머지(nn)이 10이상이라면 AF에서 nn을 10으로 나눈 나머지의 인덱스에 저장된 값을 sb의 0번째 자리에 insert
    1-6. nn이 10미만이라면 nn을 sb의 0번째 자리에 insert
    1-7. number를 n으로 나눈 몫을 number에 저장하고 number가 0이라면 while문을 끝낸다.
    1-8. while문이 끝났다면 sb를 String으로 변환하여 return한다.
  2. numberToN()함수로 변환한 값을 sb에 append 한다.
  3. sb를 String형으로 변환한다(fsn).
  4. fsn에서 튜브가 말해야 하는 순서의 인덱스(i * m + p - 1)의 문자를 찾아 answer에 덧붙인다.

🔓 코드

class Solution {
     public String solution(int n, int t, int m, int p) {
        String answer = "";

        StringBuilder sb = new StringBuilder();
        int number = 0;
        while(sb.length() < t * m + p) {
        	sb.append(numberToN(n, number)); // number를 N진수로 변환한 것을 sb에 append
        	number++;
        }
        String fsn = sb.toString();
        
        for (int i = 0; i < t; i++) {
        	answer += fsn.charAt(i * m + p - 1); // 말해야 하는 순서의 숫자를 answer에 +
        }
        
        return answer;
    }
    
    private String numberToN(int n, int number) { // number를 n진수로 변환
    	String N = "";
    	StringBuilder sb = new StringBuilder();
    	char[] AF = {'A', 'B', 'C', 'D', 'E', 'F'};
    	
    	if (number == 0) // number가 0이라면 0 return
    		return "0";
    	
    	while(number != 0) {
    		int nn = number % n; // number를 n으로 나눈 나머지가
    		if (nn > 9) { // 10 이상 이라면
    			sb.insert(0, AF[nn%10]); // AF배열에 저장된 A~F를 찾아 sb에 insert
    		} else {
    			sb.insert(0, nn); // 10 미만이라면 나머지를 sb에 추가
    		}
    		number = number / n;
    	}
    	
    	N = sb.toString();
    	
    	return N;
    }
}

0개의 댓글