하루에 한 문제

[프로그래머스-lv2 2018 KAKAO BLIND RECRUITMENT] n진수 게임 -Java 본문

알고리즘/프로그래머스 lv2 다시풀기

[프로그래머스-lv2 2018 KAKAO BLIND RECRUITMENT] n진수 게임 -Java

dkwjdi 2021. 3. 21. 23:44

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

 

코딩테스트 연습 - [3차] n진수 게임

N진수 게임 튜브가 활동하는 코딩 동아리에서는 전통적으로 해오는 게임이 있다. 이 게임은 여러 사람이 둥글게 앉아서 숫자를 하나씩 차례대로 말하는 게임인데, 규칙은 다음과 같다. 숫자를 0

programmers.co.kr

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

	    	int number=-1;
	    	int turn=1;
	        while(true) {
	        	
	        	String numbers = CalJinsu(++number,n,replace);
	        	
	        	for(int i=0; i<numbers.length(); i++) {
	        		if(turn==p) { //튜브 순서라면 
	        			answer.append(numbers.charAt(i));
	        			if(--t==0) return answer.toString();
	        		}
	        		if(++turn==m+1) turn=1;
	        	}
	        }
	        
	    }

		private String CalJinsu(int quotient,int n, String[] replace) {
			if(quotient==0) return "0";
			
			StringBuilder sb= new StringBuilder();
			while(quotient>0) {
        		int remain=quotient%n;
        		quotient/=n;
        		
        		if(remain>=10) {
        			sb.append(replace[remain-10]);
        		}
        		else {
        			sb.append(remain);
        		}
        	}
			return sb.reverse().toString();
		}
	}

소요시간 : 26분

 

 

우선 10진수 숫자를 n진수로 바꾸는 로직부터 살펴보면

 

1. 몫이 0이 들어오면 0을 return 한다

2. 몫이 0이 아니라면 몫/진수 -> 나머지  (StringBuilder에 저장)

2. 몫이 0과 같아지면 StringBuilder를 reverse 해서 return 해줍니다.

 

그리고 A~F로 매칭해야 하는 숫자는

replace라는 배열을 사용했습니다. replace 배열은 0번 Index부터 A, B, C, D, E, F 가 들어있습니다.

만약 나머지가 10보다 크다면 replace [remain-10]을 해주면 알아서 잘 찾아갑니다~

 

 

이렇게 n진수로 바꾸었다면 사실상 끝났다고 볼 수 있습니다.

 

그냥 for문 돌면서 튜브의 턴이라면 t를 -- 해주면서 Stringbuilder에 담아줍니다

그리고 t가 0이 되면 끝~

Comments