본문 바로가기

[IT] 코딩테스트/[문제 및 풀이] 프로그래머스

[프로그래머스] 테이블 해시 함수 / 자바(Java)

728x90

문제

https://school.programmers.co.kr/learn/courses/30/lessons/147354

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


해설

중요하게 볼 부분이 2개 있습니다.

  1. 2차원 배열의 조건이 여러개인 정렬
  2. XOR

 

1. 2차원 배열의 조건이 여러개인 정렬

주어진 2차원 배열을 정렬하기 위해 Arrays.sort와 람다식, 삼항연산자를 이용하였습니다.

Arrays.sort(data, (a,b)-> a[col-1]==b[col-1] ? b[0]-a[0] : a[col-1]-b[col-1] );

이때 col은 1부터 시작하므로 원하는 내용을 얻기 위해 0으로 맞춰주었습니다.

 

2. XOR

사칙연산 이외에는 자주 쓰지 않아서 잘 몰랐지만 비트단위 XOR도 표현하는 방식이 있었습니다.

answer ^= sum;

 

주의점

  • 배열 data는 1번부터 숫자가 들어가 해당 열을 기반으로 연산시 +1을 해주어야 한다.

코드

import java.util.*;
class Solution {
    public int solution(int[][] data, int col, int row_begin, int row_end) {
        int answer = 0;
        Arrays.sort(data, (a,b)-> a[col-1]==b[col-1] ? b[0]-a[0] : a[col-1]-b[col-1] );

        for(int i=row_begin-1;i<row_end;i++){
            int sum = 0;
            for(int j=0;j<data[0].length;j++){
                sum += data[i][j] % (i+1);
            }
            answer ^= sum;
        }
        return answer;
    }
}
728x90