새소식

코딩테스트/프로그래머스

[C++] 테이블 해시 함수

  • -

[문제]

코딩테스트 연습 - 테이블 해시 함수 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

[문제 풀이]

sort를 이용해서 정렬하기 + 반복문을 이용해서 xor 값을 계산해주기. 두가지를 이용해서 풀었다.

 

우선, c++의 내장 함수 sort(algorithm 라이브러리 include 필요) 를 이용해서 compare 함수를 만들어주자.

그 후, row_begin부터 row_end까지(index는 0부터 시작이라서 1씩 뺀 상태로 시작 필요) 반복문 내부에서 data 크기만큼 또 한번 반복문을 이용해서 돌면서 원소 % (인덱스 + 1) 을 해준 값을 마지막에 xor 해주자.

XOR은 0과 항등식을 이루기 때문에 기존에 만들어진 코드인 answer = 0에서 xor만 계속 해준다면 문제가 생길 부분은 없다.

[회고]

오랜만에 sort compare 문을 써서 처음에 순간 헷갈렸는데 생각보다 금방 기억이 나서 회복되었다.

[코드]

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

using namespace std;

int col;

bool compare(vector<int> one, vector<int> two){
    //만일 2번째 => 1 인덱스 값이 같다면
    if(one[col] == two[col]){
        return one[0] > two[0];
    }
    return one[col] < two[col];
}

int solution(vector<vector<int>> data, int coll, int row_begin, int row_end) {
    int answer = 0;
    col = coll - 1;
    
    //1. 우선 정렬을 하자.
    //data를 col값을 기준으로 오름차순, 만일 같은게 있다면 1번째(0번째) 원소를 기준으로 내림차순
    sort(data.begin(),data.end(),compare);

    //2. row_begin부터 end까지 반복하면서 i + 1로 mod 한 값을 다 더한뒤 answer에 xor 해주자.
    int modulus = 0;
    for(int i = row_begin - 1; i< row_end; i++){
        modulus = 0;
        for(int j = 0; j < data[i].size();j++){
            modulus += data[i][j] % (i + 1);
        }
        answer ^= modulus;
    }
    
    return answer;
}

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[Swift] 가장 먼 노드  (0) 2023.08.09
[C++] 두 큐 합 같게 만들기  (0) 2023.08.08
[C++] 택배상자  (0) 2023.06.25
[C++] 점 찍기  (0) 2023.06.25
[C++] 인사고과  (0) 2023.06.09
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.