[ Programmers ] 3진법 뒤집기 (Java)

1. Problem 📃

[ 3진법 뒤집기 ]
https://programmers.co.kr/learn/courses/30/lessons/68935


2. Constraint 🔗


3. Solution 🔑

  1. 입력 받은 수 n을 3보다 작을 때 까지 나눠서 answer이라는 문자열 변수에 담아준다
  2. 위에 과정을 통하면 자동으로 3진법이 반전된 상태로 들어간다.
  3. Integer.parseInt(진법으로 표현된 값이 존재하는 변수, 3)을 이용하여 다시 10진법으로 표현.

4. Code 💻


public class Solution {
	
	public int solution(int n) {
		String answer = "";
		
		while(n >= 3) {
			answer += n % 3;
			n /= 3;
		}
		answer += n;
		
		return Integer.parseInt(answer, 3);
	}
}

5. Growth 🍄

벨로그를 작성하면서 내가 옛날에 짠 코드를 보게 되는데 "이것을 더 줄일 수 없을까" 하고 다시 작성해보았다.

문자열 변수에 입력 받은 수(n)을 3으로 나눈 나머지를 answer변수에 더해주면서 붙여주고
나온 값은
Integer.parseInt(진법으로 표현된 변수, n진수) 를 이용하여 answer 변수를 n진수를 10진법으로 표현




내가 처음 작성한 코드 👶🏻

class Solution {
    public int solution(int n) {
    	int temp = n;
		int count = 1;
		while(temp >= 3) {
			temp = temp / 3;
			count++;
		}
    	int[] arr = new int[count];
        
    	int i = count;
    	while(i>0) {
    		arr[i-1] = n%3;
    		n = n/3;
    		i--;
    	}
    	int answer = 0;
    	for(int j = 0; j<count; j++) {
    		answer += Math.pow(3, j) * arr[j];
    	}
    	System.out.println(answer);
        return answer;
    }
}

메모리를 아껴보려고 3으로 몇번 나누어지는지 확인 후 횟수 만큼 진수를 담을 배열의 크기를 선언.
그 수를 3으로 나누어 나머지를 담아주고, for문을 통해 Math.pow(밑, 지수)를 입력해서 나오는 값을 모두 answer 변수에 담아주고 리턴하였었다.

좋은 웹페이지 즐겨찾기