🧫 문제 분석
✔️ 출처
📖 문제

매우 간단한 구현문제
다만 4번 항목이 헷갈렸다.
모든 S_i를 누적하여 bitwise XOR 한 값을 해시 값으로 반환
S_i를 누적합한다음 XOR 하라는 건가? 싶은데 그건 또 아닌거같아서
1번 데이터와 2번 데이터를 XOR 연산 후
그 데이터를 또 3번 데이터와 XOR 연산 .. 이런식이다.
🔅 문제 풀이
import java.util.Arrays;
class Solution {
// 해시 함수 매개변수 col, row_begin, row_end
// col 번째 컬럼 기준 오름차순 , 같다면 기본키(첫번째 컬럼) 기준 내림차순
// 정렬후 S_i를 i 번째 행의 튜플에 대해 각 컬럼 값을 i로 나눈 나머지들의 합으로 정의
// row_begin <= i <= row_end 인 모든 S_i 누적, XOR 연산 한 값 반환
public int solution(int[][] data, int col, int row_begin, int row_end) {
int[] S = new int[row_end - row_begin + 1];
// col 기준 오름차순, 같다면 기본키 기준 내림차순 정렬
Arrays.sort(data, (o1, o2) -> o1[col - 1] != o2[col - 1]
? o1[col - 1] - o2[col - 1]
: o2[0] - o1[0]);
// S_i 를 i 번째 행의 튜플에 대해 각 컬럼 값을 i로 나눈 나머지들의 합으로 정의
for (int i = row_begin - 1; i < row_end; i++) {
int tmp = 0;
for (int j = 0; j < data[i].length; j++) {
tmp += data[i][j] % (i + 1);
}
// S_i
S[i - (row_begin - 1)] = tmp;
}
// XOR 연산 누적
int answer = S[0];
for (int i = 1; i < S.length; i++) {
answer ^= S[i];
}
return answer;
}
}
이렇게 하지 않고 바로 XOR 연산 누적하면 된다.
나는 4번 항목을 잘못 이해해서 저렇게 했다.
❗ 오답노트 / 필요한 지식
'programmers > Lv 2' 카테고리의 다른 글
가장 큰 정사각형 찾기 [자바] (0) | 2025.02.13 |
---|---|
디펜스 게임 [자바] (1) | 2025.02.11 |
행렬 테두리 회전하기 [자바] (0) | 2025.02.11 |
다리를 지나는 트럭 [자바] (0) | 2025.02.04 |
숫자 카드 나누기 [자바] (1) | 2025.02.01 |