devFancy BE Developer

[Programmers] 17687. [3차] n진수 게임

2023-03-24
devFancy

문제 링크

성능 요약

  • 메모리: 74.5 MB, 시간: 2.43 ms

구분

  • 코딩테스트 연습 > 2018 KAKAO BLIND RECRUITMENT

Answer Code1(2023.03.24)

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


        // convert의 길이가 미리 구할 숫자 갯수 * 게임 참가 인원만큼 될 때 까지 n진수로 변환
        for(int i = 0; convert.length() <= t * m; i++){
            convert.append(Integer.toString(i, n));
        }

        // 튜브의 순서에 해당하는 글자들만 추출
        // 문자열은 0부터 이므로 p-1부터
        // 튜브가 말할 것만 알면되기 때문에 +m 씩 증가
        for(int i = p - 1; i < m * t; i = i + m) {
            answer.append(convert.charAt(i));
        }
        return answer.toString().toUpperCase();
    }
}

문제 풀이 - Answer Code1

  • 참가 인원이 모두 하나씩의 숫자를 말해야 튜브의 순서가 한번 지나가는 것이므로

  • t개의 숫자를 구하기 위해서는 참가 인원 * 미리 구할 숫자의 갯수 만큼 변환을 해놓아야 한다.

  • 변환하는 숫자들과 정답은 StringBuilder를 이용하여 저장하고, n진수 변환은 Integer 클래스의 toString 함수를 이용한다.

    • StringBuilder를 쓰는 이유는 인스턴스를 생성할 때 지정된 문자열을 변경할 수 있다는 장점을 가지고 있기 때문이다.
  • Integer.toString 함수를 Integer.toString(int i, int radix) 형태로 사용하게 되면, i를 radix에 해당하는 진법으로 변환할 수 있다.

  • 변환해놓은 convert 문자열에서 튜브의 순서에 해당하는 글자들만 추출하여 answer에 담아 return 한다.

    • 대문자인 문자열로 출력하기 때문에 return 할때, answer.toString().toUpperCase()를 사용한다.

Review

  • 아이디어 + 필요한 클래스를 사용하는 데에 시간이 오래걸렸다.

  • StringBuilder + 진수 변환 방법에 대해 관련 개념 부분을 공부하고 넘어가자.

Reference


Comments

Index