sggnology
하늘속에서IT
sggnology
전체 방문자
오늘
어제
  • 분류 전체보기 (83)
    • Algorithm (31)
      • Programmers (27)
      • Baekjoon (4)
    • WIKI (4)
      • VirtualBox (1)
      • Power Toys (1)
    • NodeJS (4)
      • nvm (1)
      • React (1)
      • Vue (1)
    • Dev Language (3)
      • Java (2)
      • Kotlin (1)
    • Spring Boot (17)
      • Gradle (1)
      • JPA (3)
    • DB (4)
      • MariaDB (3)
      • Redis (0)
    • Android (6)
      • Debug (3)
    • Nginx (3)
      • Debug (1)
    • Intellij (0)
    • Network (1)
    • Git (2)
      • GitHub (2)
    • Chrome Extension (0)
    • ETC (5)
      • Monitoring (2)
    • Linux (1)
      • WSL (1)
    • Visual Studio (1)
    • Side Project (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 레벨3
  • 안드로이드 스튜디오
  • java
  • DB
  • 알고리즘
  • 오블완
  • JPA
  • 프로그래머스
  • kotlin
  • spring boot
  • 레벨2
  • docker
  • nginx
  • 티스토리챌린지
  • 백준
  • Android Studio
  • 고득점 Kit
  • mariadb
  • 연습문제
  • 고득점KIT

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
sggnology

하늘속에서IT

Algorithm/Programmers

프로그래머스 :: 연습문제 :: 테이블 해시 함수

2022. 12. 25. 18:13
728x90

풀이

class 테이블_해시_함수 {
    fun solution(data: Array<IntArray>, col: Int, row_begin: Int, row_end: Int): Int {

        val sortedTuples = getSortedTuples(data, col, row_begin, row_end)
        val modValues = getModValues(sortedTuples, row_begin)
        val xorOperatedValue = getXorOperatedValue(modValues)

        println(xorOperatedValue)

        return xorOperatedValue
    }

    /**
     * 설명
     * - 문제의 규칙에 따라 튜플을 정렬한다.
     * - row_begin, row_end 까지 배열을 잘라낸다.
     * */
    private fun getSortedTuples(data: Array<IntArray>, col: Int, row_begin: Int, row_end: Int): List<List<Int>>{
        return data.sortedBy { it[col - 1] }
            .map { it.toList() }
            .groupBy { it[col - 1] }
            .values
            .map {values ->
                values.sortedByDescending {value -> value[0] }
            }
            .flatten()
            .slice(IntRange(row_begin-1,row_end-1))
    }

    /**
     * 설명
     * - 문제에서 `S_i` 방식의 문제를 해결하기 위한 함수
     * */
    private fun getModValues(lists: List<List<Int>>, begin: Int): List<Int>{

        var tmpBegin = begin

        val modValues = lists.map { list ->
            var sum = 0;

            for(ele in list){
                sum += ele % tmpBegin
            }

            tmpBegin += 1

            sum
        }

        return modValues
    }

    /**
     * 설명
     * - list 내부의 모든값을 `xor` 처리하는 함수
     * */
    private fun getXorOperatedValue(list: List<Int>): Int{

        val startValue = list.first()
        var xorValue = startValue;

        for(index in 1 until list.size){
            xorValue = xorValue xor list[index]
        }

        return xorValue
    }
}

출처

 

프로그래머스

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

programmers.co.kr


풀이(github)

 

GitHub - sggnology/programmers-algorithm: 프로그래머스 알고리즘 코드 정리입니다.

프로그래머스 알고리즘 코드 정리입니다. Contribute to sggnology/programmers-algorithm development by creating an account on GitHub.

github.com

 

728x90

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

프로그래머스 :: 연습문제 :: 무인도 여행  (0) 2023.02.21
프로그래머스 :: 연습문제 :: 뒤에 있는 큰 수 찾기  (0) 2023.02.16
프로그래머스 :: 연습문제 :: 혼자 놀기의 달인  (0) 2022.12.12
프로그래머스 :: 연습문제 :: 점찍기  (0) 2022.12.05
프로그래머스 :: 연습문제 :: 귤고르기  (0) 2022.11.25
    'Algorithm/Programmers' 카테고리의 다른 글
    • 프로그래머스 :: 연습문제 :: 무인도 여행
    • 프로그래머스 :: 연습문제 :: 뒤에 있는 큰 수 찾기
    • 프로그래머스 :: 연습문제 :: 혼자 놀기의 달인
    • 프로그래머스 :: 연습문제 :: 점찍기
    sggnology
    sggnology
    하늘은 파란색이니까 내 삶도 파란색이길 ㅎㅎ

    티스토리툴바