본문 바로가기
내일배움캠프/Daily Routine (알고리즘)

[내일배움캠프] 알고리즘 Daily Routine 40. 3진법 뒤집기

by TIP__ 2024. 9. 25.

안녕하세요.
40회차 과제 "3진법 뒤집기"입니다.

문제 설명

자연수 n이 매개변수로 주어집니다.

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

제한 사항

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

나의 풀이

import java.util.ArrayList;
class Solution {
    public int solution(int n) {
        int answer = 0;
        int remain = 0;
        ArrayList<Integer> ternary = new ArrayList<>();
        ArrayList<Integer> decimal = new ArrayList<>();
        // 10진법을 3진법으로 변환
        while(n!=0){
            remain = n%3;
            n /= 3;
            ternary.add(remain);
        }
        int cnt = ternary.size() -1;
        // 3진법을 10진법으로 변환
        for(int i=0; i<ternary.size(); i++){
            // Math.pow : 거듭재곱 계산 메서드
            decimal.add((int) (ternary.get(i) * Math.pow(3,cnt)));
            answer += decimal.get(i);
            cnt--;
        }
        return answer;
    }
}

 

 

다른 사람의 풀이

class Solution {
    public int solution(int n) {
        String str = "";
		// 10진법을 3진법으로 변환
        while (n != 0) {
            str += n % 3;
            n /= 3;
        }
        // str 문자열을 3진법으로 해석하여 10진법으로 반환
        return Integer.parseInt(str, 3);
    }
}

 

배운 것

Math.pow : 거듭제곱 계산 메서드

Integer.parseInt(str, 3) : String 문자열을 3진법으로 해석하고 그 수를 10진법으로 반환

 

String은 문자열이기 때문에 덧셈으로 표현해도 덧셈이 되지 않고 덧붙이기가 된다는 것을 확인

 

저처럼 처음해보시는 분들에게 이 글이 조금이나마 도움이 되었으면 좋겠습니다.

댓글