[알고리즘] 백준 5602 問題1 (자바스크립트)

Subin·2022년 12월 2일
0
post-thumbnail
post-custom-banner

정렬
問題1

✏️ 요구 사항 분석

어떤 학교에서 수학여행 장소를 정하기 위해 앙케이트를 조사를 실시했다.

  1. 학생의 수는 n, 여행 장소의 수는 m의 인자로 입력 받는다.
  2. 학생들은 여행 장소 중 가고 싶은 곳은 O(1) 가기 싫은 곳은 X(0)으로 표시한다.
  3. 가고 싶은 곳이 많은 순으로 여행 후보 번호를 출력
  4. 단 투표수가 같은 경우에는 번호순으로 정렬

🗒 내 풀이

function solution(n, m, enqute) {
  let total = 0;
  let result = [];
  let arr = Array.from({ length: m }, (_value, index) => index + 1);
  for (let i = 0; i < m; i++) {
    for (let j = 0; j < n; j++) {
      total += enqute[j][i];
    }
    result.push(total);
    total = 0;
  }
  const totalObject = Object.assign({}, arr, result);
  let answer = Object.entries(totalObject)
    .sort((a, b) => {
      if (a[1] === b[1]) return a[0] < b[0] ? -1 : 1;
      return b[1] - a[1];
    })
    .map((rank) => Number(rank[0]) + 1);
  return answer;
}
let n = 4;
let m = 6;
let enqute = [
  [1, 0, 1, 0, 1, 1],
  [1, 1, 0, 1, 0, 0],
  [1, 1, 1, 0, 0, 0],
  [1, 0, 1, 0, 1, 0],
];
console.log(solution(n, m, enqute));

⌨️ 풀이 과정

1

let arr = Array.from({ length: m }, (_value, index) => index + 1);

먼저 출력을 수학여행 장소의 번호를 넣어주는 배열을 생성한다.

2

 for (let i = 0; i < m; i++) {
    for (let j = 0; j < n; j++) {
      total += enqute[j][i];
    }
    result.push(total);
    total = 0;
  }

6개 후보지의 투표 결과를 total에 누적하고 result라는 배열에 push했다.

3

const totalObject = Object.assign({}, arr, result);


Object.assign() 함수로 투표 결과에 후보지 이름을 붙인 객체를 만들었다.

4

let answer = Object.entries(totalObject)
    .sort((a, b) => {
      if (a[1] === b[1]) return a[0] < b[0] ? -1 : 1;
      return b[1] - a[1];
    })
    .map((rank) => Number(rank[0]) + 1);

객체로 만든 totalObject를 정렬하기 쉽게 Object.entries() 함수로 배열화했다.

그 후 sort()함수로 b[1] - a[1] , 투표값에 대한 내림차순 정렬을 했다.

if (a[1] === b[1]) return a[0] < b[0] ? -1 : 1;

하지만 요구사항 4번으로 인해 투표값이 같은 경우 여행 후보지의 번호 순으로 정렬해야 하기 때문에 아래의 조건을 추가해 투표 값이 같을 경우 후보지 번호를 내림차순으로 정렬했다.

map((rank) => Number(rank[0]) + 1);

마지막으로 map() 함수를 통해 수학여행 후보지의 번호를 출력하는 것으로 마무리했다.

profile
고양이가 세상을 지배한다.
post-custom-banner

0개의 댓글