카테고리 없음
[프로그래머스] 테이블 해시 함수 - JavaScript
니 뽀
2023. 8. 10. 14:08
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/147354
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
2. 풀이
- 테이블을 먼저 정렬을 해준다. sort() 이용.
- 그 후 반복문을 통하여 합계를 구하고, 합계들을 XOR 해준다!
function solution(data, col, row_begin, row_end) {
let answer = 0; // 리턴할 값을 담을 변수
// data 정렬.
// col번째 컬럼을 기준으로 오름차순 정렬하되, 값이 같다면 첫번째 컬럼을 기준으로 내림차순 정렬.
const sortData = data.sort((a,b) => {
if(a[col-1] !== b[col-1]){
return a[col-1] - b[col-1]
}
if(a[0] !== b[0]){
return b[0] - a[0]
}
});
// 정렬된 데이터의 S_i 의 합계를 담을 배열
let sumArr = [];
// row_begin과 row_end는 -1을 해준 값으로 진행하여야 함.
// 배열의 경우 0부터 시작하기 때문.
for(let i = row_begin-1; i <= row_end-1; i++){
let sum = 0; // 합을 담을 변수
// 해당하는 튜플을 반복.
for(let j = 0; j < sortData[i].length; j++){
sum += (sortData[i][j] % (i+1))
}
// 더한 값을 배열에 push
sumArr.push(sum)
}
// 합계 배열을 반복하여 XOR 시킴.
sumArr.forEach(item => {
answer ^= item;
})
// 계산된 값 출력.
return answer;
}
3. 정리
- sort() 부분에서 조금 어려움을 겪었다.... 문제를 꼼꼼하게 안 읽어서 col번째 컬럼의 값만 오름차순 정렬해서 틀렸었다.
- row_begin과 row_end 부분에서 1 을 빼줘야한다는 사실을 늦게 알았다.
- 문제를 꼼꼼히 보고 실수를 줄이도록 해야겠다.
- sum += ... 부분을 reduce()를 이용하여 푸신 분도 있었다.
sum = data[i].reduce((acc,val)=>acc+val%(i+1),0)