정렬
問題1
어떤 학교에서 수학여행 장소를 정하기 위해 앙케이트를 조사를 실시했다.
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));
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;
}
6개 후보지의 투표 결과를 total에 누적하고 result라는 배열에 push했다.
const totalObject = Object.assign({}, arr, result);
Object.assign()
함수로 투표 결과에 후보지 이름을 붙인 객체를 만들었다.
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() 함수를 통해 수학여행 후보지의 번호를 출력하는 것으로 마무리했다.