[문자열] : PRG 17687: n 진수 게임

KimRiun·2021년 11월 16일
0

알고리즘_문제

목록 보기
21/26

사용 언어: python 3.9.5

❓ Problem

문제 설명

https://programmers.co.kr/learn/courses/30/lessons/17687

난이도

level 2

🚩 Solution

시도 01)

1. 접근법

  1. 숫자를 n진수로 변환
  2. m *t 길이 만큼을 포함한 진수 연결 문자열 만들기
  3. p번째(인덱스가 0부터 시작하니까 정확히는 p-1번째)를 시작으로 m만큼 step하면서 answer에 문자 추가하기

2. 코드


# 진수 변환 함수
def convert(num, base):
    temp = "0123456789ABCDEF"
    q, r = divmod(num, base)

    if q == 0:
        return temp[r]
    else:
        # q를 base로 변환
        # 즉, n진수의 다음 자리를 구함
        return convert(q, base) + temp[r]

def solution(n, t, m, p):
    answer = ''
    full = ''
    i = 0

    # 구할 크기 : m *t 이상
    while len(full) < m * t:
        # 진수변환
        # full += str(int(str(i), n))
        full += convert(i, n)  
        i += 1
    # full += str(int(str(i), n))
    full += convert(i, n)  
    

    # m 단위마다 끝고, 그 m에서 p번째를 구함
    for i in range(p-1, len(full), m):

        answer += full[i]
        if len(answer) == t:
            break

    return answer

3. 시간복잡도

O(n)O(n)

4. 결과

성공

5. 소요 시간

11:19~12:02 (43분)

📕 피드백

1. 검색한 내용

  • 어떤 수 q를 n진법으로 변환하는 함수
    def convert(num, base):
        temp = "0123456789ABCDEF"
        q, r = divmod(num, base)
    
        if q == 0:
            return temp[r]
        else:
            # q를 base로 변환
            # 즉, n진수의 다음 자리를 구함
            return convert(q, base) + temp[r]
    
    print(convert(4,2)) # 4를 2진수로 변환한 값을 문자열로 리턴
    print(type(convert(4,2)))
    
    >>> 100
    >>> <class 'str'>

2. 실수

3. 발전 방향 (개선/추가사항)

  • 문자열 슬라이싱도 step 사용 가능 arr[start:stop:step]
    • start를 입력하지 않으면 0을 입력한 것과 같습니다.

    • stop을 입력하지 않으면 리스트의 길이 (len(arr))를 입력한 것과 같습니다.

    • step을 입력하지 않으면 1을 입력한 것과 같습니다.

      arr = [0,1,2,3,4,5,6]
      print(arr[::2])
      print(arr)
      print(arr[1:5:2])
      
      >>> [0, 2, 4, 6]
      >>> [0, 1, 2, 3, 4, 5, 6]
      >>> [1, 3]
  • 코드
# 11:19~12:02

def convert(num, base):
    temp = "0123456789ABCDEF"
    q, r = divmod(num, base)

    if q == 0:
        return temp[r]
    else:
        # q를 base로 변환
        # 즉, n진수의 다음 자리를 구함
        return convert(q, base) + temp[r]

def solution(n, t, m, p):
    full = ''
    i = 0
    # 구할 크기 : m *t 이상
    while len(full) < m * t:
        # 진수변환
        full += convert(i, n)  
        i += 1

    return full[p-1:m*t:m]
profile
Java, Python

0개의 댓글