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

김아무개·2023년 3월 26일
0

프로그래머스

목록 보기
9/41

ㅋㅋ
난 정말 힘들게 풀었는데
Integer 클래스 활용을 제대로 하지 못해서 고생한 거였다 🤣
그리고 너무 어렵게 생각했던것도 한몫함..😔

다른사람 코드 _ 프로그래머스 다른사람풀이 첫번째 두번째 합침

class Solution {
    public int solution(int n) {
        int answer = 0;
        String third = Integer.toString(n, 3);
        StringBuffer sb = new StringBuffer(third);
        String reversed = sb.reverse().toString();
		answer = Integer.parseInt(reversed, 3);

        return answer;
    }
}

헛웃음만 나온다 진짴ㅋㅋㅋㅋ

위에 코드는 한줄로도 됨..

class Solution {
    public int solution(int n) {
    	return Integer.parseInt(new StringBuffer(Integer.toString(n, 3)).reverse().toString(), 3);
	}
}

그리고 계산 하는 방법도 배울 수 있었다. _ 프로그래머스 다른사람 코드 첫번째

String a = "";
while(n > 0){
	a = (n % 3) + a;
	n /= 3;
}

이렇게 하면 쉽게 3진수로 계산이 되었다.
뒤집힌 3진수를 만들려면

String a = "";
while(n > 0){
	a += n % 3;
	n /= 3;
}

이렇게 a 문장만 바꿔주면 된다.


메모 📝

StringBuffer 클래스 활용 _ 문자열 뒤집기

new StringBuffer(" str ").reverse().toString();

Integer 클래스 활용 _ 진수 변환

n = 10진수 숫자

// 3진수로 변환
String str = Integer.toString(n, 3);

// 3진수 문자열을 10진수로 변환
int num = Integer.parseInt(str, 3);

나눗셈으로 진수 변환하기

String a = "";
while(n > 0){
	a = (n % 3) + a;
	n /= 3;
}

내 코드 😔

class Solution {
    public int solution(int n) {
        int answer = 0;

        int base = 3;
        String samJinSu = makeReverseSamJinSu(n, 1, base, "");
        
        answer = Integer.parseInt(samJinSu.substring(samJinSu.length()-1));
        for (int i = samJinSu.length() - 2; i >= 0; i--) {
            answer += Integer.parseInt(samJinSu.charAt(i) + "") * base;
            base *= 3;
        }

        return answer;
    }
    
    String makeReverseSamJinSu(int num, int x, int base, String result) {
        if (num / x < base) {
            result = num / x + result;

            if (num % x != 0) {
                num = num % x;
                x /= base;
            } else {
                return result;
            }
        } else {
            if (!"".equals(result)) result = 0 + result;
            x *= base;
        }

        return makeReverseSamJinSu(num, x, base, result);
    }
}

코드 작성 다 하고 정답 떠서 엄청 뿌듯했는데~~ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
두시간 걸림 🥲
심지어 메모도 했는뎅..........

오늘의 배운점 :
제공되는 클래스를 잘 활용하자!
고민을 조금 더 해보고 문제를 풀자


처음 풀어본 날 : 23.03.26 ~ 28

profile
Hello velog! 

0개의 댓글