Written

프로그래머스 / 테이블 해시 함수 / C++ 본문

알고리즘 문제풀이

프로그래머스 / 테이블 해시 함수 / C++

steeringhead 2023. 8. 31. 18:00

문제의 조건대로 정렬하고 주어진 row_begin 행부터 row_end 행까지 행에 있는 모든 원소들을 모듈러

연산을 하여 합하고, 한 행이 끝날때마다 비트 XOR연산을 통해 답을 도출하는 문제였습니다. 

정렬을 위한 함수 구현과 비트 연산(^)의 개념만 숙지하시면 문제는 크게 까다롭지 않은 것 같습니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
struct Node
{
    int idx;
    int col;
    int first;
    Node(int a,int b,int c)
    {
        idx = a;
        col = b;
        first = c;
    }
    bool operator<(const Node& other) const
    {
        if (col != other.col)
        {
            return col < other.col;
        }
        else
            return first > other.first;
    }
};
 
int solution(vector<vector<int>> data, int col, int row_begin, int row_end) {
    int idx = 0;
    vector<Node> v;
    
    for (vector<int> v1 : data)
    {
        v.push_back(Node(idx++,v1[col-1],v1[0]));
    }
    
    //정렬
    sort(v.begin(),v.end());
    
    int start = 0;
    for (int i=0;i<data[v[row_begin-1].idx].size();i++)
    {
        start += data[v[row_begin-1].idx][i] % row_begin;
    }
    
    for (int i=row_begin;i<row_end;i++)
    {
        int tmp = 0;
        for (int j=0;j<data[v[i].idx].size();j++)
        {
            tmp += data[v[i].idx][j] % (i+1);
        }
        
        start ^= tmp;
    }
    
    return start;
    
}
cs
Comments