알고리즘 문제/프로그래머스

프로그래머스 테이블 해시 함수 [Lv. 2] (C++)

우대비 2024. 11. 22. 12:10
반응형
 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

테이블의 데이터 data와 해시 함수에 대한 입력 colrow_beginrow_end이 주어졌을 때 테이블의 해시 값을 return 하도록 solution 함수를 완성해주세요.

 

풀이방법 

문제 설명에 있는 내용을 따라만 하면 되는 간단한 문제입니다.

 

1. 테이블의 튜플의 col번째 컬럼을 기준으로 오름차순 정렬, 첫 번째 칼럼을 기준으로 내림차순 정렬

sort(data.begin(), data.end(), [&](auto& A, auto& B){
        if (A[col-1] == B[col-1])
            return A[0] > B[0];
        return A[col-1] < B[col-1];
    });

 

2. 정렬된 데이터의 i번째 행의 튜플에 대하여 각 칼럼의 값을 i로 나눈 나머지의 합을 S_i 찾기

3. 모든 S_i를 xor한 값을 반환

int answer = 0;
for (int i = row_begin-1; i < row_end; i++)
{
    int S_i = 0;
    for (int& n : data[i])
        S_i += n % (i+1);

    answer ^= S_i;
}

 

 

 

정답 코드

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

using namespace std;

int solution(vector<vector<int>> data, int col, int row_begin, int row_end) {
    
    sort(data.begin(), data.end(), [&](auto& A, auto& B){
        if (A[col-1] == B[col-1])
            return A[0] > B[0];
        return A[col-1] < B[col-1];
    });
    
    
    int answer = 0;
    for (int i = row_begin-1; i < row_end; i++)
    {
        int S_i = 0;
        for (int& n : data[i])
            S_i += n % (i+1);
        
        answer ^= S_i;
    }
    
    return answer;
}
반응형
LIST