문제 설명
자연수 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;
return answer;
}
}
정답 코드
더보기
class Solution {
public int solution(int n) {
int answer = 0;
int arr[]=new int[10000];
int cnt=0;
for(int i=0; i<arr.length; i++){
arr[i]=0;
}
for (int i = 0; i <arr.length; i++) {
arr[i] = n % 3;
n /= 3;
cnt++;
if(n==0) break;
}
int three = 1;
for (int i = cnt-1; i>=0; i--) {
answer += arr[i] * three;
three *= 3;
}
return answer;
}
}
코드 설명
배열의 방은 넉넉하게...^^ 잡아줬지만 쓸데 없이 포문이 돌아가지 않으려고 n==0이면 break를 줬다. n이 0이면 더 이상의 계산은 필요가 없기 때문이다. 이때 cnt가 자릿수를 계산하고, 나중에 10진법으로 바꿀 때 배열의 길이가 아닌 cnt의 수만큼 돌려주면 된다.
3진법은 n을 3으로 나눴을 때 나머지를 사용한다. 10진법으로 바꿀 때는 오른쪽부터 1, 3, 9 ... 이런 식으로 3의 배수씩 커진다. 따라서 three라는 변수를 사용해 3의 배수를 곱해준다. 뒤집는 일은 배열의 방번호를 거꾸로 하면 된다.
'programmers-코딩테스트 연습 > Level 1. 자바' 카테고리의 다른 글
2021-06-06 / 가운데 글자 가져오기 (0) | 2021.06.06 |
---|---|
2021-06-06 / 두 정수 사이의 합 (0) | 2021.06.06 |
2021-06-03 / 약수의 개수와 덧셈 (0) | 2021.06.03 |
2021-06-02 / 로또의 최고 순위와 최저 순위 (0) | 2021.06.02 |
2021-06-02 / 음양 더하기 (0) | 2021.06.02 |