[알고리즘] 프로그래머스 3진법 뒤집기

hyewon jeong·2023년 1월 13일
0

알고리즘

목록 보기
10/13
post-custom-banner

1 3진법 뒤집기


2 문제

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

제한사항
n은 1 이상 100,000,000 이하인 자연수입니다


3 풀이

1.차 시도

import java.util.*;
class Solution {
    public int solution(int n) {
        int answer = 0;
       List<Integer> result = new ArrayList<>();
        
        while(n/3!=0){
            result.add(n%3);
        }
        
        for(int i=0; i<result.size();i++){
            answer += result.get(i)*Math.pow(3,i); 
        }
        
        return answer;
    }
}


ㅋㅋㅋㅋㅋㅋㅋㅋ
무한루프에 빠져 메모리 한도를...

2차시도

import java.util.*;
class Solution {
    public int solution(int n) {
        int answer = 0;
       List<Integer> result = new ArrayList<>();

        while(true){
            if(n<3){
                result.add(n);
                break;
            }
            result.add(n%3);
            n= n/3;
        }
        
        for(int i=0; i<result.size();i++){
            answer += result.get(i)*Math.pow(3,i); 
        }
        
        return answer;
    }

설계
1.10진수를 ->3진수 변환
👍3진수 역순
temp[] ={0,0,2,1}
answer = (03^3)+(03^2)+(23^1)+(13^0)

그렇담
👍3진수
temp[] ={1,2,0,0}
answer = (13^0)+(23^1)+(03^2)+(03^3)
더하기 순서가 상관없다면 , 3진수 그대로 10진수로 바꿔도 되지않나?
오히려 이게 더 깔끔하게 반복문도 사용가능 할것같아
3진수 ->10진수 로 했지만 케이스 1개만 통과했다 -ㅁ - ㅋㅋㅋ


4 소스 코드

import java.util.*;
class Solution {
    public int solution(int n) {
        int answer = 0;
       List<Integer> result = new ArrayList<>();

        while(true){
            if(n<3){
                result.add(n);
                break;
            }
            result.add(n%3);
            n= n/3;
        }
        
        for(int i=0; i<result.size();i++){
            answer += result.get(i)*Math.pow(3,result.size()-1-i); 
        }
        
        return answer;
    }

}
    
profile
개발자꿈나무
post-custom-banner

0개의 댓글