Algorithm

[프로그래머스] Lv.2 n진수 게임

Chemi___6_oj 2023. 2. 10. 14:50

문제 이해 : 6분

문제 풀이 : 25분

 

def solution(n, t, m, p):
    change = ''

    for i in range(t*m):
        change += str(jinsu(i,n))

    return change[p-1:t*m:m]

def jinsu(num, jin):
    rev_base = ''
    if num == 0:
        return 0

    while num > 0:
        num, mod = divmod(num, jin)
        if jin > 10 and 10<= mod <= 15:
            rev_base += chr(mod + 55)
        else:
            rev_base += str(mod)

    return rev_base[::-1]

생각한 방법

1. 몇진수인지 파악해 그 수로 변환하는 함수를 만든다. 이때 함수에서 10~15인 경우를 생각해서 처리해준다.

2. m명이 t개의 문자 길이가 될때 까지 해야 하므로 m*t까지 연산을 해준다.

3. 그리고 구간에 맞게 알맞게 슬라이싱

 

이렇게 생각해서 구현하면 한번에 맞을 수도 있지만 테스트케이스만 다 맞고 제출에서 틀리는 경우가 있다.

그럴 경우에는 문제를 다시 돌아가서 봐야한다.어떤 조건이 있는지, 저런 조건이 왜 있는지를 한번 고민해보자.

 

문제를 보면 10~15인 경우에는 알파벳으로 변경을 해준다.

근데 생각을 해보면 11진수~16진수에만 저렇게 나머지(mod)가 10~15이 나오는 것을 파악할 수 있다.

그래서 이런 경우에 한해서만 따로 알파벳으로 변환하는 처리를 해주면 금방 해결된다. 

 

배울점

여기서 중요한 것은 테스트케이스를 다 맞고 제출에서 틀렸다면, 문제에 있는 조건을 한번 잘 파악해보자.

답을 내는 부분의 구현은 안틀렸을 것이다!