반응형
https://school.programmers.co.kr/learn/courses/30/lessons/147354
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
package Programmers; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; public class 테이블해시함수 { public static void main(String[] args){ int[][] data = {{2,2,6},{1,5,10},{4,2,9},{3,8,3}}; int col = 2; int row_begin = 2; int row_end = 3; 테이블해시함수 T = new 테이블해시함수(); T.solution(data, col, row_begin, row_end); //{4, 2, 9}, {2, 2, 6}, {1, 5, 10}, {3, 8, 3} } public int solution(int[][] data, int col, int row_begin, int row_end) { int answer = 0; //1. 정렬(col번째 기준으로 오름차순 정렬하고 값이 동일하면 첫번째 컬럼 기준으로 내림차순정렬) Arrays.sort(data, new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) { if(o1[col - 1] == o2[col - 1]){ return o2[0] - o1[0]; } return o1[col - 1] - o2[col - 1]; } }); List<Integer> modArr = new ArrayList<>(); //2. begin ~ end 까지 Mod 합을 modArr 배열에 집어넣는다. for (int i = row_begin-1; i <= row_end-1; i++) { int sum = 0; for (int j = 0; j < data[0].length; j++) { int tempMod = data[i][j] % (i+1); sum += tempMod; } modArr.add(sum); } //3. modArr에 집어넣은 합 들을 하나씩 꺼내면서 XOR 연산해서 answer 에 넣어준다. answer = modArr.get(0); for (int i = 1; i < modArr.size(); i++) { answer ^= modArr.get(i); } return answer; } }
1. 기준에맞게 정렬
- 주어진 col 기준으로 오름차순 정렬
- 같다면 첫번째 컬럼 기준으로 내림 차순 정렬한다.
Comparator 활용해서 2차원 배열 정렬함.
2. List 만들어서 row_begin ~ row_end 까지 배열 탐색하면서 해당 튜플의 값들을 % 연산해서 modArr에 집어넣는다.
3. 만들어진 modArr 집합을 하나씩 꺼내서 XOR 연산해준다.
※ 문제이해하는데만 한시간 걸린듯
정렬하라는데 뭔소리인지 몰라서 해맴 XOR 연산이 뭔가 하고 또 찾아봄 이해하면 금방 푸는 문제
data[i][j] 면 j값 = col 변수다 j값 줄테니 그거대로 오름차순 내림차순 정리하고 조건하나 더줄테니 그때는 첫번째 0번 인덱스 값 따라서 정렬하라는 거다.
반응형
'기타 > 알고리즘' 카테고리의 다른 글
[알고리즘] 프로그래머스 -명예의전당 (Java) queue - Lv.1 (0) | 2023.05.01 |
---|---|
[알고리즘] 프로그래머스 - 점찍기 (Java) (0) | 2023.04.30 |
[알고리즘] 프로그래머스 - 마법의엘리베이터 (0) | 2023.04.27 |
[알고리즘] 프로그래머스 - 이모티콘할인행사 (java) - dfs 탐색 (0) | 2023.04.26 |
[알고리즘] 프로그래머스 -택배 배달과 수거하기 (Java) (0) | 2023.04.25 |