어흥
[프로그래머스] 테이블 해시 함수(C++) 본문
728x90
반응형
문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/147354
1. 주의할 점
- 행과 열이 0이 아닌 1부터 시작한다
- 한번은 오름차순 정렬, 한번은 내림차순 정렬이다
- 원소들의 합에 대한 mod 연산이 아닌, 각 원소의 mod 연산에 대한 합이다
- 첫 mod 합은 XOR 연산을 수행하지 않는다
2. 구현
- 조건에 따른 정렬을 하는 우선순위 큐를 사용한다
- 해시값에 대해서 XOR 연산을 계속해서 수행한다
#include <string>
#include <vector>
#include <queue>
#include <iostream>
#include <algorithm>
struct info{
int idx,colVal,keyVal;
};
struct cmp{
bool operator()(info &a, info &b){
//기본키에 대한 내림차순 정렬
if(a.colVal==b.colVal){
return a.keyVal < b.keyVal;
}
//col 칼럼에 대한 오름차순 정렬
return a.colVal > b.colVal;
}
};
using namespace std;
int solution(vector<vector<int>> data, int col, int row_begin, int row_end) {
//answer 최초 초기화
int answer = -1;
priority_queue<info,vector<info>,cmp> pq;
for(int i=0;i<data.size();i++)
pq.push({i,data[i][col-1],data[i][0]});
int cnt = 1;
while(!pq.empty()){
info ii = pq.top();
pq.pop();
if(row_begin<=cnt && cnt<=row_end){
int sum = 0;
for(int j=0;j<data[ii.idx].size();j++){
int remain = data[ii.idx][j]%cnt;
sum+=remain;
}
if(answer==-1) answer = sum;
else answer^=sum;
}
cnt++;
}
return answer;
}
728x90
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 올바른 괄호 (C++) (0) | 2023.08.25 |
---|---|
[프로그래머스] 디펜스 게임 (C++) (0) | 2023.08.07 |
[프로그래머스] 괄호 변환 (Java) (0) | 2022.04.15 |
[프로그래머스] 블록 이동하기 (Java) (0) | 2022.03.18 |
[프로그래머스] 110 옮기기 (C++) (0) | 2022.03.10 |
Comments