n진수 게임
2024. 6. 4. 17:17ㆍ알고리즘/카카오
https://school.programmers.co.kr/learn/courses/30/lessons/17687
우선 전체 숫자의 범위를 구한다. 이 범위는 게임에 참여하는 전체 학생 수 * 튜브가 말해야하는 숫자의 갯수만큼의 범위를 최소한으로 가질 것이다. 만약 튜브가 3개의 숫자를 말해야되고 전체 학생 수가 5명이라면 게임은 최소 0부터 15가 될 때까지는 진행해야한다.
그리고 전체 숫자 범위의 10진수를 N진법으로 변환한다. 이때, 변환한 N진수의 문자열 길이가 2이상이면 하나씩 잘라서 str에 저장한다. 101 이면 1, 0, 1 이렇게 하나씩 잘라서 저장한다.
str을 게임에 참여하는 전체 학생 수로 잘라서 그 중에 튜브가 말해야하는 순번에 존재하는 문자를 ret에 저장한다.
이때 튜브가 말해야하는 숫자의 갯수를 만족했다면 루프문에서 빠져나온다.
처음에 풀 때는 어려웠는데 두 번째 푸니까 쉽게 풀렸다. 다행이다.
function solution(n, t, m, p) {
let ret = "";
let str = "";
let i = 0;
let cnt = t * m;
while(cnt > 0){
let char = i.toString(n).toUpperCase(); // 16진수인 경우 알파벳이 소문자로 표기되므로 대문자로 변환
char.split("").forEach((elem)=> str += elem);
cnt -= 1;
i += 1;
}
for(let i = 0; i < str.length; i += m){
if(ret.length === t) break;
let subStr = str.substring(i, i + m);
ret += subStr[p - 1];
}
return ret;
}