어제의 나보다 성장한 오늘의 나

[프로그래머스][Level2][Java] n진수 게임 본문

알고리즘/프로그래머스(Programmers)

[프로그래머스][Level2][Java] n진수 게임

NineOne 2020. 12. 21. 23:56

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

 

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

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

programmers.co.kr

문제풀이

진짜로 프로그래머스는 문제를 잘 읽고 이해하는데 시간을 많이 써야 된다고 생각된다.

2진법부터 16진법까지 구하는 걸 2,8,10,16 으로 착각해버려서 시간을 많이 허비하였다.

1부터 증가하는 숫자를 진법으로 바꿔주는 것을 확인하는 size 변수를 하나두어서 size가 0이 될때마다

즉! 사람이 변환한 진법 숫자를 다 말한 순간 숫자를 해당 진법으로 바꿔준다. 

차례대로 말하는 전체 순서를 index변수로 둬서 (index%m == p-1) 튜브의 차례때마다 기록하였다. 

코드

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

class Solution {
    public String solution(int n, int t, int m, int p) {
        String answer = "";
        
        int index =0;   // 차례
        int number =0;
        int size =0;
        String list = "";
        while(true){
            if(size ==0) {
                list = makeJinsu(n, number).toUpperCase();
                size = list.length();
                number++;
            }
            
            if(index%m == p-1) {
                answer += list.charAt(list.length() - size);
            }
            
            index++;
            size--;
            if(answer.length() == t) break;
            
        }
        return answer;
    }
    
 	public String makeJinsu(int n, int number){
		List<Character> temp = new ArrayList<>();
		String t = "";
		if(number == 0) t ="0";
        while(number != 0){
            int a = number%n;
            if( a > 9){
                temp.add((char) (55 +a));
            }else{
            	temp.add((char)(a +'0'));
            }
            number /= n;
        }
        Collections.reverse(temp);
        
        for(int i =0; i<temp.size(); i++) {
        	t += temp.get(i);
        }
        
        return t;
    }
}
Comments