//[?] 컬렉션 형태의 데이터를 특정 키 값으로 크룹화
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
public class GroupAlgorithm2 {
/**
* 테스트용 레코드 클래스
*/
public static class Record {
private final String name; // 상품명
private final int quantity; // (int: 상수) 수량
public Record (String name, int quantity) {
this.name = name;
this.quantity = quantity; // 초기화
}
// name, quantity의 속성 만들기 => get
public String getName() {
return name;
}
public int getQuantity() {
return quantity;
}
}
//[0][1] 테스트용 데이터 채우기용 로컬 함수
public static List<Record> getAll() {
return Arrays.asList(
new Record("Radio", 3),
new Record("TV", 1),
new Record("Radio", 2),
new Record("DVD", 4)
);
}
//[0][2] 컬렉션 데이터 출력용 로컬 함수
public static void printData(String message, List<Record> data) {
System.out.println(message);
for (Record item : data) {
System.out.println(String.format("%5s - %d", item.getName(), item.getQuantity()));
}
}
public static void main(String[] args) {
//[1] Input
List<Record> records = getAll(); // 입력 데이터
List<Record> groups = new ArrayList<Record>(); // 출력 데이터
int N = records.size(); // 의사코드
//[2] Process (SORT -> SUM -> GROUP)
//[A] 그룹 정렬: SORT
for (int i = 0; i < N - 1; i++) {
for (int j = i + 1; j < N; j++) {
if (records.get(i).getName().compareTo(records.get(j).getName()) > 0) {
Record t = records.get(i);
records.set(i, records.get(j));
records.set(j, t);
}
}
}
//[B] 그룹 소계: GROUP
int subtotal = 0; // 소계
for (int i = 0; i < N; i++) {
subtotal += records.get(i).getQuantity(); // 같은 상품명의 판매량 누적 (SUM)
if ((i + 1) == N || // 단락이면 아래 조건 무시
(records.get(i).getName() != records.get(i + 1).getName())) {
//[!] 다음 레코드가 없거나 현재 레코드와 다음 레코드가 다르면 저장
Record r = new Record(records.get(i).getName(), subtotal);
groups.add(r); // 하나의 그룹 저장
subtotal = 0; // 하나의 그룹이 완료 되면 소계 초기화
}
}
//[3] Output
printData("[1] 정렬된 원본 데이터:", records);
printData("[2] 이름으로 그룹화된 원본 데이터:", groups);
}
}
출력:
[1] 정렬된 원본 데이터:
DVD - 4
Radio - 2
Radio - 3
TV - 1
[2] 이름으로 그룹화된 원본 데이터:
DVD - 4
Radio - 5
TV - 1
'Dev > Java' 카테고리의 다른 글
<jsp:include> 액션 태그 (0) | 2022.09.01 |
---|---|
객체 지향 프로그래밍 (0) | 2022.08.26 |
11. 최빈값 알고리즘(Mode Algorithm) (0) | 2022.08.08 |
10. 병합 알고리즘(Merge Algorithm) (0) | 2022.08.08 |
9. 검색 알고리즘(Search Algorithm) (0) | 2022.08.08 |
댓글