배열과 컬렉션 언제 사용할지, 3진법 뒤집기

이해찬·2023년 8월 19일
0

항해일지

목록 보기
19/35

배열과 컬렉션

📟시도 - 배열로 문제풀이

import java.util.*;

class Solution {
    public int solution(int n) {
        int answer = 0;
        int count = 0;
        
        int[] arr = new int[count];
        
        
        while(n != 0){
            arr[count] = n%3;
            n = n/3;
            count++;
        }
        
        Arrays.sort(arr, Comparator.reverseOrder());
        
        for(int i=0; i<arr.length; i++){
            answer += 3^i * arr[i];
        }
        
        return answer;
    }
}

🤷‍ 문제점

위에 카운터를 선언한 시점에서 배열은 이미 0으로 고정 -> 바꿀 수 없다.
while문에서 반영된 카운트를 넣으려면 동적 배열인 컬렉션을 사용해야한다.
Arrays.sort(arr); ,Arrays.sort(arr, Comparator.reverseOrder()); 배열을 오름차순, 내림차순으로 재배열 시켜주는 메서드, -> 내림차순은 오직 래퍼타입 배열만 사용가능 -> 기본타입 사용 불가능

여기서는 배열이 아닌, 컬렉션 리스트와 내림차순 사용

배열
Arrays.sort(arr) -> 오름차순
Arrays.sort(arr, Comparator.reverseOrder()) -> 내림차순(래퍼타입만 가능)


컬렉션
Collections.sort(list) -> 오름차순
Collections.sort(list, Collections.reverseOrder()) -> 내림차순

Collections.reverse(list) -> 리스트 뒤집는 라이브러리 메서드 / 배열은 x

💻수정

import java.util.*;

class Solution {
    public int solution(int n) {
        int answer = 0;
        int count = 0;
        
        List<Integer> arr = new ArrayList<>();
        
        
        while(n != 0){
            arr.add(n%3);
            n = n/3;
            count++;
        }
        
        Collections.reverse(arr);
        
        for(int i=0; i<arr.size(); i++){
            answer += Math.pow(3, i) * arr.get(i);
        }
        
        return answer;
    }
}

3승을 표현하기 위해서 Math.pow(3, i) 사용

profile
디자인에서 개발자로

0개의 댓글