본문 바로가기
Algorithm

[프로그래머스] 1️⃣ 3진법 뒤집기(Java)

by 옥돔이와 연근이 2025. 4. 2.
728x90
반응형

# 3진법 뒤집기

[https://school.programmers.co.kr/learn/courses/30/lessons/68935](https://school.programmers.co.kr/learn/courses/30/lessons/68935)

---

### **문제 설명**

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

---

### 제한사항

-   n은 1 이상 100,000,000 이하인 자연수입니다.

---

### 입출력 예

n result

| 45 | 7 |
| --- | --- |
| 125 | 229 |

---

### 입출력 예 설명

입출력 예 #1

-   답을 도출하는 과정은 다음과 같습니다.

n (10진법) n (3진법) 앞뒤 반전(3진법) 10진법으로 표현

| 45 | 1200 | 0021 | 7 |
| --- | --- | --- | --- |

-   따라서 7을 return 해야 합니다.

입출력 예 #2

-   답을 도출하는 과정은 다음과 같습니다.

n (10진법) n (3진법) 앞뒤 반전(3진법) 10진법으로 표현

| 125 | 11122 | 22111 | 229 |
| --- | --- | --- | --- |

-   따라서 229를 return 해야 합니다.

---

💡 문자열 뒤집기

```
// 문자열        
String str = "ABCDE";     

// 문자열 reverse        
StringBuffer sb = new StringBuffer(str);        
String reverse = sb.reverse().toString();
```

💡 char type → String type 형변환

```
String.valueOf(s.charAt(s.length()-1-i));
```

💡 거듭제곱 계산 함수

```
// 3^i 
Math.pow(3,i)
```

---

```
import java.util.*;

class Solution {
    /*
        1. n을 3으로 나눈 나머지를 문자열에 차례대로 저장
        2. 문자열 reversed를 통해서 뒤집
        3. 뒤집은 문자열의 뒤 s.length()-1 부터 Integer.parseInt()로 변환 후 계산
    */
    public int solution(int n) {
        int answer = 0;
        String s = "";
        StringBuilder sb = new StringBuilder(s);


        // #1
        while (n > 0){
            s+=Integer.toString(n%3);
            n/=3;
        }

        // #2 (이미 뒤집힌 상태로 저장됐기 때문에 생략)

        // #3
        for (int i = 0; i < s.length(); i++){
           answer += Math.pow(3,i) * Integer.parseInt(String.valueOf(s.charAt(s.length()-1-i)));
        }

        return answer;
    }
}
```

728x90