본문 바로가기

프로그래머스(Java)/Level 1

[프로그래머스] [PCCE 기출문제] 10번 / 데이터 분석

728x90

코드 힌트

  1. 필터링:
    • 입력된 데이터 중에서 특정 조건을 만족하는 항목들만 선택합니다.
    • 예를 들어, 주어진 기준 값 이하인 항목들만 선택하여 새로운 리스트에 저장합니다.
  2. 배열 변환:
    • 필터링된 데이터를 리스트에서 이차원 배열로 변환합니다.
    • 몇 개의 데이터가 들어올지 모르기 때문에 List를 사용합니다.
  3. 정렬:
    • 정렬 기준에 따라 데이터를 정렬합니다.
    • 예를 들어, "날짜"나 "코드" 등을 기준으로 배열을 오름차순으로 정렬합니다.
    • 오름차순 : 1, 4, 6, 10, 46, 100 처럼 작은 숫자에서 큰 숫자로 정렬하는 것
  4. 정렬 방법:
    • 배열의 요소들을 비교하여 올바른 위치에 삽입하는 방식으로 정렬합니다.
    • 이 과정에서 각 요소의 값을 비교해가며 데이터를 정리합니다.
    • sort()로 하셔도 되지만 따로 메소드를 만들어서 정렬하셔도 좋습니다.

 

 


정답은 더보기 클릭

더보기
import java.util.*;

class Solution {
    public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
        // 필터링된 데이터를 저장할 리스트 생성
        List<int[]> list = new ArrayList<>();
        
        // 필터링 기준 인덱스 설정
        int compareIndex = getIndex(ext);
        
        // 필터링: 데이터에서 특정 기준 값 이하의 항목만 선택
        for (int[] datum : data) {
            if (datum[compareIndex] <= val_ext) {
                list.add(datum);
            }
        }
        
        // 필터링된 결과를 배열로 변환
        int[][] result = new int[list.size()][4];
        for (int i = 0; i < list.size(); i++) {
            result[i] = list.get(i);
        }
        
        // 정렬 기준 인덱스 설정
        int sortedIndex = getIndex(sort_by);
        
        // 배열을 정렬하는 메서드 호출
        sortedArr(result, sortedIndex);
        
        // 최종 결과 반환
        return result;
    }
    
    // 기준 인덱스를 반환하는 메서드
    public int getIndex(String key) {
        switch (key) {
            case "code": return 0;
            case "date": return 1;
            case "maximum": return 2;
            case "remain": return 3;
            default: return -1;
        }
    }
    
    // 배열을 삽입 정렬하는 메서드
    public void sortedArr(int[][] arr, int index) {
        for (int i = 1; i < arr.length; i++) {
            int[] target = arr[i];
            int j = i - 1;
            
            // 삽입 위치를 찾기 위해 배열 요소를 비교
            while (j >= 0 && arr[j][index] > target[index]) {
                arr[j + 1] = arr[j];  // 요소를 이동
                j--;
            }
            arr[j + 1] = target;  // 새로운 위치에 요소 삽입
        }
    }
}
728x90