Dandy Now!
  • [레벨2] [3차] n진수 게임
    2023년 07월 15일 22시 48분 04초에 업로드 된 글입니다.
    작성자: 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
    반응형
    댓글