기록하고 까먹지 말기

124나라의 숫자 본문

전공/프로그래머스

124나라의 숫자

yha97 2023. 9. 26. 00:18

날짜 : 2023. 09. 26

사용 언어 : python

 

문제

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

 

코드

시간초과 코드

def solution(n):
    nums = [1, 2, 4]
    res = [1]
    cnt = 0
    def carry(idx):
        if idx == -1:
            res.insert(0, 1)
            return
        if res[idx] == 1: 
            res[idx] = 2
        elif res[idx] == 2:
            res[idx] = 4
        else:
            res[idx] = 1
            carry(idx-1)
        return
    while True:
        cnt += 1
        if cnt == n: break
        idx = len(res) - 1
        if res[idx] == 1: 
            res[idx] = 2
            continue
        elif res[idx] == 2:
            res[idx] = 4
            continue
        else:
            res[idx] = 1
            carry(idx-1)
    answer = ""
    for i in res:
        answer += str(i)
    return answer

 

정답

def solution(n):
    answer = ''
    nums = [1, 2, 4]
    while n > 0:
        n -= 1
        answer = str(nums[n % 3]) + answer
        n = n // 3
    return answer

 

 

풀이

- 보통의 3진수로 표현하지만, 0 1 2로만 표현하는 3진수와는 달리 1 2 4로 표현한다.

- 인덱스가 0으로 시작하기 때문에 1을 차감하면서 진행하고, 앞전부터 진행하기 때문에  앞에 문자열을 붙이는 방식으로 전개한다.

 

 

알게된 점

- 일반적으로 carry가 발생하는 것을 차용해 문제를 풀었고 실제로 답은 전부 맞았다.

- 그렇지만 TLE가 발생해 다른 풀이를 찾아보던 중 3진수 방식을 확인했고, (n -= 1) 부분에서 좀 많은 고민을 했던 것 같다.

 

 

참고 사이트

- https://velog.io/@eerang/PYTHON-프로그래머스Level2-124나라의-숫자

 

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

124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.124 나라에는 자연수만 존재합니다.124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.

velog.io

 

'전공 > 프로그래머스' 카테고리의 다른 글

게임 맵 최단거리  (0) 2023.09.29
(SQL) 조건에 맞는 사용자와 총 거래금액 조회하기  (0) 2023.09.28
이진 변환 반복하기  (0) 2023.09.25
N-Queen  (0) 2023.09.13
최솟값 만들기  (0) 2023.09.12