JS-algorithm/프로그래머스
[프로그래머스] N진수 게임 (javascript)
yunieyunie
2023. 7. 8. 14:42
https://school.programmers.co.kr/learn/courses/30/lessons/17687
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🤔 해결방법
1. 튜브가 말해야하는 숫자가 t이고 참가 인원이 m이므로 총 인원이 말해야 하는 숫자인 t * m까지 0부터 n진법으로 바꾼다.
2. 인원수인 m개씩 자르고 튜브의 순서인 p번째 것만 모아서 출력한다.
🔑 풀이
function solution(n, t, m, p) {
//numbers = n진법으로 바꾼 수
let numbers = '';
let i = 0;
while (numbers.length < (t*m)){
let num = i.toString(n).toUpperCase();
numbers += num; //numbers = "011011100"
i++;
}
//numbers의 길이가 t*m까지 되도록 자름
numbers = numbers.slice(0, t*m); //numbers = "01101110"
//numbers를 m개씩 쪼개서 numbersSlice에 넣기
let numbersSlice = [];
for (let i = 0; i < numbers.length; i+=m) {
numbersSlice.push(numbers.slice(i, i+m)); //numbersSlice = ["01","10","11","10"]
}
//p번째것만 모아서 출력
let tubeSay = '';
for (let j = 0; j < numbersSlice.length; j++){
tubeSay += numbersSlice[j][p-1] //tubeSay = "0111"
}
return tubeSay;
}
이번 문제는 어렵지 않은 편이라 삽질하지 않고 한 번에 풀 수 있었다.
다만 좀 더 코드를 간결하게 바꿔본다면 다음과 같겠다.
function solution(n, t, m, p) {
let numbers = '';
let i = 0;
while (numbers.length < t * m) {
numbers += (i++).toString(n).toUpperCase();
}
const numbersSlice = numbers.slice(0, t * m);
let tubeSay = '';
for (let j = p - 1; j < numbersSlice.length; j += m) {
tubeSay += numbersSlice[j];
}
return tubeSay;
}