안녕하세요.
40회차 과제 "3진법 뒤집기"입니다.
문제 설명
자연수 n이 매개변수로 주어집니다.
n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
제한 사항
n은 1 이상 100,000,000 이하인 자연수입니다.
나의 풀이
import java.util.ArrayList;
class Solution {
public int solution(int n) {
int answer = 0;
int remain = 0;
ArrayList<Integer> ternary = new ArrayList<>();
ArrayList<Integer> decimal = new ArrayList<>();
// 10진법을 3진법으로 변환
while(n!=0){
remain = n%3;
n /= 3;
ternary.add(remain);
}
int cnt = ternary.size() -1;
// 3진법을 10진법으로 변환
for(int i=0; i<ternary.size(); i++){
// Math.pow : 거듭재곱 계산 메서드
decimal.add((int) (ternary.get(i) * Math.pow(3,cnt)));
answer += decimal.get(i);
cnt--;
}
return answer;
}
}
다른 사람의 풀이
class Solution {
public int solution(int n) {
String str = "";
// 10진법을 3진법으로 변환
while (n != 0) {
str += n % 3;
n /= 3;
}
// str 문자열을 3진법으로 해석하여 10진법으로 반환
return Integer.parseInt(str, 3);
}
}
배운 것
Math.pow : 거듭제곱 계산 메서드
Integer.parseInt(str, 3) : String 문자열을 3진법으로 해석하고 그 수를 10진법으로 반환
String은 문자열이기 때문에 덧셈으로 표현해도 덧셈이 되지 않고 덧붙이기가 된다는 것을 확인
저처럼 처음해보시는 분들에게 이 글이 조금이나마 도움이 되었으면 좋겠습니다.
'내일배움캠프 > Daily Routine (알고리즘)' 카테고리의 다른 글
[내일배움캠프] 알고리즘 Daily Routine 42. 삼총사 (1) | 2024.09.27 |
---|---|
[내일배움캠프] 알고리즘 Daily Routine 41. 이상한 문자 만들기 (0) | 2024.09.26 |
[내일배움캠프] 알고리즘 Daily Routine 39. 최대공약수와 최대공배수 (0) | 2024.09.24 |
[내일배움캠프] 알고리즘 Daily Routine 38. 직사각형 별찍기 (0) | 2024.09.24 |
[내일배움캠프] 알고리즘 Daily Routine 37. 행렬의 덧셈 (0) | 2024.09.23 |
댓글