# 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;
}
}
```
'Algorithm' 카테고리의 다른 글
[프로그래머스] 2️⃣ 문자열 압축 (Java) (0) | 2025.04.02 |
---|---|
[프로그래머스] 2️⃣ 이진 변환 반복하기(Java) (0) | 2025.04.02 |
[프로그래머스] 1️⃣ 모의고사 (Java) (0) | 2025.04.02 |
[프로그래머스] 2️⃣ 3월에 태어난 여성 회원 목록 출력하기 (0) | 2025.04.02 |
[프로그래머스] 4️⃣ 특정 세대의 대장균 찾기 (0) | 2025.04.01 |