Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Tags more
Archives
Today
Total
관리 메뉴

공부블로그

[프로그래머스] 3진법 뒤집기 본문

IT/알고리즘

[프로그래머스] 3진법 뒤집기

So1_b 2022. 6. 11. 17:58

https://programmers.co.kr/learn/courses/30/lessons/68935

 

코딩테스트 연습 - 3진법 뒤집기

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

programmers.co.kr

 

public int solution(int n) {
        
        int answer = 0;
	        String s = "012";
	        StringBuilder sb=new StringBuilder();
	        
	        while(true){

	        	if(n<3){
	        		sb.append(n);
	        		break;
	        	}
	        	
	            sb.append(s.charAt(n%3));   //나머지 
	            n /= 3; //몫
	        }
	        
	        int num = sb.length()-1;
	        
	        for(int i=num; i>=0; i--){
	            answer+=(sb.charAt(i)-48)*Math.pow(3,num-i);
	        }
	        return answer;
    }

개선+배운 점

 > 3진법은 0~2만 사용하기 때문에 굳이 String s에서 charAt()을 할 필요 없음

    그냥 몫%3만 저장하면 됨.

 > 10진법 -> n진법으로 변환 시 몫이 n보다 작을 경우 몫=0 나머지=그대로 n을 반환.

위 문제에서는 뒤집어 10진법으로 고치는데 이때  몫이 자리값을 차지해 결과적으로 3을 더 곱한 값을 반환했음. 

Comments