본문 바로가기

프로그래머스

프로그래머스(자바, Java) - Level2. n진수 게임

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

 

프로그래머스

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

programmers.co.kr


주요 포인트 및 문제 리뷰

  • substring 메서드보다 charAt 메서드를 사용하는 게 더 직관성이 있어 보여서 Character 형 ArrayList를 사용하였다.
  • 문제를 풀 때, ArrayList의 제네릭이 Character 형이다 보니 대소 비교를 통해 문자 형인지 숫자형인지 구분해야겠다고 생각했었다.
    근데 다시 생각을 어차피 숫자는 UpperCase에 영향이 없어서 통으로 처리를 해주었다.
  • 진수 변환 후 문자열 반환은 Integer 클래스의 toString() 메서드를 이용하여 쉽게 할 수 있다.
  • 차례는 1부터 세지만 인덱스는 0부터 시작하기 때문에 j 번째 턴에 자신이 말해야 하는 숫자는 가져오는 식은
    (m * j) + p - 1 으로 설정하였다.
  • 문제를 채점 후 코드를 보면서 다시 생각을 해보니 ArrayList를 사용하지 말고 배열을 써도 됐을 것 같다.

소스코드

import java.util.*;
class Solution {
    public String solution(int n, int t, int m, int p) {
        String answer = "";
        ArrayList<Character> characters = new ArrayList<>();

        characters.add('0');
        int num = 0;
        String str;
        while (characters.size() < t * m) {
            num++;
            str = Integer.toString(num, n);
            for (int i = 0; i < str.length(); i++) {
                characters.add(str.charAt(i));
            }
        }

        for (int j = 0; j < t; j++) {
            answer += characters.get((m * j) + p - 1).toString().toUpperCase();
        }

        return answer;
    }
}