프로그래머스

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

programmers.co.kr

 

 

  • data를 조건에 따라 정렬
  • data의 row_begin <= i <= row_end에 3번을 수행한 값을 따로 배열에 저장
  • 해당 배열의 값들을 누적하여 birwise XOR 연산 수행

 

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

using namespace std;

int idx;

// 비교자
int cmp(vector<int> a, vector<int> b) {
    if(a[idx] == b[idx]) return a[0] > b[0];
    return a[idx] < b[idx];
}

int solution(vector<vector<int>> data, int col, int row_begin, int row_end) {
    int answer = 0;
    idx = col - 1;
    
    // data를 조건에 따라 정렬
    sort(data.begin(), data.end(), cmp);
    vector<int> s;
    
    // row_begin <= i <= row_end
    for(int i = row_begin - 1; i <= row_end - 1; i++) {
        int num = 0;
        
        // S_i는 i 번째 행의 튜플에 대해 각 컬럼의 값을 i로 나눈 나머지들의 합
        for(int j = 0; j < data[i].size(); j++)
            num += data[i][j] % (i + 1);
        
        s.push_back(num);
    }
    
    answer = s[0];
    
    // 해시 값은 s 배열의 모든 값을 누적하여 bitwise XOR 한 값
    for(int i = 1; i < s.size(); i++)
        answer = answer ^ s[i];
    
    return answer;
}

 

+ Recent posts