양갱의 개발 블로그

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

코딩테스트/프로그래머스

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

연지양갱 2025. 3. 29. 00:39
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/250121

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

풀이

1. ext, val_ext, sortby가 매개변수로 오지만 각 확인하는 index값이 다릅니다.

2. 작은 순서대로 정렬해야 합니다.

 

ext와 sort_by를 정리해봤습니다.

초기에 인덱스 값을 박아버리는 형태로 했는데 여기에서 오류가 난것 같습니다. 그래서 특정값의 인덱스를 알아낼 수 있도록 indexOf함수를 사용하도록 수정했습니다. 오랜만에 자바를 하니까 Comparator라는 것을 완전 잊고 있었네요. Comparator 공부해서 포스팅해보겠습니다.

 

 

초기 코드(테스트 코드 성공 -> 제출 시 테스트 케이스 실패)

import java.util.*;
import java.util.Comparator;

class Solution {
    public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
        int[][] answer = {};
        
        // ext : code, date 중 하나
        // sort_by : maximum, remain 중 하나
        // data에서 ext값이 val_ext갑소바 작은 데이터만 뽑고 sort_by에 맞춰서 정렬해야한다
        int extIndex = ext == "code" ? 0:1;
        int sortIndex = sort_by == "maximum"? 2 : 3;
        ArrayList<int[]> beforeSort = new ArrayList<int[]>();
        
        for (int i=0; i<data.length; i++){
            if(data[i][extIndex] < val_ext){
                beforeSort.add(data[i]);
            }
        }

        beforeSort.sort(Comparator.comparingInt(a -> a[sortIndex]));
        answer=beforeSort.toArray(int[][]::new);
        
        return answer;
    }
}

 

 

 

최종코드

import java.util.*;
import java.util.Comparator;

class Solution {
    public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
        int[][] answer = {};
        
        // ext : code, date 중 하나
        // sort_by : maximum, remain 중 하나
        // data에서 ext값이 val_ext갑소바 작은 데이터만 뽑고 sort_by에 맞춰서 정렬해야한다
        String[] list = {"code", "date", "maximum", "remain"};
        // int extIndex = ext == "code" ? 0:1;
        // int sortIndex = sort_by == "maximum"? 2 : 3;
        
        ArrayList<int[]> beforeSort = new ArrayList<int[]>();
        
        for (int i=0; i<data.length; i++){
            if(data[i][Arrays.asList(list).indexOf(ext)] < val_ext){
                beforeSort.add(data[i]);
            }
        }

        beforeSort.sort(Comparator.comparingInt(a -> a[Arrays.asList(list).indexOf(sort_by)]));
        answer=beforeSort.toArray(int[][]::new);
        
        return answer;
    }
}
728x90