Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 28 | 29 | 30 |
Tags
- spring
- leetcode
- leetcode 69
- LEVEL2
- 백준
- 프로그래머스
- 배포
- mysql
- Gold4
- AWS
- 구현
- gold2
- PYTHON
- error
- Kakao
- glod5
- CSS
- 오류
- java
- glod4
- 개념
- 9252
- HTML
- siver3
- 백엔드
- LCS
- LEVEL1
- gold5
- jpa
- Thymeleaf
Archives
- Today
- Total
이 험난한 세상에서어어~
테이블 해시 함수 본문
문제 설명
열은 컬럼을 나타내고 행은 튜플을 나타내는 2차원 배열이 있다. col 번째 컬럼을 오름차순으로 정렬하되 그 값이 동일하면 첫 번째 컬럼의 값으로 내림차순 정렬을 한다.
그리고 row_begin부터 row_end까지의 값에다가 해당 튜플을 나눈 나머지의 전체 합을 s_i라고 할 때 각 s_i의 누적 xor 값을 반환하는 문제이다.
https://school.programmers.co.kr/learn/courses/30/lessons/147354?language=java
문제 풀이
첫 번째 접근
일단 주어진 조건에 맞게 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 |