PROGRAMMERS Python Lv2. 124 나라의 숫자

최대 1 분 소요

이번 문제는 124나라의 숫자이다.

정답 코드는 다음과 같다.

def solution(n):
    answer = ""
    while n:
        n, nam = divmod(n,3)
        answer = "412"[nam] + answer
        if nam == 0:
            n -= 1
    return answer

이 문제의 조건을 제대로 읽지 않고, 많이 헤맸다.
문제 조건에 의하면 124나라에서는 1,2,4의 숫자만 사용가능하다.

3진법으로 문제를 풀어야 한다.

는 뜻이다.

따라서 divmod 함수가 필요한데, 이전에 배웠던 함수로

divmod는 몫과 나머지를 반환해 준다.

풀이 순서는 다음과 같다. 5를 예로 들어보겠다.

  1. 주어진 5를 3으로 나눈 몫과 나머지를 구한다. (몫: 1, 나머지: 2)

  2. “412”[2] 를 하게 되면 우선 answer 앞에 “2”이 추가된다.

  3. 다음으로 남은 몫인 1을 다시 3으로 나눠준다 (몫: 0, 나머지:1)

  4. “412”[1] + answer를 하게 되면 앞서 나온 “2”는 뒤로 가고 “12”가 만들어진다. (몫이 0이기에 loop를 나온다.)

중요한 것은, 3의 배수는 0을 표현할 방법이 없어서 다른 방법을 사용해줘야 한다.

예를 들어, 3을 넣게 되면 답은 4가 나와야 하지만,

  1. 몫:1, 나머지:0 일 경우, “14”가 결과적으로 나오게 된다.

  2. 따라서, 나머지가 0이 나오는 3의 배수의 경우, 몫을 1 빼줘야 정상적으로 작동한다.

이런 문제들도 아직 너무 어렵게 느껴지지만, 이번 문제를 통해서 배운점은

divmod의 활용, 그리고 문제 조건을 더 꼼꼼하게 읽는법, 예외 사항을 처리하는 것을 배웠다.

계속해서 복습도 하고, 많은 문제를 풀어볼 것이다.

댓글남기기