본문 바로가기
  • 개발하는 곰돌이
Algorithm/Programmers

[Kotlin] 프로그래머스 : 테이블 해시 함수

by 개발하는 곰돌이 2022. 12. 28.

문제 링크

 

프로그래머스

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

programmers.co.kr



문제 해설

문제를 해결하기 위해 가장 먼저 배열을 조건에 맞게 정렬해야한다. 2번 조건에 col번째 컬럼의 값을 기준으로 오름차순 정렬하고, 값이 동일하면 첫 번째 컬럼의 값을 기준으로 내림차순 정렬하라는 언급이 있으므로 data를 해당 조건에 맞게 정렬한다(코드의 3번째 줄). 이후 row_begin번째 튜플부터 row_end번째 튜플까지의 \(S_i\)를 구하여 별도의 배열 또는 리스트에 저장한다(코드의 4~11번째 줄). 마지막으로 각 \(S_i\)에 대하여 XOR 연산을 수행하여 반환한다.

 

여기서 col, row_begin, row_end는 모두 1부터 시작하지만 배열과 리스트의 인덱스는 0부터 시작한다는 점만 주의하면 된다.


Code

class Solution {
    fun solution(data: Array<IntArray>, col: Int, row_begin: Int, row_end: Int): Int {
        data.sortWith { o1, o2 -> 
            if (o1[col - 1] == o2[col - 1]) o2[0] - o1[0] 
            else o1[col - 1] - o2[col - 1] 
        }
        val s = ArrayList<Int>()
        for (i in row_begin - 1..row_end - 1) {
            var temp = 0
            for (j in data[i].indices) {
                temp += data[i][j] % (i + 1)
            }
            s.add(temp)
        }
        var result = s[0]
        for (i in 1..s.lastIndex) {
            result = result xor s[i]
        }

        return result
    }
}

'Algorithm > Programmers' 카테고리의 다른 글

[Java] 프로그래머스 : 주식가격  (0) 2022.11.29
[Java] 프로그래머스 : 더 맵게  (0) 2022.11.24

댓글