🌞Algorithm/🔥programmers

[programmers] [3차] n진수 게임 - 2018 KAKAO BLIND RECRUITMENT

뿌야._. 2021. 9. 8. 14:03

<[3차] n진수 게임>

문제(출처: https://school.programmers.co.kr/learn/courses/30/lessons/17687)

 

 

문제 풀이

   - my solution

def solution(n, t, m, p):
    answer = ''
    
    tempstr = '0'
    i=1
    dic={10:'A', 11:'B', 12:'C', 13:'D', 14:'E', 15:'F'} # 10~15는 각각 대문자 A~F로 출력
        
    # n진법 구하기
    while True:
        temp = ''
        k = i
        while True:
            x, y = divmod(k, n)
            if y >= 10: # 10 이상이면 A~F로 출력
                temp += dic[y]
            else: # 나머지 문자열로 출력
                temp += str(y)
            k = x
            if x <= 0: #끝
                break
        i+=1
        tempstr+=temp[::-1] # 뒤집어서 추가
        if len(tempstr)>=(t*m): # 자리수만큼
            break

    for i in range(len(tempstr)): # 자기 차례에 말할 숫자 
        if i%m==p-1:
            answer+=tempstr[i]
        if len(answer)==t:
            break
                
        
    return answer

 

진법 변환!! 찾아보니 divmod로 몫과 나머지를 구해 n진법으로 하길래... 

divmod를 사용하여 문제를 해결해보았다.

 

1) 숫자 몇까지 n진법으로 구하란 말 대신 길이를 알려주었으므로 while 문을 사용

  1-1) 숫자 k를 n진법으로 나타내기 위해 divmod를 실행해야 하므로 while문 사용

       ① 10 이상이면 dic에 미리 저장해둔 값을 문자열에 넣고, 10보다 작으면 그 값을 그대로 문자열에 넣음

       ② 종료 조건: 몫이 0보다 작거나 같은 경우

  1-2) 나머지로 구한 n진법은 뒤집어서 추가

  1-3) 종료 조건: 문자열의 길이가 (미리 구할 숫자의 개수) * (게임에 참가하는 인원) 이상일 경우

 

2) 숫자 k를 n진법으로 변환한 문자열을 반복문을 통하여 자기 차례에 말할 숫자만 answer에 추가

 


생각🤔

 

 

내가 생각하기에 이 문제의 포인트는

1) 숫자 k를 n진법으로 변환하는 방법

2) 미리 구할 숫자의 개수만큼 구하는 방법

이었던 것 같다.


출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges