코딩테스트/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

 

반응형