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

민지킴·2021년 4월 22일
0

프로그래머스

목록 보기
20/42
post-thumbnail

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/17687

문제 풀이

11~16진법의 경우 두자수를 A,B,C,D,E,F를 사용해서 표현해야한다.
changeNum() 메소드를 통해
들어온 숫자에 대해서 해당 진법으로 표현한수를 return한다.
나머지 처리가 가장 낮은자리 순서부터 되기 때문에 이를 stack에 담았다가 꺼내면 가장 높은 자리수부터 나온다.


코드

import java.util.*;

class Solution {
    public String solution(int n, int t, int m, int p) {
        String answer = "";
        //숫자는 0부터 시작
        int cnt =0;
        String str = "";
        
        //str의 길이는 t*m
        while(str.length()<t*m){
            String temp = changeNum(cnt, n);
            str+=temp;
            cnt++;
        }
        //System.out.println(str);
        int idx = p-1;
        
        while(true){
            answer+=str.substring(idx,idx+1);
            idx +=m;
            if(answer.length()==t){
                break;
            }
        }
        return answer;
    }
    
    public String changeNum(int cnt, int n){
        String dictionary = "ABCDEF";
        if(cnt==0){
            return "0";
        }
        Stack<String> st = new Stack();
        while(cnt>0){
            int res =cnt%n;
            if(n>=10 && 10<=res && res<n){
                st.push(dictionary.substring(res-10, res-10+1));
            }else{
                st.push(String.valueOf(res));
            }
            cnt = cnt/n;
        }
        
        String result = "";
        while(!st.isEmpty()){
            result+=st.pop();
        }
        return result;
    }
}
profile
하루하루는 성실하게 인생 전체는 되는대로

0개의 댓글