반응형
📖 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
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
반응형
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Level1] 공원 산책 (JAVA) (0) | 2024.03.18 |
---|---|
[프로그래머스/Level3] 거스름돈 (JAVA) (0) | 2024.03.16 |
[프로그래머스/Level2] 혼자서 하는 틱택토 (JAVA) (0) | 2024.03.14 |
[프로그래머스/Level2] 두 원 사이의 정수 쌍 (JAVA) (0) | 2024.03.13 |
[프로그래머스/Level2] 점 찍기 (JAVA) (0) | 2024.03.13 |