알고리즘 문제

3진법 뒤집기

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

풀이방식

  1. n을 3진법으로 변환 → divmod로 만들기

  2. 변환된 3진법을 뒤집기 → reverse ▶▶▶ += str(y)로 reverse 불필요!

  3. 3진법을 10진법으로 변환 → 간단히 자릿수별 곱 ▶▶▶ int(k,3)로 바로 10진수 정수로 변환

  4. 값 반환

풀이과정

1.

...
n,y=divmod(n, 3) # n을 3으로 나눈 몫=n 나머지=y
...

divmod함수를 활용해서 3진법으로 만들었다.

2.

k = ""
...
n,y=divmod(n, 3)
k += str(y)
...

그리고 k라는 빈 스트링에 y, 즉 나머지 값을 넣어준다.

3.

...
k = ""
    while n > 0:
        n,y=divmod(n, 3)
        k += str(y)
...

이 것을 n이 0보다 작아지기 전 까지 반복한다.
그럼 k에는 n을 3진수화 한 값을 거꾸로!! k에 저장한다.

4.

...
return int(k, 3)

마지막으로 int를 사용해서 정수화(=10진법)으로 만들어 준다.
int()의 첫 번째 인자는 정수화 할 대상이고, 두 번째 인자는 그 대상의 base 이다. int는 이것을 인지하고 정수로 만든다.

ex)

  • k=101이라고 할 때, int(101,3)이 될 것이고, int라는 함수는 이것을 보고
    "아, 101은 3진법으로 되어있는 거구나. 나는 101을 10진법으로 바꿔서 출력해야지" 라고 생각한다는 뜻.

전체코드

def solution(n):
    k = ""
    while n > 0:
        n,y=divmod(n, 3)
        k += str(y)
    return int(k, 3)

풀이후기

역시나 어렵다...
그렇지만 꾸준히!
가보자고!!

profile
가보자고

0개의 댓글

관련 채용 정보