[프로그래머스] n진수 게임

Gaanii·2025년 5월 13일
0

Problem Solving

목록 보기
196/210
post-thumbnail

아래 프로그래머스 로고를 클릭하면 해당 문제로 이동합니다 😀

프로그래머스로고



풀이과정


문제를 이해해서 깔끔하게 정리하자면 이렇다.
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로 리턴!


코드


1. Python

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

2. JS

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;
}


결과


0개의 댓글