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

[프로그래머스] 124 나라의 숫자 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 10. 30.
728x90
반응형

 

 

프로그래머스

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

programmers.co.kr

 

1. 문제 설명

2. 풀이과정

해당 문제는 10진법을 124로 구성된 3개의 수로 변환하는 문제이다.

3개의 수를 가지고 바꾸는 것은 쉽게 3진법이라고 할 수 있다.

3진법은 보통 012로 구성되어 있지만 위 문제는 124를 가지고 수를 변환해야 한다.

그냥 3진법으로 바꾸려면 3으로 나눈 나머지를 저장하고 몫으로 수를 새롭게 바꾸어 0이 될 때까지 반복하면 된다.

하지만 해당 문제에서 수가 3으로 나누어 떨어지는 수이면 수를 3으로 나눈 몫이 아니라 몫에서 1을 빼준 값으로 바꿔야 한다.

 

  1. 124로 변환한 결과를 저장할 리스트를 생성한다. li = list()
  2. 변환할 숫자가 0보다 크면 반복한다. while (n > 0)
  3. 만약 숫자를 3으로 나눈 나머지가 0이면 if (n % 3 == 0)
  4. 4를 추가하고 li.append('4')
  5. 3으로 나눈 몫에 1을 뺀 결과를 새로 저장한다. n = n // 3 - 1
  6. 반면에 숫자를 3으로 나눈 나머지가 0이 아니면 else
  7. 3으로 나눈 나머지를 추가하고 li.append(str(n % 3))
  8. 3으로 나눈 몫의 결과를 새로 저장한다. n //= 3
  9. 124로 바꿔 리스트에 저장한 결과는 거꾸로 저장되어 있기 때문에 뒤집어준다. li.reverse()
  10. 뒤집은 결과를 하나의 문자열로 합친 결과를 저장한다. answer = ''.join(li)
반응형

3. 소스코드

def solution(n):
    answer = ''
    
    li = list()
    while (n > 0):
        if (n % 3 == 0):
            li.append('4')
            n = n // 3 - 1
        else:
            li.append(str(n % 3))
            n //= 3

    li.reverse()
    answer = ''.join(li)
    
    return answer
728x90
반응형