[알고리즘] n진수 게임

MINSEOK KIM·2021년 8월 23일
0

알고리즘

목록 보기
6/12

프로그래머스 2018 KAKAO BLIND RECRUITMENT 코딩테스트에서 출제된 문제

n진수 게임 문제

분석

n진수를 순서대로 부르는 문제로 이해하고 풀고 있었는데 한자리씩 부르는 문제였다.

  1. 정해진 길이만큼 n진수 만들기
  2. 만들어 둔 문자열로 자신의 순서에 나올 문자 찾기

1. 10진수가 넘어가는 경우

num%n이 10이라면 -10을 하여 overTen의 0번인 'A'가 들어간다

overTen = ['A','B','C','D','E','F']
if num%n > 9: res= overTen[num%n-10]+res
        else: res=str(num%n)+res

10진수가 넘어가면 10 ~ 16까지 A ~ F로 표현하기 때문에 이를 바꿔 줄 리스트를 작성해두고 진수 변환 과정에서 10이 넘어간다면 변환되도록 하였다.


2. 정해진 길이만큼 만들기

반복할 횟수는 (자신이 발표할 횟수*사람의 수)만큼 반복한다.


3. 자신의 순서에 맞는 문자열 찾기

자신의 순서의 범위는 (자신의 순서-1)부터 (문자열의 길이)까지 반복하되 (자신의 순서) 스텝만큼 이동한다.


코드

overTen = ['A','B','C','D','E','F']

def change(num,n):
    res=''
    while num!=0:
        tmp = num%n
        if tmp > 9: res= overTen[tmp-10]+res # ①
        else: res=str(tmp)+res
        num =num//n
    return res

def solution(n, t, m, p):
    answer = ''
    # 정해진 길이만큼 n진수 만들기
    game,num='0',1
    while len(game)<t*m: # ②
        game+=change(num,n)
        num+=1
        
    # 자신의 순서에 나올 문자 찾기
    for i in range(p,t*m+1,m): # ③
        answer+=game[i-1]
    return answer

0개의 댓글