본문 바로가기

PS/프로그래머스

프로그래머스 2018 KAKAO BLIND RECRUITMENT - N진수 게임[JAVA]

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/17687

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이여부: O

코드:

 

class Solution {
    public String solution(int n, int t, int m, int p) {
        String answer = "";
        int number = 0;
        int i = 0;
        label : while (true) {
            String str = logic(n, number); 
            for (int j = 0; j < str.length(); j++) {
                if (i % m + 1 == p) {
                    answer += str.charAt(j);
                }
                if (answer.length() == t) {
                    break label;
                }
                i++;
            }
            number++;
        }
        return answer;
    }
	
    // n진법으로 정수 number을 표현할 때
    public String logic(int n, int number) {
        if(number == 0) return "0";
        String str = "";
        int val = number;
        while (val != 0) {
            int rest = val % n;
            if (rest > 9) {
                char c = (char) ('A' + (rest - 10));
                str = c + str;
            }else{
                str = rest + str;
            }
            val /= n;
        }
        return str;
    }
}

 

다른 사람 코드:

 

class Solution {
    public String solution(int n, int t, int m, int p) {
        String answer = "";

        int startNum = 0;

        String targetString = "";
        String retString = "";

        while (targetString.length() < t * m) { // 크기 m에 한 글자씩 뽑게되고 총 t개를 뽑아야 하니 t * m
            targetString += Integer.toString(startNum++, n); // n 진법수를 targetString 에 붙힌다.
        }
        for (int i = 0; i < t; i++) {
            retString += targetString.charAt(i * m + p - 1); // p - 1 : 1번째 > 0번째
        }
        answer = retString.toUpperCase();
        return answer;
    }
}