Dandy Now!
  • [레벨2] [3차] n진수 게임
    2023년 07월 15일 22시 48분 04초에 업로드 된 글입니다.
    이 글은 2023년 09월 16일 01시 58분 06초에 마지막으로 수정되었습니다.
    작성자: DandyNow
    728x90
    반응형

    https://school.programmers.co.kr/learn/courses/30/lessons/17687?language=python3 

     

    프로그래머스

    코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

    programmers.co.kr

     

    1. 파이썬 풀이

    def solution(n, t, m, p):
    num_list = [
    "0",
    "1",
    "2",
    "3",
    "4",
    "5",
    "6",
    "7",
    "8",
    "9",
    "A",
    "B",
    "C",
    "D",
    "E",
    "F",
    ]
    new_num_list = num_list[:n]
    result_str = "0" # 중간 결과를 문자열로 저장
    end = p + (t - 1) * m # 반복 횟수를 최적화한 end 변수
    for i in range(1, end):
    num = ""
    quotient = i
    while quotient > 0:
    remainder = quotient % n # new_num_list 대신 n 사용
    num = new_num_list[remainder] + num
    quotient = quotient // n
    result_str += num # 문자열로 중간 결과를 추가
    result_str = result_str[p - 1 :: m][:t] # 문자열 슬라이싱으로 최종 결과 생성
    return result_str


    1. `num_list`와 `new_num_list`: `num_list`는 0부터 15까지의 숫자와 A부터 F까지의 알파벳을 포함한 리스트입니다. `new_num_list`는 주어진 진법 `n`에 맞춰서 `num_list`의 일부 요소를 선택한 리스트입니다. 입력된 `n`에 따라 생성되는 진법에 맞는 숫자 리스트를 생성합니다.

    2. `result_str` 초기화: 결과 문자열 `result_str`를 "0"으로 초기화합니다. 이후 숫자를 생성하면서 이 문자열에 추가합니다.

    3. `end` 변수 설정: 최적화된 `end` 변수를 `p + (t - 1) * m`으로 설정합니다. `end` 변수는 숫자를 생성할 반복 횟수를 제한하는 역할을 합니다. 결과 문자열의 길이가 아닌 `p`번째로 차례가 오는 숫자까지만 생성하도록 합니다.

    4. 숫자 생성 반복문: 1부터 `end`까지의 숫자를 반복해서 생성합니다. 각 숫자를 10진수에서 `n`진수로 변환하여 `result_str`에 추가합니다.

    5. `num` 변수: 각 숫자를 `n`진수로 변환한 결과를 임시로 저장하는 변수입니다.

    6. `quotient` 변수: 현재 처리 중인 숫자를 `n`진수로 변환하기 위해 사용하는 변수입니다. 초기값은 `i`로 설정되며, `while` 반복문을 통해 `quotient`를 `n`으로 계속 나누어가며 `num`에 해당 자리의 숫자를 추가합니다.

    7. `result_str`에 중간 결과 추가: 각 숫자를 `n`진수로 변환하여 얻은 `num`을 `result_str`에 추가합니다. 이를 통해 중간 결과를 누적하며 문자열을 생성합니다.

    8. 최종 결과 생성: `result_str`에서 `p - 1`부터 시작하여 `m` 간격으로 슬라이싱 하고, 그중에서 처음 `t`개의 숫자를 선택하여 최종 결과를 생성합니다.

    이렇게 최종 코드는 입력된 진법 `n`, 출력할 숫자의 개수 `t`, 참가하는 인원 수 `m`, 그리고 자신의 순서 `p`에 따라 해당하는 진법의 숫자들을 생성하여 최종 결과를 반환합니다.

     

    2. 자바스크립트 풀이

    function solution(n, t, m, p) {
    const numArr = [
    "0",
    "1",
    "2",
    "3",
    "4",
    "5",
    "6",
    "7",
    "8",
    "9",
    "A",
    "B",
    "C",
    "D",
    "E",
    "F",
    ];
    const newNumArr = numArr.slice(0, n);
    let resultStr = "0";
    let end = p + (t - 1) * m;
    for (let i = 1; i < end; i++) {
    let num = "";
    let quotient = i;
    while (quotient > 0) {
    let remainder = quotient % n;
    num = newNumArr[remainder] + num;
    quotient = Math.floor(quotient / n);
    }
    resultStr += num;
    }
    const result = Array.from(resultStr.slice(p - 1, -1))
    .filter((_, index) => index % m === 0)
    .join("");
    return result.slice(0, t);
    }



    728x90
    반응형
    댓글