이 험난한 세상에서어어~

테이블 해시 함수 본문

algorithm/코딩 테스트

테이블 해시 함수

토끼띠NJW 2023. 7. 15. 18:00

문제 설명

열은 컬럼을 나타내고 행은 튜플을 나타내는 2차원 배열이 있다. col 번째 컬럼을 오름차순으로 정렬하되 그 값이 동일하면 첫 번째 컬럼의 값으로 내림차순 정렬을 한다.

그리고 row_begin부터 row_end까지의 값에다가 해당 튜플을 나눈 나머지의 전체 합을 s_i라고 할 때 각 s_i의 누적 xor 값을 반환하는 문제이다.

https://school.programmers.co.kr/learn/courses/30/lessons/147354?language=java 

 

프로그래머스

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

programmers.co.kr

문제 풀이

첫 번째 접근

일단 주어진 조건에 맞게 2차원 배열을 정렬해줘야 한다.

파이썬

data.sort(key = lambda x: (x[col-1], -x[0]))

자바

        Arrays.sort(data, (o1, o2) -> {
                    if(o1[col-1]==o2[col-1]){
                        return -(o1[0] - o2[0]);
                    }
                   return o1[col-1] - o2[col-1];
                   });
        Arrays.sort(data, new Comparator<int[]>(){
            @Override
            public int compare(int[] o1, int[] o2){
                if(o1[col-1] == o2[col-1]){
                    return -(o1[0]-o2[0]);
                }else{
                    return o1[col-1]-o2[col-1];
                }
            }
        });

자바는 둘 중에 하나만 써도 되지만 첫 번째 있는 것이 더 보기 편하고 또 쓰기도 편할 듯하다.

 

그리고 2차원 배열을 row_begin부터 row_end까지 돌면서 해당하는 각 튜플을 i+1만큼 나눈 값을 더해줬다. 안쪽의 배열이 끝나면 ^(xor 연산)을 이용해 값을 누적해줬다.

코드

python

def solution(data, col, row_begin, row_end):
    answer = 0
    data.sort(key = lambda x: (x[col-1], -x[0]))
    row_begin -= 1
    tmpArr = []
    
    for i in range(row_begin, row_end):
        tmp = 0
        for j in range(len(data[i])):
            tmp += data[i][j]%(i+1)
        answer = answer ^ tmp
        
    return answer

java

import java.util.*;

class Solution {
    public int solution(int[][] data, int col, int row_begin, int row_end) {
        int answer = 0;
        
        Arrays.sort(data, (o1, o2) -> {
                    if(o1[col-1]==o2[col-1]){
                        return -(o1[0] - o2[0]);
                    }
                   return o1[col-1] - o2[col-1];
                   });
        
        /*
        Arrays.sort(data, new Comparator<int[]>(){
            @Override
            public int compare(int[] o1, int[] o2){
                if(o1[col-1] == o2[col-1]){
                    return -(o1[0]-o2[0]);
                }else{
                    return o1[col-1]-o2[col-1];
                }
            }
        });*/
        
        row_begin -= 1;
                    
        for(int i=row_begin; i<row_end; i++){
            int tmp = 0;
            for(int j=0; j<data[i].length; j++){
                tmp += (data[i][j]%(i+1));
                // System.out.print(data[i][j]);
            }
            answer = answer ^ tmp;
            // System.out.println();
        }
        return answer;
    }
}

'algorithm > 코딩 테스트' 카테고리의 다른 글

프로그래머스, 미로 탈출(java)  (0) 2023.07.18
점 찍기  (0) 2023.07.18
프로그래머스, 무인도 여행(python, java)  (0) 2023.07.11
호텔 대실  (0) 2023.07.10
프로그래머스, 택배상자(python)  (0) 2023.07.08