카테고리 없음

[프로그래머스] 테이블 해시 함수 - 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)