
아래 프로그래머스 로고를 클릭하면 해당 문제로 이동합니다 😀
문제를 이해해서 깔끔하게 정리하자면 이렇다.
1. 0부터 시작해 숫자를 n 진수로 변환하여 문자열로 이어붙인다.
2. m명이 돌아가면서 한 글자씩 말한다
3. 튜브는 p번째 순서이므로, 전체 문자열 중에서 (p-1), (p-1+m), (p-1+2m), ...에 위치한 글자를 말한다
4. 총 t개를 말해야하므로 말할 글자가 t개가 될 때 까지 반복한다
그럼, 풀이를 하려면 로직은 어떻게 되어야 할까 ?
1. 10진수를 n진수 문자열로 바꾸되, 10~15는 A~F로 바꾸자
2. 각자 말하는 숫자가 한자리수인 경우 t*m 길이의 문자열이 있어야 티키타카가 되어 튜브가 말해야하는 글자를 찾을 수 있음.
-> 즉, 충분히 많은 숫자를 n진수로 변환해서 이어붙이라는 뜻(fullString에 저장해놓자)
3. 튜브가 말할 인덱스를 추출하자. (p-1) * (m * i) 꼴로 t개를 추출하면 된다.
4. 위 위치의 문자만 추출해서 result로 리턴!
py에서는 bin, oct, hex 이런 친구들이 있지만 2, 8, 16진수만 지원한다. 3~15진수는 직접 만들어야함 ..
def convert(num, base):
digits = "0123456789ABCDEF"
if num == 0:
return "0"
result = ""
while num > 0:
result = digits[num % base] + result
num //= base
return result
def solution(n, t, m, p):
result = ""
full_string = ""
number = 0
while len(full_string) < t * m:
full_string += convert(number, n)
number += 1
for i in range(t):
result += full_string[i * m + (p - 1)]
return result
js에서는 toString을 이용하자 !
function solution(n, t, m, p) {
let fullString = "";
let num = 0;
while(fullString.length < t * m){
fullString += (num++).toString(n).toUpperCase()
}
let result = "";
for(let i = 0 ; i < t ; i++){
result += fullString[i * m + (p-1)];
}
return result;
}
