|
[제한사항]
- n은 1 이상 100,000,000 이하인 자연수입니다.
[입출력 예]
추측)
3진법을 표현하려면 3으로 나눈 나머지를 각자리의 수로 목을 다시또 3으로 나눈 나머지를 수로 하므로 이를 통해 3진법을 구한다. 나온순서대로 저장하면 바로 앞뒤 반전된 체니까 자리를 바꾸진 않아도 되는데... 순서대로 저장하는 방법으로 배열말고 String한번 이용해보자 문자는 붙이는 게 편하니까
합계를 더할 변수를 선언해 주고
자리수만큼 for문을 돌리기 위해 문자열 길이 값을 구하고 해당 값 만큼 돌리면서
문자열을 역순으로 가져와 그 수를 10진법으로 되돌린다.
소스코드)
* 1차) 성공 [ 메모리: 74.7 MB, 시간: 1.72 ms ]
public int solution(int n) {
int answer = 0;
int num = 0;
String numString = "";
while(n > 0){
num = n % 3;
n /= 3;
numString += String.valueOf(num);
}
String numOne = "";
int numStringLen = numString.length();
for(int i=0; i<numStringLen; i++){
numOne = numString.substring(numStringLen-1-i, numStringLen-i);
int squareNum = (int) Math.pow(3, i);
int multiply = Integer.parseInt(numOne);
answer += squareNum * multiply;
}
return answer;
}
리뷰)
추측한 대로 구현한 편이지만 10진법 돌리는 걸 오랜만에 하니까 살짝 버벅였다; 기본적인 수학지식을 가지고 있는 게 평소 사고를 하는데 큰 도움이 될 거 같다.
사용한 함수)
1차)
* String.valueOf(x) : int x를 문자열로 바꿔준다.
* Math.pow(x, y) : x의 y승의 숫자를 구한다.
* Integer.parseInt(x) : String을 int로 변환한다.
'Coding Test > Algorithm' 카테고리의 다른 글
Programmers] 로또의 최고 순위와 최저 순위 (0) | 2022.11.21 |
---|---|
Programmers] 두 개 뽑아서 더하기 (0) | 2022.11.21 |
Programmers] 하샤드 수 (0) | 2022.11.19 |
Programmers] 콜라츠 추측 (0) | 2022.11.19 |
Programmers] 제일 작은 수 제거하기 (0) | 2022.11.19 |