본문 바로가기
알고리즘/PROGRAMMERS

n진수 게임(Lv.2)

by 현대타운301 2024. 3. 28.

 


 

문제 설명

 

 

 

입출력 예시

 

 

요약

양의 정수(0포함) 하나씩 n진수로 변환 후 내 순서의 숫자로만 이루어진 배열 만들기

 


 

풀이

 

접근 방식

1. n진수 변환 메소드 trans()

  → 0부터 1씩 증가시키며 n진수로 변환

  → 10~15는 A~F로 변환

 

2. 내 차례에 해당하는 숫자만 고르기

  → 인원수가 m이라면, int i = 0부터 시작하는 for문에서 i를 m으로 나눈 나머지에 1을 더한 수 (i % m + 1)가 자신의 차례와 같은지 비교

 

3. 턴 수가 넘어간 문자는 자르기

  → t번 차례까지만 구하면 되므로, 그 이상의 문자들은 substring으로 제거

 


 

코드리뷰

 

import java.util.*;

class Solution {
    int max;	// 변환할 n진수의 max length
    
    public String trans(int n) {	// n진수 변환 메소드
        List<String> list = new ArrayList<>();
        int num = 0;	// 0부터 시작
        String result = "";

        while(true) {	// 변환한 최종 문자열의 길이가 max 이상이 될 때까지 반복
            int number = num;	// 지역 변수 number에 num 담기
            while(true) {	// number 나누기 n 의 몫이 0이 될 때까지 반복
                if(number / n == 0) {
                    list.add(0, String.valueOf(number % n));
                    break;	// 몫이 0이라면 list에 담고 탈출
                } else {
                    list.add(0, String.valueOf(number % n));
                    number /= n;	// 몫이 0이 아니라면 list에 담고 number /= n 실행
                }
            }
            for(String str : list) {	// 10~15는 A~F로 변환
                if(str.equals("10")) {
                    str = "A";
                } else if(str.equals("11")) {
                    str = "B";
                } else if(str.equals("12")) {
                    str = "C";
                } else if(str.equals("13")) {
                    str = "D";
                } else if(str.equals("14")) {
                    str = "E";
                } else if(str.equals("15")) {
                    str = "F";
                }
                result += str;	// list의 숫자를 차례대로 담아서 n진수 만들기
            }
            list.clear();	// 다음 양의 정수(number)를 변환한 문자를 담기위해 list 비우기
            if(result.length() >= max) {	// 변환한 최종 문자열의 길이가 max 이상이면 탈출
                break;
            } else {	// 아니면 다음 양의 정수 변환 시작
                num++;
            }
        }
        return result;
    }
    
    public String solution(int n, int t, int m, int p) {
        max = m * t;	// 변환할 문자열의 총 길이는 인원수(m)와 내가 게임에 임하는 턴(t)의 곱으로 설정
        String result = trans(n);

        String answer = "";
        for(int i = 0; i < result.length(); i++) {
            if((i % m) + 1 == p) {	// 변환된 문자열에서 나의 턴에 속하는 문자만 추출
                answer += result.charAt(i);
            }
        }
        return answer.substring(0, t);	// 정해진 턴(t)의 길이 만큼만 잘라서 return
    }
}

 

 

 

'알고리즘 > PROGRAMMERS' 카테고리의 다른 글

대충 만든 자판(Lv.1)  (0) 2024.04.11
상품을 구매한 회원 비율 구하기(DB)  (1) 2024.03.28
게임 맵 최단거리(Lv.2)  (0) 2024.03.27
k진수에서 소수 개수 구하기(Lv.2)  (0) 2024.03.25
압축(Lv.2)  (0) 2024.03.25