업데이트:

최대 1 분 소요

문제

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

2225.png

풀이

3진법 문제이지만 0을 사용하지 않는다는 문제가 있다.
0을 사용하지 않음은 3진수로 계산할 때 0으로 딱 나누어 떨어지는 경우가 없다는 것을 의미하는데
n이 15인 경우와 같이 3으로 나누어 떨어지는 경우에는 몫을 하나 줄여 계산을 해준다.

몫을 하나 줄여 계산한다면 나머지는 3이 나오는데, 124나라의 진법을 따라야하기 때문에 3대신 4를 넣어준다.

마지막으로 계산한 나머지와 몫을 넣어둔 리스트에서 3을 4로 바꿔주고 반환한다.(나머지가 3이 나오는 경우는 n이 나누어 떨어지는 경우 이외로 나오는 경우가 있기 때문이다.)

def solution(n):
    answer = ''
    def trinary(n):
        res = []
        while n > 3:
            if n % 3 >0:
                res.append(n%3)
                n = n//3
    
            elif n % 3 == 0:
                res.append(4)
                n = (n-1)//3
            
        if n <= 3:
            res.append(n)
            
        return res
    
    answer = list(map(str,trinary(n)[::-1]))
    for i in range(len(answer)):
        if answer[i] == "3":
            answer[i] = "4"
    answer = ''.join(answer)
                
    return answer

생각 & 정리

이전에는 풀지못했던 문제를 풀수있게 되어서 기뻤다.
그 때 했던 접근은 3진법으로 해결하는 것이 아닌 실제로 124진법을 하나하나 만드려고 했는데, 여간 복잡한 일이 아니었다.
손코딩을 통해서 먼저 결과들은 몇몇 적어보고 그 안에서 규칙을 찾아내는 능력이 조금은 늘어난 것 같다.

카테고리:

업데이트:

댓글남기기