반응형
문제설명
- 자연수 n이 매개변수로 주어집니다.
- n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- n은 1 이상 100,000,000 이하인 자연수입니다.
입출력 예
45 | 7 |
125 | 229 |
[ 내가 푼 방법 ]
class Solution {
public int solution(int n) {
int answer = 0;
//1. 3진법으로 변환 & 역전
String threeN = "";
while (n > 0){
threeN += n % 3;
n = n / 3;
}
//2. 10진법으로 변환
char[] chars = threeN.toCharArray();
int cnt = chars.length-1;
for (int i=0; i<chars.length; i++){
answer += Character.getNumericValue(chars[i]) * Math.pow(3,cnt);
cnt--;
}
return answer;
}
}
순서대로 3진법으로 만든 후 값을 역전시키고, 다시 10진법을 만들기로 함
1. threeN이라는 문자열에 n을 3으로 나눈 나머지를 더해줌 ( 이 자체로 3진법 변환 & 역전까지 한 값이 됨)
→ 정수 n 을 3진법으로 변환하는 방법은 n 을 3으로 나눈 나머지를 거꾸로 입력해주는것
ex) n = 11 인경우 3진법으로 변환 → 102
3 | 11
ㅡㅡㅡ
3 | 3 --- 2
ㅡㅡㅡ
| 1 --- 0
ㅡㅡㅡ
2. 3진법의 역전된 수를 10진법으로 변환해줌
char 형의 값을 int 형으로 변환하기 위한 메서드 : Charcter.getNumbericValue(char타입)
거듭 제곱 구하는 메서드 : Math.pow(아래 정수값, 위 지수 값)
ex) Math.pow(2, 3) -> 2의 3제곱 -> 8
[ 다른 풀이방법 ]
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);
}
}
→ Integer.parseInt("문자열숫자 a" , 진수); -> 해당 진수의 값 a를 10진수로 변환해준다!!
※ Integer 클래스 이용하여 10진수를 2진수, 8진수, 16진수로 변환해주기
//a는 문자열 숫자
//10진수 -> 2진수
Integer.toBinaryString(a);
//10진수 -> 8진수
Integer.toOctalString(a);
//10진수 -> 16진수
Integer.toHexString(a);
반응형
'프로그래머스' 카테고리의 다른 글
[프로그래머스] 두 개 뽑아서 더하기 - Java(자바) (0) | 2022.10.30 |
---|---|
[프로그래머스] 나누어 떨어지는 숫자 배열 - Java(자바) (0) | 2022.10.18 |
[프로그래머스] 예산 - Java(자바) (0) | 2022.10.10 |
[프로그래머스] 같은 숫자는 싫어 (Queue, Stack) - Java(자바) (2) | 2022.10.05 |
[프로그래머스] 이상한 문자 만들기 - Java(자바) (0) | 2022.08.24 |