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

ma.caron_g·2021년 5월 5일
0

Lv.1 - Programmers (완성)

목록 보기
13/74
post-thumbnail

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 변수에 담아주고 리턴하였었다.

profile
다른 사람이 만든 것을 소비하는 활동보다, 내가 생산적인 활동을 하는 시간이 더 많도록 생활화 하자.

1개의 댓글

comment-user-thumbnail
2021년 8월 30일

감사히 잘봤습니다.
코드 보면서 문제 풀다가 궁금한점이 생겼습니다.
answer이 string타입인데 어떻게 Integer.parseInt 시에 자동으로 일련의 숫자로 인식하고 10진법으로 바꿔주는건가요? 스트링 타입이면 각자릿수의 한자릿수 숫자의 배열로 인식하게되는것 아닌가요?

답글 달기