관리 메뉴

Binary Journey

[ν…Œμ½”ν…Œμ½”1.5 1-12] 데이터 뢄석 λ³Έλ¬Έ

Algorithm/ν…Œμ½”ν…Œμ½”1.5(2025.01)

[ν…Œμ½”ν…Œμ½”1.5 1-12] 데이터 뢄석

binaryJournalist 2025. 1. 14. 16:05
λ°˜μ‘ν˜•
πŸ’‘ν…Œμ½”ν…Œμ½” μ‹œμ¦Œ 1.5 1회 λͺ¨μž„ on-site 문제 ν’€μ΄μž…λ‹ˆλ‹€. (2025.01.12)

 

문제

 

좜처: ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - PCCE 기좜문제 10. 데이터 뢄석

 

λ‚΄μš©

 

AI μ—”μ§€λ‹ˆμ–΄μΈ ν˜„μ‹μ΄λŠ” 데이터λ₯Ό λΆ„μ„ν•˜λŠ” μž‘μ—…μ„ μ§„ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. λ°μ΄ν„°λŠ” ["μ½”λ“œ 번호(code)", "제쑰일(date)", "μ΅œλŒ€ μˆ˜λŸ‰(maximum)", "ν˜„μž¬ μˆ˜λŸ‰(remain)"]으둜 κ΅¬μ„±λ˜μ–΄ 있으며 ν˜„μ‹μ΄λŠ” 이 데이터듀 쀑 쑰건을 λ§Œμ‘±ν•˜λŠ” λ°μ΄ν„°λ§Œ λ½‘μ•„μ„œ μ •λ ¬ν•˜λ € ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ λ‹€μŒκ³Ό 같이 데이터가 주어진닀면

data = [[1, 20300104, 100, 80], [2, 20300804, 847, 37], [3, 20300401, 10, 8]]

 

이 λ°μ΄ν„°λŠ” λ‹€μŒ ν‘œμ²˜λŸΌ λ‚˜νƒ€λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

code date maximum remain
1 20300104 100 80
2 20300804 847 37
3 20300401 10 8

 

 

주어진 데이터 쀑 "제쑰일이 20300501 이전인 물건듀을 ν˜„μž¬ μˆ˜λŸ‰μ΄ 적은 μˆœμ„œ"둜 μ •λ ¬ν•΄μ•Ό ν•œλ‹€λ©΄ 쑰건에 맞게 κ°€κ³΅λœ λ°μ΄ν„°λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

data = [[3,20300401,10,8],[1,20300104,100,80]]

 

 

μ •λ ¬ν•œ 데이터듀이 λ‹΄κΈ΄ 이차원 μ •μˆ˜ 리슀트 data와 μ–΄λ–€ 정보λ₯Ό κΈ°μ€€μœΌλ‘œ 데이터λ₯Ό 뽑아낼지λ₯Ό μ˜λ―Έν•˜λŠ” λ¬Έμžμ—΄ ext, 뽑아낼 μ •λ³΄μ˜ 기쀀값을 λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜ val_ext, 정보λ₯Ό μ •λ ¬ν•  기쀀이 λ˜λŠ” λ¬Έμžμ—΄ sort_byκ°€ μ£Όμ–΄μ§‘λ‹ˆλ‹€.

dataμ—μ„œ ext 값이 val_ext보닀 μž‘μ€ λ°μ΄ν„°λ§Œ 뽑은 ν›„, sort_by에 ν•΄λ‹Ήν•˜λŠ” 값을 κΈ°μ€€μœΌλ‘œ μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•˜μ—¬ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄ μ£Όμ„Έμš”. 단, 쑰건을 λ§Œμ‘±ν•˜λŠ” λ°μ΄ν„°λŠ” 항상 ν•œ 개 이상 μ‘΄μž¬ν•©λ‹ˆλ‹€.

 

 

 

κΈ°λ‘ν•˜κΈ°

πŸ’‘ μ–΄λ””κΉŒμ§€ μƒκ°ν•΄λ΄€λŠ”μ§€ λ‹¨κ³„μ μœΌλ‘œ κΈ°λ‘ν•΄λ΄…λ‹ˆλ‹€.

 

풀이

풀이 μ‹œκ°„

μ‹œμž‘ μ‹œκ° μ’…λ£Œ μ‹œκ° 총 μ†Œμš” μ‹œκ°„
11:24 11:40 16λΆ„

 

문제 뢄석

 

μ œμ•½ 사항 νŒŒμ•… & ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ μž‘μ„±

 

  • 1 ≤ data의 길이 ≤ 500
    • data[i]의 μ›μ†ŒλŠ” [μ½”λ“œ 번호(code), 제쑰일(date), μ΅œλŒ€ μˆ˜λŸ‰(maximum), ν˜„μž¬ μˆ˜λŸ‰(remain)] ν˜•νƒœμž…λ‹ˆλ‹€.
    • 1 ≤ μ½”λ“œ 번호≤ 100,000
    • 20000101 ≤ 제쑰일≤ 29991231
    • data[i][1]은 yyyymmdd ν˜•νƒœμ˜ 값을 가지며, μ˜¬λ°”λ₯Έ λ‚ μ§œλ§Œ μ£Όμ–΄μ§‘λ‹ˆλ‹€. (yyyy : 연도, mm : μ›”, dd : 일)
    • 1 ≤ μ΅œλŒ€ μˆ˜λŸ‰≤ 10,000
    • 1 ≤ ν˜„μž¬ μˆ˜λŸ‰≤ μ΅œλŒ€ μˆ˜λŸ‰
  • ext와 sort_by의 값은 λ‹€μŒ 쀑 ν•œ 가지λ₯Ό κ°€μ§‘λ‹ˆλ‹€.
    • "code", "date", "maximum", "remain"
    • μˆœμ„œλŒ€λ‘œ μ½”λ“œ 번호, 제쑰일, μ΅œλŒ€ μˆ˜λŸ‰, ν˜„μž¬ μˆ˜λŸ‰μ„ μ˜λ―Έν•©λ‹ˆλ‹€.
  • val_extλŠ” ext에 따라 μ˜¬λ°”λ₯Έ λ²”μœ„μ˜ 숫자둜 μ£Όμ–΄μ§‘λ‹ˆλ‹€.
  • μ •λ ¬ 기쀀에 ν•΄λ‹Ήν•˜λŠ” 값이 μ„œλ‘œ 같은 κ²½μš°λŠ” μ—†μŠ΅λ‹ˆλ‹€.

 

μž…λ ₯κ°’ 뢄석

πŸ’‘ μž…λ ₯값을 λΆ„μ„ν•˜λ©΄ λ¬Έμ œμ—μ„œ μš”κ΅¬ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„ λ³΅μž‘λ„λ₯Ό κ°„μ ‘μ μœΌλ‘œ νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

data ext val_ext sort_by result
[[1, 20300104, 100, 80], [2, 20300804, 847, 37], [3, 20300401, 10, 8]] "date" 20300501 "remain" [[3,20300401,10,8],[1,20300104,100,80]]

 

 

μ˜μ‚¬ μ½”λ“œ μž‘μ„±

πŸ’‘ μ˜μ‚¬ μ½”λ“œλŠ” λ™μž‘ μ€‘μ‹¬μœΌλ‘œ μž‘μ„±ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.

πŸ’‘ μ˜μ‚¬ μ½”λ“œλŠ” 문제 ν•΄κ²° μˆœμ„œλ‘œ μž‘μ„±ν•©λ‹ˆλ‹€.

πŸ’‘ μ˜μ‚¬ μ½”λ“œλ₯Ό μΆ©λΆ„νžˆ ν…ŒμŠ€νŠΈν•΄λ΄…λ‹ˆλ‹€.

solution(int[][] data, String ext, int val_ext, String sort_by) {
    // hashMap 생성
    // code:0, date:1, maximum:2, remain:3
    int filterIndex = map.get(ext);
    int sortByIndex = map.get(sort_by);
    // `data`μ—μ„œ `ext` 값이 `val_ext`보닀 μž‘μ€ λ°μ΄ν„°λ§Œ 뽑은 ν›„, `sort_by`에 ν•΄λ‹Ήν•˜λŠ” 값을 κΈ°μ€€μœΌλ‘œ μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬
    return Arrays.stream(data)
        .filter(d -> d[filterIndex] < val_ext)
        .sorted(sortByIndex 둜 μ˜€λ¦„μ°¨μˆœ);
}

 

 

 

κ΅¬ν˜„

import java.util.HashMap;
import java.util.Arrays;

class Solution {
    public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
        // hashMap 생성
        HashMap<String, Integer> columns = new HashMap<>();
        // code:0, date:1, maximum:2, remain:3
        columns.put("code", 0);
        columns.put("date", 1);
        columns.put("maximum", 2);
        columns.put("remain", 3);

        int filterIndex = columns.get(ext);
        int sortByIndex = columns.get(sort_by);

        // `data`μ—μ„œ `ext` 값이 `val_ext`보닀 μž‘μ€ λ°μ΄ν„°λ§Œ 뽑은 ν›„, `sort_by`에 ν•΄λ‹Ήν•˜λŠ” 값을 κΈ°μ€€μœΌλ‘œ μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬
        return Arrays.stream(data)
            .filter(d -> d[filterIndex] < val_ext)
            .sorted((d1, d2) -> Integer.compare(d1[sortByIndex], d2[sortByIndex]))
            .toArray(int[][]::new);
    }
}
  • filter()APIλŠ” O(N)의 μ‹œκ°„λ³΅μž‘λ„λ₯Ό 가진닀.
  • sort() APIλŠ” O(NlogN)의 μ‹œκ°„λ³΅μž‘λ„λ₯Ό 가진닀.
import java.util.HashMap;
import java.util.Arrays;
import java.util.Comparator;

class Solution {
    public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
        // hashMap 생성
        HashMap<String, Integer> columns = new HashMap<>();
        // code:0, date:1, maximum:2, remain:3
        columns.put("code", 0);
        columns.put("date", 1);
        columns.put("maximum", 2);
        columns.put("remain", 3);

        int filterIndex = columns.get(ext);
        int sortByIndex = columns.get(sort_by);

        // `data`μ—μ„œ `ext` 값이 `val_ext`보닀 μž‘μ€ λ°μ΄ν„°λ§Œ 뽑은 ν›„, `sort_by`에 ν•΄λ‹Ήν•˜λŠ” 값을 κΈ°μ€€μœΌλ‘œ μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬
        return Arrays.stream(data)
            .filter(d -> d[filterIndex] < val_ext)
            .sorted(Comparator.comparingInt(arr -> arr[sortByIndex]))
            .toArray(int[][]::new);
    }
}

 

 

λ³΅κΈ°ν•˜κΈ°

  • Arrays sort, List sort 리뷰 포인트 μ•Œμ•„λ³΄κΈ°
λ°˜μ‘ν˜•