문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/68935

제한 사항

입출력 예

풀이
import java.util.ArrayList;
import java.util.Collections;
class Solution {
public int solution(int n) {
int answer = 0;
StringBuilder result = new StringBuilder();
ArrayList<Integer> powList = new ArrayList<>();
for (int i = 1; i < n; i++) {
int p = (int) Math.pow(3, i);
if (p <= n) powList.add(p);
else break;
}
Collections.reverse(powList);
for (Integer i : powList) {
if (n - i < 0) result.append(0);
else {
n -= i;
if (i <= n) {
n -= i;
result.append(2);
}
else result.append(1);
}
}
result.append(n);
String strResult = result.reverse().toString();
for (int i = 0; i < strResult.length() - 1; i++) {
answer += powList.get(i) * Character.getNumericValue(strResult.charAt(i));
System.out.println(powList.get(i) * Character.getNumericValue(strResult.charAt(i)));
}
answer += Character.getNumericValue(result.charAt(strResult.length() - 1));
return answer;
}
}
후기
Integer.parseInt() 메서드에 진법 변환하는 기능이 있었다... 그리고 굳이 3진법을 구하지 않고 3진법 뒤집은 것을 바로 구할 수가 있었다. n에 3의 배수를 차례대로 나눠서 그 나머지를 나열하면 바로 뒤집어진 수가 나오는데 아직 이해가 잘 안 된다... 조금 생각해봐야겠다.
'코딩테스트 (프로그래머스) > Java' 카테고리의 다른 글
| [프로그래머스][JAVA][Lv. 1] 체육복 (0) | 2023.07.16 |
|---|---|
| [프로그래머스][JAVA][Lv. 1] 실패율 (0) | 2023.07.16 |
| [프로그래머스][JAVA][Lv. 1] 키패드 누르기 (0) | 2023.07.14 |
| [프로그래머스][JAVA][Lv. 0] 옹알이 (1) (0) | 2023.07.12 |
| [프로그래머스][JAVA][Lv. 0] 주사위 게임 3 (0) | 2023.07.12 |