문제 설명
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
n은 1 이상 100,000,000 이하인 자연수입니다
1.차 시도
import java.util.*;
class Solution {
public int solution(int n) {
int answer = 0;
List<Integer> result = new ArrayList<>();
while(n/3!=0){
result.add(n%3);
}
for(int i=0; i<result.size();i++){
answer += result.get(i)*Math.pow(3,i);
}
return answer;
}
}
ㅋㅋㅋㅋㅋㅋㅋㅋ
무한루프에 빠져 메모리 한도를...
2차시도
import java.util.*;
class Solution {
public int solution(int n) {
int answer = 0;
List<Integer> result = new ArrayList<>();
while(true){
if(n<3){
result.add(n);
break;
}
result.add(n%3);
n= n/3;
}
for(int i=0; i<result.size();i++){
answer += result.get(i)*Math.pow(3,i);
}
return answer;
}
설계
1.10진수를 ->3진수 변환
👍3진수 역순
temp[] ={0,0,2,1}
answer = (03^3)+(03^2)+(23^1)+(13^0)
그렇담
👍3진수
temp[] ={1,2,0,0}
answer = (13^0)+(23^1)+(03^2)+(03^3)
더하기 순서가 상관없다면 , 3진수 그대로 10진수로 바꿔도 되지않나?
오히려 이게 더 깔끔하게 반복문도 사용가능 할것같아
3진수 ->10진수 로 했지만 케이스 1개만 통과했다 -ㅁ - ㅋㅋㅋ
import java.util.*;
class Solution {
public int solution(int n) {
int answer = 0;
List<Integer> result = new ArrayList<>();
while(true){
if(n<3){
result.add(n);
break;
}
result.add(n%3);
n= n/3;
}
for(int i=0; i<result.size();i++){
answer += result.get(i)*Math.pow(3,result.size()-1-i);
}
return answer;
}
}