코딩테스트/Java

(2018카카오) n진수 게임 Java

SK_MOUSE 2021. 1. 25. 14:17
반응형

실제로 존재하는 술게임이다..;;

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

 

출처 : 나무위키

 

진수변환에 관한 문제이다.

 

 

  • 10~15는 각각 대문자 A~F로 출력한다.
String[] alphaForMoreThanTen = {"A","B","C","D","E","F"};

위와 같이 ABCDEF 사전을 만들어놓고, 아래와 같이 나머지값이 10~15인 값에 대하여 대체텍스트를 대입한다.

 if(remain>=10&&remain<=15){
                    subBinary.append(alphaForMoreThanTen[remain-10]);
 }else{
                    subBinary.append(remain);
}
  • StringBuilder를 이용하여 효율성을 높인다.

일반 Stirng a = ""; 와 같이 선언하여 추가할시에 효율성 실패가 뜬다.

StringBuilder를 사용하지 않는경우.

따라서 StringBuilder를 적극 활용 할 것을 추천한다.

 

 

class Solution {
    public String solution(int n, int t, int m, int p) {
        StringBuilder answer = new StringBuilder("");
        StringBuilder s= new StringBuilder("0");
        String[] alphaForMoreThanTen = {"A","B","C","D","E","F"};

        int num=1;

        while(s.length()<=m*t){
            StringBuilder subBinary = new StringBuilder("");
            int N = num;
            while(N>0){
                int remain = N%n;
                N /= n;

                if(remain>=10&&remain<=15){
                    subBinary.append(alphaForMoreThanTen[remain-10]);
                }else{
                    subBinary.append(remain);
                }
            }
            s.append(subBinary.reverse());
            num++;
        }

        for(int i=0; i<t; i++){
            answer.append(s.charAt(i*m+p-1));
        }

        return answer.toString();
    }
}

 

 

참고로 진수변환 알고리즘은 아래 글에서 설명하겠다.

skmouse.tistory.com/entry/Java-%EC%9E%90%EB%B0%94-%EC%A7%84%EC%88%98%EB%B3%80%ED%99%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98

 

[Java] 자바 진수변환 알고리즘

10진수->2/8/16진수 Integer.toBinaryString(바꿀문자열); Integer.toOctalString(바꿀문자열); Integer.toHexString(바꿀문자열); int i = 127; String binaryString = Integer.toBinaryString(i); //2진수 Strin..

skmouse.tistory.com

 

반응형