성능 요약
- 메모리: 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()
를 사용한다.
- 대문자인 문자열로 출력하기 때문에 return 할때,
Review
-
아이디어 + 필요한 클래스를 사용하는 데에 시간이 오래걸렸다.
-
StringBuilder + 진수 변환 방법에 대해 관련 개념 부분을 공부하고 넘어가자.