자바 프로그래머즈 3진법 뒤집기

박우현 (Joshua)·2023년 4월 8일
0

알고리즘 문제

목록 보기
3/4

🔢 3진법 뒤집기

알고리즘 링크

📌 접근 방식 :

위의 문제는 자연수 n을 3진법 표기로 전환 후, 앞뒤로 뒤집은 다음 다시 10진법으로 표기하는 알고리즘이다.

위의 문제를 풀기위해서 일단 3진법이 무엇인지 알아야한다. 3진법이란, 2진법과 비슷한 개념인데, 2진법이 0과 1만 사용하여 표기 한다면, 3진법은 0,1,그리고 2를 사용해서 표기한다. 또한, 2진법은 오른쪽에서 왼쪽으로 2의 제곱만큼 커져간다면, 3진법은 3의 제곱만큼 커져간다.

그래서 이 문제를 해결하기 위해 여러가지 방식을 시도해보았다.
1. % 연산과, Math.pow()메서드를 사용하여 n을 3진법으로 바꾼 후, String 문자열에 넣어, str.charAt()메서드를 사용해 다른 문자열에 뒤집에서 저장 후, Integer.parseInt() 방식으로 다시 10진수로 바꾸었다. 테스트에서는 통과 하였으나, 채점에서 오류가 나서 다른 방식을 찾아보았다.
.
2. 이 후, % 연산과 / 연산을 사용해 String에 대입하는 방식으로 3진법과 뒤집는 절차를 한 반복문에 하였다. 그 후, Integer.parseInt() 방식으로 다시 10진수로 바꾸었다. 이 방식으로 채점에 성공하였다.
.
3. Integer.parseInt()메서드를 찾던 중, Integer.toString()이라는 메서드를 알게되어 n 을 바로 String에 넣고 Integer.toString() 메서드를 사용해 3진법으로 바꾼 후, 반복문으로 문자열을 뒤집고, Integer.parseInt()메서드로 다시 10진수로 바꾸었다. 이 방식도 채점에 성공하였다.

📌 코드 :

1번 방식은 채점이 안되었으니 올리지 않겠다.

import java.util.*;
//3번 방식
class Solution {
    public int solution(int n) {
        int answer = 0;
        String str = Integer.toString(n,3);
        String reverse = "";
        for (int i = str.length()-1; i>=0; i--){
            reverse += str.charAt(i);
        }
        //10 진법으로 변경
        
        answer = Integer.parseInt(reverse,3);
        return answer;
    }
}
// 2번 방식
// class Solution {
//     public int solution(int n) {
//         int answer =0;
//         String str = "";
//         while(n>0){
//             str += n%3;
//             n/=3;
//         }
//         answer = Integer.parseInt(str, 3);
//         return answer;
//     }
// }    
profile
매일 매일 성장하자

0개의 댓글