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
반응형
'알고리즘' 카테고리의 다른 글
[programmers] 점 찍기 (0) | 2023.05.12 |
---|---|
[programmers] 디펜스 게임 (0) | 2023.05.12 |
[programmers] 유사 칸토어 비트열 (0) | 2023.05.10 |
[programmers] 마법의 엘리베이터 (0) | 2023.05.09 |
[programmers] 연속 펄스 부분 수열의 합 (0) | 2023.05.09 |