***** 문제 설명 *****
자연수 n이 매개변수로 주어집니다.
n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
***** 제한사항 *****
n은 1 이상 100,000,000 이하인 자연수입니다.
***** 문제풀이 *****
이번문제의 경우에는 저도 검색의 도움을 많이 받았습니다.
대신 원리를 공부하는 쪽으로 진행했던 문제로
낮선 3진법이라는 용어가 어렵게 느껴졌던 것 같습니다.
사실 진법이라는 것은 초등학교때 배우는 쉬운 개념이지만 현제 실생활에서 사용되지 않으며
10진법에 녹아있는 우리들의 특성 상 낯설게 다가왔던것 같습니다.
1
2
3
4
5
6
7
8
9
10
11
|
public static int solution(int n) {
int answer = 0;
ArrayList list = new ArrayList();
if( n == 0 ){ return answer; }
while ( n > 0 ){
list.add(n % 3);
n /= 3;
}
answer = Integer.parseInt(String.valueOf(list.stream().map(String::valueOf).collect(Collectors.joining())), 3);
return answer;
}
|
cs |
해당 로직의 설명은 다음과 같습니다.
1. if문에서 주어지는 수가 0인 경우 거르기 (다만 제한사항에 이미 1 이상의 수로 주어지기 때문에 사실 상 필요없는 로직)
2. while문의 경우에는 n의 값을 3진법으로 만들고 그 수를 list안에 하나하나 담는 로직 입니다.
이러한 방법으로 3진법을 만들면 따로 뒤집지 않아도 뒤집힌체 숫자가 list안에 저장됩니다.
3. list에 있는 수의 경우에 Integer.parseInt안에 넣고 뒤에 인자를 하나 더 집어넣으면 인자값의 진법으로 변경해주는 기능이 있습니다.
해당 로직을 사용하여 3진법으로 다시 변경하면 10진법으로 변경하는 것 과 같은 로직이 됩니다.
...
저도 3번 로직에서 3진법으로 변경을하는데 왜 다시 10진법으로 변경이 되는가에 대해서 이해를 완벽하게 하고 넘어가지는 못했는데...
Integer함수에 들어가 로직을보면서 따라가보니 조금은 이해가 되는것 같습니다.
해당로직이 어렵다면 동일하게 Integer함수에 들어가 디버깅을 해보는것도 좋을 것 같습니다.
'Algorithm & Data Structure > Algorithm' 카테고리의 다른 글
[프로그래머스] 자릿수 구하기 .with Swift (0) | 2024.05.29 |
---|---|
[프로그래머스]문자열 나누기 with Swift (0) | 2024.05.28 |
[프로그래머스] 같은 숫자는 싫어 문제 풀이 (1) | 2023.11.20 |
[프로그래머스] 문자열 다루기 기본 풀이 (0) | 2023.11.16 |
[프로그래머스] 문자열 내림차순으로 배치하기 풀이 (0) | 2023.11.15 |