쌓고 쌓다

[프로그래머스] 테이블 해시 함수 C++ 풀이 및 해설 본문

알고리즘/프로그래머스

[프로그래머스] 테이블 해시 함수 C++ 풀이 및 해설

승민아 2023. 12. 3. 15:50

https://school.programmers.co.kr/learn/courses/30/lessons/147354

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

풀이 방법

주어진 순서대로 해시 함수를 동작하도록하면 되는 문제라 특별한 풀이 방법은 없다.

그런데 C++ 정렬 함수를 만들어 사용하는 방법을 알아야한다.

앞저네 포스팅한 내용이다.

https://non-stop.tistory.com/242 

참고하자!

 

전체 코드

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

int column = 1;

bool compare(vector<int> a, vector<int> b) {
    if(a[column-1] < b[column-1]) { // col번째 컬럼의 값을 기준으로 오름차순 정렬
        return true;
    } else if(a[column-1] == b[column-1]) { // 동일하면 기본키인 첫 번째 컬럼의 값을 기준으로 내림차순 정렬
        if(a[0] > b[0]) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}


int solution(vector<vector<int>> data, int col, int row_begin, int row_end) {
    int answer = 0;
    column = col; // compare 함수에서 col을 쓸 수 있도록 전역변수 사용
    sort(data.begin(), data.end(), compare);
    
    int result = -1;
    for(int i=row_begin-1; i<=row_end-1; i++) {
        int modSum = 0;
        for(int j=0; j<data[0].size(); j++)
            modSum += data[i][j]%(i+1);
        if(result==-1) // result가 -1이라면 첫 갱신이므로 modSum으로 갱신
            result=modSum;
        else
            result = result ^ modSum; // XOR 연산
    }
    
    answer=result;
    return answer;
}
Comments