728x90
문제
풀이
<내 풀이>
- 진법 변환을 통해 변환된 숫자를 문자열로 바꾼다.
- 바꾼 문자열 길이만큼 순서별로 호출하는 숫자를 체크한다.
- 튜브 순서인 경우 t를 감소하고 답에 해당 숫자를 추가한다.
- t가 0이 되면 종료한다.
<다른 풀이 ( 더 간결한 풀이 )>
- 참가 인원이 모두 하나씩 숫자를 말해야 튜브의 순서가
한 번
지나가는 것이다.- t개의 숫자를 미리 구하기 위해
(참가 인원 * 미리 구할 숫자 개수)
만큼의 숫자 변환을 해놓는다.
- t개의 숫자를 미리 구하기 위해
- 진법 변환은
Integer.toString(int i, int radix)
함수를 사용- 숫자 i를 radix에 해당하는 진법으로 변환하는 함수
- 단, 16진수의 10 ~ 15인 A,B,C,D,E,F는 소문자로 변환해주기 때문에 toUpperCase()로 대문자로 바꿔줘야 함
어려웠던 점
- 튜브의 순서를 체크하는 로직에서 살짝 로직 실수를 해서 시간이 좀 걸렸다.
코드
내 풀이 ( 통과 )
class Solution {
public String solution(int n, int t, int m, int p) {
int num = 0, cnt = 0; // num : 숫자, cnt : 순서
String answer = "";
while(t > 0) {
String cNum = change(n, num); // 진법 변환된 숫자를 문자열로 바꾼 상태 ( 범위를 넘어가는 긴 숫자가 나올 수 있기 때문)
for (int i = 0; i < cNum.length(); i++) { // 문자열 길이만큼 순서를 돌림 -> 10이면 1, 0을 호출하는 걸 처리
if (cnt % m == p - 1) { // 튜브 순서
answer += cNum.charAt(i);
t--;
if (t == 0) break;
}
cnt++;
}
num++;
}
return answer;
}
String change(int n, int num) {
if (num == 0) return "0";
String str = "";
while(num > 0) {
String s = "";
int temp = num % n;
switch(temp) {
case 10: s = "A"; break;
case 11: s = "B"; break;
case 12: s = "C"; break;
case 13: s = "D"; break;
case 14: s = "E"; break;
case 15: s = "F"; break;
default: s = String.valueOf(num % n); break;
}
str = s + str;
num /= n;
}
return str;
}
}
다른 풀이 ( Integer.toString() 활용 )
import java.util.*;
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));
}
// 튜브의 순서에 해당하는 글자들만 추출
for(int i = p - 1; answer.length() < t; i += m){
answer.append(convert.charAt(i));
}
return answer.toString().toUpperCase();
}
}
참고
n진수 변환을 해주는 함수인 Integer.toString()을 구글링을 통해 새롭게 알게 됨
'프로그래머스' 카테고리의 다른 글
프로그래머스 lv2 - 뉴스 클러스터링 (자바) [2018 KAKAO BLIND RECRUITMENT] (2) | 2024.06.15 |
---|---|
프로그래머스 lv2 - 프렌즈4블록 (자바) [2018 KAKAO BLIND RECRUITMENT] (0) | 2024.06.14 |
프로그래머스 lv2 - 방금그곡 (자바) [2018 KAKAO BLIND RECRUITMENT] (0) | 2024.06.13 |
프로그래머스 lv2 - 파일명 정리 (자바) [2018 KAKAO BLIND RECRUITMENT] (0) | 2024.06.11 |
프로그래머스 lv2 - 후보키 (자바) [2019 KAKAO BLIND RECRUITMENT] (0) | 2024.06.08 |