▼ Why ? What ?
1일 1알고리즘 스터디에서 "데이터 분석"이라는 문제를 풀었다. 그리 어렵지 않은 문제였는데, 해결 과정에서 String 배열을 이용해서 경우의 수를 처리하는 방식은 기억해두면 좋을 것 같아서 정리해봤다.
[ 추가 개념 정리 ]
[Java] 제네릭 타입(Generic Type)으로 기본형(Primitive) 배열 타입 사용 & 람다(Lambda) 표현식과 'effective final' 변수
▼ 알고리즘 문제 : "데이터 분석"
데이터 분석
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
조건문(Switch문) 없이 String 배열로 경우의 수를 간단히 처리하는 방법
- 처음 문제를 풀 때는 `Switch문`을 사용해서 데이터를 뽑아낼 기준이 되는 `extIdx`와 정렬 기준이 될 `sbIdx`를 각각 처리해주다보니 중복되는 불필요한 코드가 생기는 것 같아서, 인자로 받아올 두 문자열을 한 번에 처리해서 `data` 배열의 인덱스(index)로 변환해줄 수 있는 방법을 생각해봤다.
➙ String 배열에 인자로 들어올 수 있는 기준 문자열("code", "date", "maximum", "remain")들을 미리 저장해두고, 이 String 배열을 활용하니 `data` 배열에서 기준이 될 요소의 인덱스 값(`extIdx`, `sbIdx`)을 반복문을 통해서 한 번에 추출할 수 있었다 ! - 인자로 들어올 값이 한정적으로 정의되어 있는 경우엔 아래처럼 String 배열을 활용하는 방식이 유용하게 쓰일 수 있을 것 같다 !
String[] criteria = {"code", "date", "maximum", "remain"};
for (int i = 0; i < criteria.length; ++i) {
if (criteria[i].equals(ext)) extIdx = i;
if (criteria[i].equals(sort_by)) sbIdx = i;
}
[ 나의 해결 코드 ]
import java.util.*;
class Solution {
public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
int extIdx = 0, sbIdx = 0;
List<int[]> list = new ArrayList<>();
String[] criteria = {"code", "date", "maximum", "remain"};
for (int i = 0; i < criteria.length; ++i) {
if (criteria[i].equals(ext)) extIdx = i;
if (criteria[i].equals(sort_by)) sbIdx = i;
}
int size = 0;
for (int[] d : data) {
if (d[extIdx] < val_ext) {
list.add(d);
size++;
}
}
int[][] answer = new int[size][4];
final int SB_IDX = sbIdx;
list.sort((a, b) -> a[SB_IDX] - b[SB_IDX]);
for (int i = 0; i < list.size(); ++i) {
answer[i] = list.get(i);
}
return answer;
}
}