알고리즘 풀이/프로그래머스

[Level 2] n진수 게임

mhko411 2021. 9. 13. 21:59
728x90

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

 

코딩테스트 연습 - [3차] n진수 게임

N진수 게임 튜브가 활동하는 코딩 동아리에서는 전통적으로 해오는 게임이 있다. 이 게임은 여러 사람이 둥글게 앉아서 숫자를 하나씩 차례대로 말하는 게임인데, 규칙은 다음과 같다. 숫자를 0

programmers.co.kr


접근

먼저 10진수로 진행했을 때 가장 마지막에 말해야하는 숫자까지 n진수로 변환하여 특정 문자열에 저장한다. 이후 n진수로 게임을 진행했을 때 말해야하는 범위까지 입력된 사용자의 차례의 수를 최종해에 대입한다.

 

구현

- 아래의 함수는 10진수를 n진수로 변환하는 함수이다.

- s에 아래와 같이 초기화를 시킨 후에 number를 n으로 나눈 나머지를 인덱스로 사용하여 s의 문자에 접근한다.

- 인덱스로 접근한 문자를 result에 대입하는데 n진수로 변환했을 때 뒤집어진 문자로 반환되지 않도록 아래와 같이 추가한다.

def trans_n_nary(n, number):
    s = '0123456789ABCDEF'
    result = ''
    if number == 0:
        return '0'
    while number:
        result = s[number % n] + result
        number //= n
    return result

- 10진수로 게임을 진행했을 때 t*m의 숫자까지 진행되기 때문에 0부터 해당 숫자까지 n진수로 변환한다.

- 이후 n진수로 변환한 것을 text에 모두 저장하였고

- text를 탐색하여 입력된 사용자의 순서에 맞게 answer에 추가한다.

def solution(n, t, m, p):
    answer = ''
    text = ''
    for i in range(t*m):
        text += trans_n_nary(n, i)
    
    for i in range(p-1, t*m, m):
        answer += text[i]
    return answer

전체 코드

def trans_n_nary(n, number):
    s = '0123456789ABCDEF'
    result = ''
    if number == 0:
        return '0'
    while number:
        result = s[number % n] + result
        number //= n
    return result

def solution(n, t, m, p):
    answer = ''
    text = ''
    for i in range(t*m):
        text += trans_n_nary(n, i)
    
    for i in range(p-1, t*m, m):
        answer += text[i]
    return answer

'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글

[Level 2] 압축  (0) 2021.09.23
[Level 2] 쿼드압축 후 개수 세기  (0) 2021.09.15
[Level 3] 숫자 게임  (0) 2021.09.10
[Level 3] 단어 변환  (0) 2021.09.10
[Level 3] 불량 사용자  (0) 2021.09.10