코테/프로그래머스

[프로그래머스/Level2] 테이블 해시 함수 (JAVA)

imname1am 2024. 3. 16. 22:32
반응형

📖 문제

 

프로그래머스

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

programmers.co.kr

 

 

 

💡  풀이 방식

• 구현, 정렬

1. data 배열을 정렬한다.

- (col-1)번째 컬럼 값이 동일하면, 첫 번째 컬럼 값 기준 내림차순 정렬

- 다르면, (col-1)번째 컬럼 값 기준 오름차순 정렬

 

2. (row_start - 1) ~ (row_end - 1)번째 행에 대해 아래와 같이 진행한다.

- i 번째 행에 대한 합인 S_i을 누적해 더하며 구한다. (sum += data[i][j] % (i + 1))

- 그리고 나서 answer과 S_i 값을 XOR 연산한다.

 

 

💥 유의사항

문제에서는 인덱스 시작을 0,1,2,... 가 아닌 1,2,3,.. 이렇게 진행하므로 인덱스에 유의해야 한다,,

 

 

🔺 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.*;
 
class Solution {    
    public int solution(int[][] data, int col, int row_begin, int row_end) {
        int answer = 0;
        
        Arrays.sort(data, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                if(o1[col-1== o2[col-1]) {    // (col-1)번째 컬럼 값이 동일하면, 첫 번째 컬럼 값 기준 내림차순 정렬
                    return o2[0- o1[0];
                }
                return o1[col-1- o2[col-1];    // 다르면, (col-1)번째 컬럼 값 기준 오름차순 정렬
            }
        });
        
        for(int i = row_begin - 1 ; i < row_end ; i++) {
            int sum = 0;    // i번째 행에 대한 sum
            for(int j = 0 ; j < data[0].length ; j++) {
                sum += (data[i][j] % (i + 1));
            }
            answer ^= sum;    // XOR 연산
        }
        
        return answer;
    }
}
cs

 

 

 

 

➕ 다른 풀이 방식

람다식으로 정렬한 방법

Arrays.sort(data, ((o1,o2) -> o1[col - 1] != o2[col - 1] ? o1[col - 1] - o2[col - 1] : o2[0] - o1[0]));

 


💦 어려웠던 점

- map에 행 별 S_i 저장해두고 XOR 연산 한꺼번에 하려고 했는데 그럴 필요 없이 그냥 매번 바로바로 해주면 되는 것이었다,,

 

 

1회독 2회독 3회독 4회독 5회독
V        

(참고)

 

프로그래머스 테이블 해시 함수

이차원 배열을 DB테이블 처럼 쓴다고 한다.행은 튜플, 열은 컬럼을 나타낸다.해시 함수는 col, row_begin, row_end을 입력으로 받습니다.테이블의 튜플을 col번째 컬럼의 값을 기준으로 오름차순 정

velog.io

 

반응형