카테고리 없음

글쓰기 43일차

yoon000219 2026. 7. 14. 20:46

문제 설명

자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.

📌 문제 이해

자연수 n을 3진법으로 변환한 뒤 앞뒤로 뒤집고, 뒤집힌 값을 다시 10진법으로 변환하는 문제이다.

예를 들어 n = 45인 경우 다음과 같은 과정을 거친다.

45 (10진법)
    ↓
1200 (3진법)
    ↓
0021 (앞뒤 반전)
    ↓
7 (10진법)
 

💡 풀이 과정

1. 10진수를 3진수로 변환하기

10진수를 3진수로 변환하기 위해서는 숫자를 3으로 계속 나누면서 나머지를 구한다.

45를 예시로 계산하면 다음과 같다.

45 ÷ 3 = 15 ... 나머지 0
15 ÷ 3 = 5  ... 나머지 0
5  ÷ 3 = 1  ... 나머지 2
1  ÷ 3 = 0  ... 나머지 1
 

나머지가 나온 순서는 다음과 같다.

0 → 0 → 2 → 1
 

일반적으로 3진수를 구할 때는 나머지를 아래에서 위로 읽기 때문에 1200이 된다.

하지만 이번 문제에서는 3진수를 다시 앞뒤로 뒤집어야 한다.

1200 → 0021
 

따라서 나머지가 나온 순서인 0021을 그대로 저장하면 3진수를 변환하고 뒤집는 과정을 한 번에 처리할 수 있다.


2. 나머지를 문자열에 저장하기

 
answer += str(n % 3)
 

n % 3을 통해 3으로 나눈 나머지를 구한다.

answer는 문자열이므로 str()을 사용하여 나머지를 문자로 변환한 뒤 순서대로 저장한다.

answer = ""

45 % 3 = 0  → answer = "0"
15 % 3 = 0  → answer = "00"
5  % 3 = 2  → answer = "002"
1  % 3 = 1  → answer = "0021"
 

최종적으로 answer에는 **뒤집힌 3진수인 "0021"**이 저장된다.


3. 숫자를 3으로 계속 나누기

 
n //= 3
 

//는 나눗셈의 몫만 구하는 연산자이다.

45 → 15 → 5 → 1 → 0
 

while n > 0 조건을 사용하여 n이 0이 될 때까지 반복한다.


4. 뒤집힌 3진수를 다시 10진수로 변환하기

 
int(answer, 3)
 

int(값, 진법)을 사용하면 특정 진법의 값을 10진수로 변환할 수 있다.

 
int("0021", 3)
 

0021을 3진법 숫자로 계산하면 다음과 같다.

0 × 3³
+ 0 × 3²
+ 2 × 3¹
+ 1 × 3⁰

= 0 + 0 + 6 + 1
= 7
 

따라서 최종 결과는 7이 된다.


💻 최종 코드

 
def solution(n):
    answer = ""

    while n > 0:
        answer += str(n % 3)
        n //= 3

    return int(answer, 3)
 

✏️ 오늘 배운 점

이번 문제를 통해 10진수를 다른 진법으로 변환할 때 나눗셈의 나머지를 활용할 수 있다는 점을 배웠다. 특히 3으로 나눈 나머지가 역순으로 생성된다는 특징을 이용하면 별도의 뒤집기 과정 없이 문제를 해결할 수 있다는 점이 인상적이었다.

 

또한 int(answer, 3)처럼 int() 함수의 두 번째 인자에 진법을 지정하면 해당 진법의 문자열을 간단하게 10진수로 변환할 수 있다는 점도 새롭게 알게 되었다.

 

태블로를 새롭게 배우게 되었는데 강의 초반부분을 들었는데 너무 재밌고 흥미로웠다