Seren dev's blog

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명

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

 

풀이

숫자(10진법) -> 3진법으로 변환 -> 앞 뒤 반전 -> 3진법을 10진법으로 변환

 

10진법을 3진법으로 변환할 때는 StringBuilder형 변수 sb를 사용하여 n를 3으로 나눈 나머지를 sb에 추가한다.

만약 n = 45라면 sb는 "0021"이 된다.

sb에 저장된 문자열 "0021"을 10진법으로 변환하기 위해 sb를 뒤집고 10진법으로 변환한다.

 

코드

class Solution {
    public int solution(int n) {
        int answer = 0;
        
        StringBuilder sb = new StringBuilder();
        while (n > 0) {
            sb.append(n % 3);
            n /= 3;
        }
        
        String str = sb.reverse().toString();
        int tmp = 1;
        
        for (int i = 0; i < str.length(); i++) {
            int num = str.charAt(i) - '0';
            answer += num * tmp;
            tmp *= 3;
        }
        
        return answer;
    }
}

 


다른 풀이



class Solution {
    public int solution(int n) {
        int answer = 0;
        
        StringBuilder sb = new StringBuilder();
        while (n > 0) {
            sb.append(n % 3);
            n /= 3;
        }
        
        String str = sb.toString();
        return Integer.parseInt(str,3);
    }
}

3진법에서 10진법으로 변환할 때는 Integer.parseInt(String s, int radix) 을 사용한다.

만약 n = 45라면 sb는 "0021"이 되어 뒤집기가 이미 되어 있으므로, sb를 따로 reverse()를 할 필요가 없다.

728x90
profile

Seren dev's blog

@Seren dev

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!