본문 바로가기
프로그래머스/Python

[프로그래머스] [3차] n진수 게임 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 8. 11.
728x90
반응형

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제 설명

2. 풀이과정

해당 문제는 말하는 숫자를 모두 구하여 저장하고 튜브가 말하는 순서에 맞는 숫자를 찾아 저장하면 된다.

총 저장해야 할 숫자는 (튜브가 구할 숫자의 개수 x 참가 인원) 개다.

원래 불러야 할 숫자를 해당 진법으로 바꾼 뒤 진법을 바꿔 부를 순서를 추가하는 방법으로 말해야 할 숫자를 모두 구하였다.

 

  1. 말하는 숫자를 모두 구해 저장할 리스트를 생성하고 처음에는 무조건 0을 불러야 하므로 0을 추가해 준다. result = [0]
  2. 원래 게임에서 다음으로 불러야 할 숫자는 1이므로 원래 불러야 할 숫자를 저장할 변수를 생성하고 1을 대입한다. num = 1
  3. 총 저장해야 할 숫자의 개수가 될 때까지 반복한다. while (len(result) < t * m)
  4. 원래 수를 해당 진법으로 변환하여 그 결과를 저장할 리스트를 생성한다. li = list()
  5. 진법 변환에서 사용할 변수를 생성하고 변환할 수를 대입한다. i = num
  6. 변환하는 수가 0이 될 때까지 반복하며 while (i > 0)
  7. 만약 변환하는 수를 진법으로 나눴을 때 나머지가 10이면 변환 결과에 A를 추가한다. if (i % n == 10): li.append('A')
  8. 만약 나머지가 11이면 변환 결과에 B를 추가한다. elif (i % n == 11): li.append('B')
  9. 만약 나머지가 12이면 변환 결과에 C를 추가한다. elif (i % n == 12): li.append('C')
  10. 만약 나머지가 13이면 변환 결과에 D를 추가한다. elif (i % n == 13): li.append('D')
  11. 만약 나머지가 14이면 변환 결과에 E를 추가한다. elif (i % n == 14): li.append('E')
  12. 만약 나머지가 15이면 변환 결과에 F를 추가한다. elif (i % n == 15): li.append('F')
  13. 반면 그 외의 0부터 9까지의 수가 나오면 변환하는 수를 진법으로 나눈 나머지를 추가한다. else: li.append(i % n)
  14. 변환하는 수를 진법으로 나눈 몫의 결과로 새로 저장한다. i //= n
  15. 해당 수를 진법으로 변환한 결과를 거꾸로 저장되어 있기 때문에 순서를 뒤집어 준다. li.reverse()
  16. 변환한 최종 진법의 결과를 하나씩 말해야 할 숫자 리스트에 추가한다. for i in li: result.append(i)
  17. 원래 수를 다음 수로 변경한다. num += 1
  18. 말해야 할 수를 필요한 최소 개수만큼 구했다면 튜브가 말해야 하는 순서에 해당하는 숫자를 정답에 문자열 형태로 추가한다. for i in range(p - 1, t * m, m): answer += str(result[i])
반응형

3. 소스코드

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

    result = [0]
    num = 1
    while (len(result) < t * m):
        li = list()
        i = num
        while (i > 0):
            if (i % n == 10):
                li.append('A')
            elif (i % n == 11):
                li.append('B')
            elif (i % n == 12):
                li.append('C')
            elif (i % n == 13):
                li.append('D')
            elif (i % n == 14):
                li.append('E')
            elif (i % n == 15):
                li.append('F')
            else:
                li.append(i % n)
            i //= n

        li.reverse()
        for i in li:
            result.append(i)

        num += 1

    for i in range(p - 1, t * m, m):
        answer += str(result[i])

    return answer
728x90
반응형