728x90
문제
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
- 출력 예시 -
정답 코드
< 내 정답 코드 >
class Solution {
public int solution(int n) {
String str = "";
int answer = 0;
int j = 0;
while(3 <= n) {
str += n % 3 + "";
n /= 3;
}
str += n;
for (int i = str.length() - 1; i >= 0; i--) {
answer += (int) (Math.pow(3, i) * (str.charAt(j++) - '0'));
}
return answer;
}
}
< 타인 답변 코드 >
class Solution {
public int solution(int n) {
String a = "";
while(n > 0){
a = (n % 3) + a;
n /= 3;
}
a = new StringBuilder(a).reverse().toString();
return Integer.parseInt(a, 3);
}
}
이것을 주의하자!
- 기본적인 알고리즘은 다음과 같다.
(1) 해당 수를 3 으로 나눈 나머지를 String 문자열에 하나씩 더한다.
(2) 나눈 몫을 다시 n 으로 선언한다.
(3) 위 작업을 몫이 0이 되기 전까지 지속한다.
(4) 변환된 3진수 String 문자열을 다시 10 진수로 바꾼다.
- 내 코드는 너무 어렵게 생각했다. 타인 답변 코드를 보면 훨씬 간단하게 작성할 수 있다.
- 2진수, 3진수, 8진수, 16진수 등... 여러 진법들을 다시 10진수로 바꾸는 방법은 직접 계산할 수도 있지만, 메서드를 이용하면 간단하다. Integer.parseInt( a , n ) 으로 두번째 매개변수에 해당 진법이 무엇인지 넣으면 된다! 해당 문제에선 3진수를 10진수로 바꿔야 하니깐, Integer.parseInt( a, 3 ) 으로 작성하면 된다.
- 10진수를 다양한 진수로 바꾸는 메서드는 Integer.toBinaryString( ), Integer.toOctalString( ), Integer.toHexString( ) 이 있다.
'코딩 테스트' 카테고리의 다른 글
[프로그래머스] (Lv.1) 실패율 *** (0) | 2022.09.06 |
---|---|
[프로그래머스] (Lv.1) 약수의 개수와 덧셈 (1) | 2022.09.06 |
[프로그래머스] (Lv.1) 예산 (0) | 2022.09.04 |
[프로그래머스] (Lv.1) 두 개 뽑아서 더하기 (0) | 2022.09.04 |
[프로그래머스] (Lv.1) 2016년 (0) | 2022.09.04 |