Today
-
Yesterday
-
Total
-
  • 프로그래머스 : 3진법 뒤집기
    코딩테스트 문제 풀이/프로그래머스 2023. 11. 22. 01:01

    ㅋㅋ 난 정말 힘들게 풀었는데 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

Designed by Tistory / Custom by 얼거스