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
    
    
  'Algorithm 문제 풀이 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] Lv.2 : [1차] 캐시 - 자바[Java] (0) | 2022.10.07 | 
|---|---|
| [프로그래머스] Lv.1 : [1차] 다트 게임 - 자바[Java] (0) | 2022.10.07 | 
| [프로그래머스] Lv.1 : [1차] 비밀지도 - 자바[Java] (0) | 2022.10.04 | 
| [프로그래머스] Lv.1 : 소수 만들기 - 자바[Java] (1) | 2022.09.30 | 
| [프로그래머스] Lv.1 : 약수의 개수와 덧셈 - 자바[Java] (0) | 2022.09.30 |