https://school.programmers.co.kr/learn/courses/30/lessons/68935
문제 설명
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
풀이
숫자(10진법) -> 3진법으로 변환 -> 앞 뒤 반전 -> 3진법을 10진법으로 변환
10진법을 3진법으로 변환할 때는 StringBuilder형 변수 sb를 사용하여 n를 3으로 나눈 나머지를 sb에 추가한다.
만약 n = 45라면 sb는 "0021"이 된다.
sb에 저장된 문자열 "0021"을 10진법으로 변환하기 위해 sb를 뒤집고 10진법으로 변환한다.
코드
class Solution {
public int solution(int n) {
int answer = 0;
StringBuilder sb = new StringBuilder();
while (n > 0) {
sb.append(n % 3);
n /= 3;
}
String str = sb.reverse().toString();
int tmp = 1;
for (int i = 0; i < str.length(); i++) {
int num = str.charAt(i) - '0';
answer += num * tmp;
tmp *= 3;
}
return answer;
}
}
다른 풀이
class Solution {
public int solution(int n) {
int answer = 0;
StringBuilder sb = new StringBuilder();
while (n > 0) {
sb.append(n % 3);
n /= 3;
}
String str = sb.toString();
return Integer.parseInt(str,3);
}
}
3진법에서 10진법으로 변환할 때는 Integer.parseInt(String s, int radix) 을 사용한다.
만약 n = 45라면 sb는 "0021"이 되어 뒤집기가 이미 되어 있으므로, sb를 따로 reverse()를 할 필요가 없다.
728x90
'Algorithm 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.2 : [1차] 캐시 - 자바[Java] (0) | 2022.10.07 |
---|---|
[프로그래머스] Lv.1 : [1차] 다트 게임 - 자바[Java] (0) | 2022.10.07 |
[프로그래머스] Lv.1 : [1차] 비밀지도 - 자바[Java] (0) | 2022.10.04 |
[프로그래머스] Lv.1 : 소수 만들기 - 자바[Java] (1) | 2022.09.30 |
[프로그래머스] Lv.1 : 약수의 개수와 덧셈 - 자바[Java] (0) | 2022.09.30 |