Programmers - 3진법 뒤집기(Java)
문제 설명
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- n은 1 이상 100,000,000 이하인 자연수입니다.
입출력 예
n | result |
---|---|
45 | 7 |
125 | 229 |
입출력 예 설명
입출력 예 #1
- 답을 도출하는 과정은 다음과 같습니다.
n (10진법) | n (3진법) | 앞뒤 반전(3진법) | 10진법으로 표현 |
---|---|---|---|
45 | 1200 | 0021 | 7 |
- 따라서 7을 return 해야 합니다.
입출력 예 #2
- 답을 도출하는 과정은 다음과 같습니다.
n (10진법) | n (3진법) | 앞뒤 반전(3진법) | 10진법으로 표현 |
---|---|---|---|
125 | 11122 | 22111 | 229 |
- 따라서 229를 return 해야 합니다.
✍ 코드 - 첫 번째 풀이
class Solution {
public int solution(int n) {
int answer = 0;
String ten_to_three = "";
// (1)
while (n > 0) {
int share = n / 3;
int remainder = n % 3;
if (remainder > 9) {
ten_to_three = (char) (remainder + 55) + ten_to_three;
} else {
ten_to_three = remainder + ten_to_three;
}
n = share;
}
// (2)
StringBuffer sb = new StringBuffer(ten_to_three);
String reverse_ten_to_three = sb.reverse().toString();
answer = Integer.parseInt(reverse_ten_to_three, 3);
return answer;
}
}
class Solution {
public int solution(int n) {
int answer = 0;
String ten_to_three = "";
// (1)
while (n > 0) {
int share = n / 3;
int remainder = n % 3;
if (remainder > 9) {
ten_to_three = (char) (remainder + 55) + ten_to_three;
} else {
ten_to_three = remainder + ten_to_three;
}
n = share;
}
// (2)
StringBuffer sb = new StringBuffer(ten_to_three);
String reverse_ten_to_three = sb.reverse().toString();
answer = Integer.parseInt(reverse_ten_to_three, 3);
return answer;
}
}
(1) : 10진수 n을 3진법으로 변환해서 ten_to_three에 대입
(2) : 구해진 3진법 ten_to_three를 뒤집기 위해 StringBuffer를 활용
✍ 코드 - 두 번째 풀이
// (1)
class Solution {
public int solution(int n) {
int answer = 0;
String ten_to_three = "";
// (2)
ten_to_three = Integer.toString(n, 3);
// (3)
StringBuffer sb = new StringBuffer(ten_to_three);
String reverse_ten_to_three = sb.reverse().toString();
answer = Integer.parseInt(reverse_ten_to_three, 3);
return answer;
}
}
// (1)
class Solution {
public int solution(int n) {
int answer = 0;
String ten_to_three = "";
// (2)
ten_to_three = Integer.toString(n, 3);
// (3)
StringBuffer sb = new StringBuffer(ten_to_three);
String reverse_ten_to_three = sb.reverse().toString();
answer = Integer.parseInt(reverse_ten_to_three, 3);
return answer;
}
}
(1) : 해당 문제는 다 Integer의 메소드만 사용해서 풀었다. 첫 번째 풀이보다 실행 기간이 비약적으로 줄어들었다.
(2) : 10진수 n을 3진법으로 변환해서 ten_to_three에 대입
(3) : 구해진 3진법 ten_to_three를 뒤집기 위해 StringBuffer를 활용
📝 결과
😃 느낀점
- 첫 번째 풀이에서의 결과는 통과는 했었어도, ms(실행 결과의 실행 속도)가 전반적으로 높게 측정됐다. 이 때문에 좀 더 ms를 줄이기 위해 for문을 대체할 Integer를 생각해냈다. 다행히 ms가 줄어들었다.
👍 Irish의 모든 코드 보기
-> Irish Github
Author And Source
이 문제에 관하여(Programmers - 3진법 뒤집기(Java)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@irish/Programmers-3진법-뒤집기Java저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)