1. 문제

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

 

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

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

programmers.co.kr

2. 접근방법

처음엔 수리적으로 접근해보려 했는데

m 과 t 가 작으니 모든 숫자를 구하고 각 순서에 해당하는 수를 꺼내오는 식으로 풀이했다.

 

각 진법에 맞춰 1부터 쭉 변환하여 list에 저장한다.

list의 크기가 m*t, 즉 t순번이 모두 돌때까지만 저장하고

 

이제 튜브 순서에 맞는 숫자들만 꺼내서 저장하여 출력하면 된다.

 

 

3. 자바 코드

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

public class P17687n진수게임 {

	public String solution(int n, int t, int m, int p) {
		String answer = "";
		List<Character> numList = new ArrayList<Character>();
		int num = 1;
		numList.add('0');
		while (numList.size() < t * m) {
			int target = num;
			String s = "";
			while (target != 0) {
				int mod = target % n;
				mod = mod >= 10 ? 'A' + mod - 10 : '0' + mod;
				s = (char) mod + s;
				target = target / n;
			}
			for (char c : s.toCharArray())
				numList.add(c);
			num++;
		}
		for (int i = p-1; answer.length() < t; i += m)
			answer += numList.get(i);

		return answer;
	}
}

4. 마치며

진법 변환 후 0~F 까지 수를 배열에 저장해서

매핑하는 방식의 풀이가 있었는데

이게 가장 깔끔한 것 같다.

 

 

+ Recent posts