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

2025. 7. 21. 18:11·CodingTest/Programmers

사진을 클릭하면 해당 문제로 이동

💡풀이

import java.util.*;

class Solution {

    // 데이터의 각 행을 객체로 다루기 위한 내부 클래스
    class Product {
        Map<String, Integer> map;

        Product(int code, int date, int maximum, int remain) {
            map = new HashMap<>();
            map.put("code", code);
            map.put("date", date);
            map.put("maximum", maximum);
            map.put("remain", remain);
        }

        // 이름(ext, sort_by)에 해당하는 값을 가져오는 메소드
        int getData(String name) {
            return map.get(name);
        }

        // 객체를 다시 int[] 배열로 변환하는 메소드
        int[] getArray() {
            return new int[]{map.get("code"), map.get("date"), map.get("maximum"), map.get("remain")};
        }
    }

    public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
        // 2차원 배열 데이터를 Product 객체 리스트로 변환
        List<Product> products = new ArrayList<>();
        for(int[] d : data) {
            products.add(new Product(d[0], d[1], d[2], d[3]));
        }

        // Stream을 이용해 데이터를 필터링하고 정렬
        return products.stream()
                .filter(p -> p.getData(ext) < val_ext)                // 1. 조건(ext)에 맞는 데이터만 필터링
                .sorted(Comparator.comparing(p -> p.getData(sort_by))) // 2. 기준(sort_by)에 따라 정렬
                .map(Product::getArray)                               // 3. Product 객체를 int[] 배열로 변환
                .toArray(int[][]::new);                               // 4. 결과를 2차원 배열로 최종 반환
    }
}

📖새로 배운 부분

toArray(int[][]::new)

  1. 왜 써야 하는가?
    • 그냥 .toArray()만 쓰면 결과가 Object[] 타입으로 나옵니다
    • 이 Object[]는 int[][] 같은 특정 배열로 바꿀 수 없어서 에러가 발생합니다
  2. 무엇을 하는가?
    • .toArray(int[][]::new)는 Stream에게 "결과를 int[][] 타입 배열로 만들어줘" 라고 정확히 알려주는 역할을 합니다

 

Stream의 최종 결과를 Object[]가 아닌 원하는 특정 타입의 배열(int[][], String[] 등)로 만들고 싶을 때 사용하면 됩니다.

 

 

mapToInt, mapToLong, mapToDouble처럼 기본형 타입을 다루는 스트림으로 바꿨다면, .toArray()만 사용해도 원하는 기본형 배열(int[], long[] 등)을 바로 얻을 수 있습니다.

'CodingTest > Programmers' 카테고리의 다른 글

[프로그래머스, Java] 성격 유형 검사하기  (0) 2025.07.21
[프로그래머스, Java][카카오 인턴] 키패드 누르기  (0) 2025.07.21
[프로그래머스, Java] 크레인 인형뽑기 게임  (0) 2025.07.21
[프로그래머스, Java] 햄버거 만들기  (0) 2025.07.21
[프로그래머스, Java] 숫자 짝꿍  (0) 2025.07.21
'CodingTest/Programmers' 카테고리의 다른 글
  • [프로그래머스, Java] 성격 유형 검사하기
  • [프로그래머스, Java][카카오 인턴] 키패드 누르기
  • [프로그래머스, Java] 크레인 인형뽑기 게임
  • [프로그래머스, Java] 햄버거 만들기
devoks
devoks
꾸준히 작성해보자!
  • devoks
    ok's 개발 블로그
    devoks
  • 전체
    오늘
    어제
    • 분류 전체보기 (110) N
      • Backend (15)
        • SpringBoot (0)
        • Java (15)
      • Cs (17) N
      • Infra (0)
        • AWS (0)
        • Docker (0)
      • CodingTest (78)
        • Programmers (78)
  • 링크

    • My GitHub
  • 인기 글

  • 태그

    switch
    BufferedWriter
    BufferedReader
    json
    StringTokenizer
    effectivejava
    codingtest
    CS
    java
    programmers
  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
devoks
[프로그래머스, Java][PCCE 기출문제] 10번 / 데이터 분석
상단으로

티스토리툴바