문제
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배 이상 속도가 빨랐다.
성능과 가독성 둘 중 하나 선택해야할듯.
'학습 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 두 개 뽑아서 더하기(java) (0) | 2023.02.23 |
---|---|
[프로그래머스] 카드 뭉치(java) (0) | 2023.02.21 |
[프로그래머스] 내적(java) (0) | 2023.02.16 |
[프로그래머스] 신규 아이디 추천(java) (0) | 2023.02.15 |
[프로그래머스] 음양 더하기(java) (0) | 2023.02.13 |