- [레벨2] [3차] n진수 게임2023년 07월 15일 22시 48분 04초에 업로드 된 글입니다.이 글은 2023년 09월 16일 01시 58분 06초에 마지막으로 수정되었습니다.작성자: DandyNow728x90반응형
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반응형'CS > 코딩 테스트' 카테고리의 다른 글
[레벨1][자바스크립트] 숫자 짝궁 (0) 2023.07.17 [레벨1][파이썬] 숫자 짝궁 (0) 2023.07.17 [레벨2] 멀리 뛰기 (0) 2023.05.22 [레벨1][자바스크립트] 공원 산책 (0) 2023.04.18 [레벨1][파이썬] 공원 산책 (0) 2023.04.17 다음글이 없습니다.이전글이 없습니다.댓글