본문 바로가기

Python 코딩테스트

[프로그래머스] 124 나라의 숫자

반응형

https://school.programmers.co.kr/learn/courses/30/lessons/12899

 

프로그래머스

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

programmers.co.kr

 


풀이

처음엔 문제를 보고 좀 당황했었는데 3진법에서 한번 더 생각해보면 되는 문제였다.

 

124 나라의 특징은

- 1, 2, 4로만 숫자가 구성되어있다.

- 4부터 자릿수가 늘어난다.

- 7에서 앞자리 수가 바뀐다.

- 10에서 앞자리 수가 2 커진다.

 

위 특징으로 규칙을 찾아보면 다음과 같은 규칙을 발견할 수 있다.

3으로 나눠지는 경우와 3으로 나눠지지 않는 경우, 두 가지 경우를 따져줘야 한다.

 

1. 3으로 나눠지지 않는 경우

   - 3진법과 비슷하다.

   - 3진법은 0,1,2로 표현되는데 3으로 나누어 떨어지지 않는다는 것은 1의 자리에는 1, 2만 올 수 있기 때문         에 124 나라에서도 표현 가능한 숫자들이다.

 

2. 3으로 나누어지는 경우

   - 3진법에서 3으로 나누어 떨어지는 수는 일의 자리가 0이 된다. 124 나라에서는 이 일의 자리 수를 4로 바         꿔준다.

   - 3으로 나눈 몫에서 1을 뺀 값이 10의 자리 수 이상이다.

 

+ 숫자를 변환하는 방법은 2진법, 8진법과 같이 다른 집법으로 바꾸는 방법과 같다.


정답

def solution(n):
    answer = ''
    while n:
        if n % 3:
            answer += str(n % 3)
            n //= 3
        else:
            answer += "4"
            n = n//3 - 1
    return answer[::-1]

n이 3의 배수가 아니라면 3진법을 구하는 방법과 동일하게 3으로 나눈 나머지를 저장하고, n을 3으로 나눈 몫으로 저장한다.

 

n의 3의 배수라면 무조건 4를 추가하고, n을 3으로 나눈 몫에서 1을 뺀 값을 저장한다.

반응형