학습/프로그래머스

[프로그래머스] 3진법 뒤집기(java)

태기 2023. 2. 20. 14:58

문제

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

 

프로그래머스

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

programmers.co.kr


나의 풀이

import java.util.ArrayList;
import java.util.List;

class Solution {
    public int solution(int n) {
        int answer = 0;
        int ternary = 3;
        List<Integer> list = new ArrayList<>();
        while (n > 0) {
            list.add(n % ternary);
            n /= ternary;
        }
        int num = 1;
        for (int i = list.size() - 1; i >= 0; i--) {
            answer += num * list.get(i);
            num *= ternary;
        }
        return answer;
    }
}

 

for문은 3진법을 계산하는 코드인데, 다른 사람의 풀이를 보니까 Integer.toString과 Integer.parseInt 메서드로 간단하게 하는 방법이 있었다. 그래서 다시 풀었다.

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

코드가 확실히 간단해졌다.

 

그런데, 테스트 결과는 내가 처음에 풀었던 코드가 평균 3배 이상 속도가 빨랐다. 

성능과 가독성 둘 중 하나 선택해야할듯.