🍀 코딩 테스트/쉽게 배우는 JavaScript 알고리즘 입문

그룹 알고리즘

놀러와요 버그의 숲 2022. 8. 21. 04:13
728x90
반응형
//문제: 컬렉션 형태의 데이터를 특정 키 값으로 그룹화.

// 그룹 알고리즘(Group Algorithm): 특정 키 값에 해당하는 그룹화된 합계 리스트 만들기

//테스트용 레코드 JSON 배열

(function () {
  //[1] Input: 테스트용 레코드 JSON 배열
  let records = [
    { Name: "RADIO", Quantity: 3 },
    { Name: "TV", Quantity: 1 },
    { Name: "RADIO", Quantity: 2 },
    { Name: "DVD", Quantity: 4 },
  ]; // 입력 데이터
  let groups = []; // 출력 데이터
  let N = records.length; // 의사코드

  //[2] Process: Group 알고리즘 (SORT -> SUM -> GROUP)

  //[A] 그룹정렬: SORT -> 나하고 같은 그룹인지 따지기 편하게 하기 위해서 수행
  for (let i = 0; i < N - 1; i++) {
    for (let j = i + 1; j < N; j++) {
      if (records[i].Name > records[j].Name) {
        let temp = records[i];
        records[i] = records[j];
        records[j] = temp;
      }
    }
  }
  //[B] 그룹소계: GROUP -> 그룹 알고리즘이 적용된 곳.
  let groupCount = 0; //그룹수
  let subTotal = 0; //소계
  let newRecords = JSON.parse(JSON.stringify(records)); // 객체 복사 (Deep Copy)

  for (let i = 0; i < N; i++) {
    subTotal += newRecords[i].Quantity; //같은 상품명의 수량을 누적(SUM)
    if (
      i + 1 == N || //단락이면 아래 조건 무시
      newRecords[i].Name != newRecords[i + 1].Name
    ) {
      groups.push(newRecords[i]); // JSON 개체를 임시로 추가
      // 다음 레코드가 없거나, 현재 레코드와 다음 레코드가 다르면 저장
      groups[groupCount].Name = newRecords[i].Name; // 한 그룹의 키 지정.
      groups[groupCount].Quantity = subTotal; //소계
      groupCount++; // 그룹 수 증가
      subTotal = 0; //하나의 그룹이 완료되면 소계 초기화
    }
  }

  //[3] Output
  console.log("[1] 정렬된 원본 데이터");
  for (let i = 0; i < N; i++) {
    console.log(records[i].Name + "-" + records[i].Quantity);
  }
  console.log("[2] 이름으로 그룹화된 데이터");
  for (let i = 0; i < groupCount; i++) {
    console.log(groups[i].Name + "-" + groups[i].Quantity);
  }
})();

 

궁금점이 6가지 정도 있었었다.

1. 문자로 정렬 어떻게 하는가?

2. 배열안의 객체를 어떻게 정렬하는가?

3. 배열을 어떻게 합쳐주는가?

 

 

알게 된 점 

 

1. 객체 배열을 정렬하는 방법에 대해서 알게 되었다. 

 

https://www.delftstack.com/ko/howto/javascript/sort-array-based-on-some-property-javascript/

 

JavaScript에서 속성별로 객체 배열 정렬

이 튜토리얼에서는 속성별로 객체 배열을 정렬하는 방법을 보여줍니다.

www.delftstack.com

 

2. sort() 메서드가 원본 배열을 바꾸기 때문에 스프레드 연산자를 이용해서 복사해주어야 한다는 것을 알게되었다.

 

https://chinsun9.github.io/2021/07/07/js-array-api-mutate-origin/

 

js array.sort()가 원본을 바꾼다

가끔 원본이 바뀌어서 예상치 못한 동작을 할 때가 있다 12345678910111213// 원본인 arr 이 정렬됨{ const arr = [1, 2, 3]; const sortedArr = arr.sort((a, b) => b - a); console.log(arr === sortedArr); // true}// 원본인

chinsun9.github.io

 

'🍀 코딩 테스트 > 쉽게 배우는 JavaScript 알고리즘 입문' 카테고리의 다른 글

최빈값 알고리즘  (0) 2022.08.21
선택 정렬 알고리즘  (0) 2022.08.12
순위알고리즘  (0) 2022.07.25
근사값 알고리즘  (0) 2022.07.19
최솟값 알고리즘  (0) 2022.07.19