알고리즘 공부/프로그래머스

(Java)프로그래머스 코딩테스트 연습 - 2018 KAKAO BLIND RECRUITMENT - [3차] n진수 게임

HRuler 2020. 12. 9. 21:37

1. 문제

https://programmers.co.kr/learn/courses/30/lessons/17687?language=java

 

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

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

programmers.co.kr

2. 나의 풀이

class Solution {
    public String solution(int n, int t, int m, int p) {
        String answer = "";
        String susja = "0";
        for(int i = 1; i <= (t * m); i = i + 1) {
        	int imsi = i;
        	String su = "";
        	while(imsi != 0) {
        		if(imsi % n < 10) {
        			su = (imsi % n) + su;
        		}else {
        			switch(imsi % n) {
        				case 10 :
        					su = "A" + su;
        					break;
        				case 11 :
        					su = "B" + su;
        					break;
        				case 12 :
        					su = "C" + su;
        					break;
        				case 13 :
        					su = "D" + su;
        					break;
        				case 14 :
        					su = "E" + su;
        					break;
        				case 15 :
        					su = "F" + su;
        					break;
        			}
        		}
        		imsi = imsi / n;
        	}
        	susja += su;
        	//System.out.println("susja : " + susja);
        }
        String [] arr = susja.split("");
        for(int i = 0; i < (t * m); i = i + 1) {
        	if(p - 1 == i % m) {
        		answer += arr[i];
        	}
        }
        return answer;
    }
}

3. 다른 사람 풀이

import java.util.Stack;

class Solution {
  static char[] numeralSystem = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};    
  public String solution(int n, int t, int m, int p) {
      String answer = "";
      char[] sequence = new char[t * m];
      Stack<Character> stack = new Stack<>();
      int count = 0;
        int number = 0, temp = number;
        int limit = m * t;

        while(count < limit) {
            if(temp < n) {
                sequence[count++] = numeralSystem[temp];
                while(!stack.isEmpty() && count < limit) {
                    sequence[count++] = stack.pop();
                }
                temp = ++number;
            }else {
                stack.push(numeralSystem[temp % n]);
                temp /= n;
            }
        }
        StringBuilder sb = new StringBuilder();
        for(int i = p - 1; i < sequence.length; i+=m) {
            sb.append(sequence[i]);
        }
      return answer = sb.toString();
  }
}