반응형
목차 LIST
최종 결과
import java.util.*;
public class Main {
public static void main(String[] args) {
int[][] data = {{2,2,6}, {1,5,10}, {4,2,9}, {3,8,3}};
int res = solution(data, 2, 2, 3);
System.out.print(res);
}
public static int solution(int[][] data, int col, int row_begin, int row_end) {
Arrays.sort(data, (o1, o2) ->{
if(o1[col-1] == o2[col-1]) {
return Integer.compare(o2[0], o1[0]);
}
return Integer.compare(o1[col-1], o2[col-1]);
});
int result = 0;
for(int i = row_begin - 1; i < row_end; i++) {
int mod = 0;
for(int d : data[i]) {
mod += d % (i+1);
}
result = result ^ mod;
}
return result;
}
}
Integer.compare
public static int compare(int x, int y)
Parameter :
x :
the first int to compare
y :
the second int to compare
Return :
This method returns the value zero if (x==y),
if (x < y) then it returns a value less than zero (음수, -1)
and if (x > y) then it returns a value greater than zero. (양수, 1)
return Integer.compare(o2[0], o1[0]);
여기선 0번째 컬럼 값으로 "내림 차순"을 해야 하기 때문에 순서를 o2, o1 로 했다.
Arrays.sort는 배열을 오름차순으로 정렬하는 역할을 가지기 때문에 값이 음수면 o1이 o2보다 앞에, 양수이면 o2가 o1보다 앞에 위치해야 함을 나타낸다. 따라서 양수값을 리턴하면 두 수를 swap한다.
문제는 풀었지만 만족스럽지 않았던 코드
먼저, 정렬을 위해 2중 포문을 사용하는게 마음에 안들었지만 떠오르는게 없어서 우선 사용했다.
사실 이중포문으로 정렬해서 시간초과가 뜰 줄 알았다.
import java.util.*;
public class Main {
public static void main(String[] args) {
int[][] data = {{2,2,6}, {1,5,10}, {4,2,9}, {3,8,3}};
int res = solution(data, 2, 2, 3);
System.out.print(res);
}
public static int solution(int[][] data, int col, int row_begin, int row_end) {
col = col-1;
for (int i = data.length-1; i > 0 ; i--) {
for (int j = 0; j < i; j++) {
int first = data[j][col];
int second = data[j + 1][col];
if (first > second) {
swap(data, j);
} else if (first == second) {
first = data[j][0];
second = data[j + 1][0];
if (first < second) {
swap(data, j);
}
}
}
}
int result = 0;
for(int i = row_begin - 1; i < row_end; i++) {
int mod = 0;
for(int d : data[i]) {
mod += d % (i+1);
}
result = result ^ mod;
}
return result;
}
public static void swap(int[][] data, int j) {
int[] tmp = data[j];
data[j] = data[j + 1];
data[j + 1] = tmp;
}
}
회고
배열 정렬에는 Arrays.sort를 사용하기
처음부터 불필요한 코드랑 중복 없게 깔끔하게 짤 수 있게 생각하기
반응형
'알고리즘' 카테고리의 다른 글
코딩테스트 언어 Java->Python 변경 기록 (0) | 2024.03.14 |
---|---|
[프로그래머스] 숫자 변환하기 Java 풀이 (0) | 2023.07.28 |
[프로그래머스] 뒤에 있는 큰 수 찾기 Java 풀이 (0) | 2023.05.28 |
[프로그래머스] 과제 진행하기 Java 풀이 (0) | 2023.05.27 |
[프로그래머스] 리코쳇 로봇 Java 풀이 (0) | 2023.05.25 |
댓글