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

 

Lv2 문제다!

숫자 3과 연관이 무조건 있다고 생각해 나름 로직을 생각했으나, 답까지는 작성 못했다.

그래서 풀이를 찾아봤는데, 모두 좋은 것 같아 기록해보려한다. 

 

124 나라의 특징은 다음과 같다.

  • 1 = 1, 2=2, 3= 4이다.
  • 4부터 자릿수가 늘어난다 4 = 11
  • 7에서 앞자리 수가 바뀐다 7 = 21
  • 10에서 앞자리 수가 2로 커진다 10 = 41

규칙 

  • 3으로 나눠지지 않는 경우
    • 이 경우는 1,2가 가능한데, 이는 124 나라의 숫자이므로 사용가능한 숫자들이다
  • 3으로 나눠지는 경우
    • 3진법에서 3으로 나누어 떨어지는 수는 일의 자리가 0이 된다. 124 나라에서는 이 일의 자리수를 4로 변경한다 
    • 3으로 나눈 몫에서 1을 뺀 값이 10의 자리 수 이상이다 
    • 여기에서 왜 다음 n을 n // 3이 아닌 n // 3 - 1로 했는지 이유를 찾아봤다. 

 

  • 숫자 문자들을 오른쪽으로 추가했으므로, 원래 답과 반대 방향이라 역순으로 반환해주면 된다 

 

- 정답 풀이 1 : 

참고한 블로그

def solution(n):
    answer = ''
    
    while n:
        #3의 배수가 아닌 경우 -> 1,2
        if n % 3:
            answer += str(n % 3)
            n //= 3
        #3의 배수인 경우  
        else:
            answer += '4'
            n = n // 3 - 1
            
    return answer[ : : -1]

 

- 정답 풀이 2: 

3으로 나눴을 때 나머지가 

0일 때 -> 1 

1일 때 -> 2

2일 때 -> 4 

인 것을 num의 인덱스로 활용한 풀이다. 

 

def change124(n):
    num = ['1','2','4']
    answer = ""


    while n > 0:
        n -= 1
        answer = num[n % 3] + answer
        n //= 3

+ Recent posts