알고리즘

[programmers] 테이블 해시 함수

졔졔311 2023. 5. 12. 15:10
728x90
반응형

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

 

프로그래머스

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

programmers.co.kr

 

---------------------------------------------------핵심 알고리즘--------------------------------------------

 

직접 비교하는 방식(cmp)을 정의해 정렬 + XOR(^)기호

 

-----------------------------------------------------풀이--------------------------------------------------

 

문제에서 언급한 방식으로 sorting하고, 조건에 맞게 S_i의 값들을 구해 xor 시키면 된다.

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

using namespace std;

int Col;

bool cmp(vector<int> a, vector<int> b){
    if(a[Col] == b[Col]){
        // first col value. descend order.
        return a[0] > b[0];
    }
    // Col'th col value. ascend order.
    return a[Col] < b[Col];
}

void print_data(vector<vector<int>> data){
    for(int i = 0; i < data.size(); i++){
        for(int j = 0; j < data[i].size(); j++){
            cout << data[i][j] << " ";
        }
        cout << endl;
    }
    cout << endl;
}

// table => integer type cols.
// 2-dim table. row=tuple, col=column
// first col = primary key. unique.
// hash function input => col, row_begin, row_end
int solution(vector<vector<int>> data, int col, int row_begin, int row_end) {
    int answer = 0;
    col--; row_begin--; row_end--;
    Col = col;
    // sorting
    sort(data.begin(), data.end(), cmp);
    //print_data(data);
   
    // S_i = tuple[i][0]%i + tuple[i][1]%i + ...
    // answer = S_row_begin ^ ... ^ S_row_end
    for(int i = row_begin; i <= row_end; i++){
        int S_i = 0;
        for(int j = 0; j < data[i].size(); j++){
            S_i += data[i][j] % (i+1);
        }
        answer ^= S_i;
    }
    return answer;
}

 

-----------------------------------------------------후기--------------------------------------------------

 

어제 면접 직후 학교에서 친구들 수업이 끝나길 기다리며 아이패드로 푼 문제.

한글 주석이 이상하게 달아져서 영어로밖에 쓸 수 없어 고생했다..

면접때문에 데이터베이스를 열심히 공부해서 너무 반가웠던 문제!

728x90
반응형