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

정렬18

[Kotlin] 백준 17612 : 쇼핑몰 문제 링크 : https://www.acmicpc.net/problem/17612문제 해설일종의 정렬 문제. 계산대를 우선순위 큐로, 빠져나온 고객을 리스트로 생각해볼 수 있다. 고객을 정렬해야 하니 고객 정보를 어떻게 할지 생각해보자. 각각의 고객은 회원번호와 계산해야 할 물건의 개수를 갖고 있다. 그리고 계산해야 할 물건의 개수는 계산에 걸리는 시간과 같다. 우선 계산대에 들어가는 순서부터 생각해보면 가장 시간이 적게 걸리는 계산대에 먼저 들어가고, 같은 시간이 걸리는 계산대는 번호가 빠른곳부터 들어가게 된다. 모든 고객은 계산대에 들어가게 되니 각 고객 번호와 계산에 걸리는 시간에 더불어 들어간 계산대 번호를 속성으로 넣어주고, 시간과 계산대 번호를 정렬 기준으로 정해준다.private class .. 2024. 5. 22.
[Kotlin] 백준 21944 : 문제 추천 시스템 Version 2 문제 링크 21944번: 문제 추천 시스템 Version 2 recommend, recommend2, recommend3 명령이 주어질 때마다 문제 번호를 한 줄씩 출력한다. 주어지는 recommend, recommend2, recommend3 명령어의 총 개수는 최소 1개 이상이다. www.acmicpc.net 문제 해설 [Kotlin] 백준 21939 : 문제 추천 시스템 Version 1의 확장 문제. Version 1에서 알고리즘 분류를 비롯하여 추천 명령어 2종류가 추가되었다. 이전 문제와 달리 문제를 객체로 구현하였다. 이 때 문제 클래스는 난이도가 높은 순으로, 난이도가 같다면 문제 번호가 큰 순으로 정렬되도록 Comparable을 구현하여 작성한다. private class Problem(.. 2023. 9. 13.
[Kotlin] 백준 16496 : 큰 수 만들기 문제 링크 16496번: 큰 수 만들기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 리스트에 포함된 수가 주어진다. 수는 공백으로 구분되어져 있고, 1,000,000,000보다 작거나 같은 음이 아닌 정수 이다. 0을 제외한 나 www.acmicpc.net 문제 해설 기본적으로는 정렬을 활용한 문제지만 정렬 기준을 어떻게 할지가 관건인 문제라고 볼 수 있다. 수를 이어붙여서 더 큰수를 만들기 위해서는 수를 문자열로 다뤄야 한다. 정렬 기준자체는 굉장히 간단하다. s1과 s2가 있을 때, s1 + s2와 s2 + s1 중 더 큰것이 우선적으로 오도록 정렬하면 된다. 예를 들어 123과 45가 있을 때 12345보다 45123이 더 크기 때문에 [45, 123]으로 정렬할 수.. 2023. 4. 3.
[Kotlin] 코틀린으로 정렬 관련 문제를 풀 때 사용하는 배열이나 리스트를 정렬하는 메소드의 종류 및 각 메소드의 차이 목차 개요 기본적으로 코틀린에서는 배열도 객체로 취급되어 sort()와 같은 메소드를 사용할 수 있다. 그런데 이들 메소드들은 종류에 따라 약간의 차이가 있고, 메소드를 호출한 객체의 타입과 메소드의 종류에 따라 성능도 차이난다. 백준 - 수 정렬하기 5 문제를 푸는데 그냥 단순한 정렬 문제라고 생각했다가 정렬 메소드의 종류에 따라 TLE가 나기도 했고 AC가 나오기도 했다. 이들 메소드들 사이에 무슨 차이가 있길래 무엇을 쓰느냐에 따라 결과가 다르게 나타나는지 궁금해서 내부 구조를 확인해봤는데 생각보다 많은 차이가 있었다. Kotlin 정렬 메소드의 종류 코틀린에서 배열이나 리스트를 정렬하는 메소드는 작동 방식과 결과 타입에 따른 3가지, 정렬 방법에 따른 3가지로 구분할 수 있다. 작동 방식과 결과 .. 2023. 3. 31.
[Kotlin] 백준 1599 : 민식어 문제 링크 1599번: 민식어 무엇인가를 창조하는 것은 어렵다. 오민식은 지금까지 어려운 다른나라의 언어를 쓰면서 백성들이 고통에 받는 것을 슬퍼하고 새로운 언어를 만들고자 했다. 그는 창조의 고통에 시달리던 중에 www.acmicpc.net 문제 해설 주어진 문자열들을 민식어의 순서에 맞게 정렬해야한다. 주어진 민식어 단어들을 사전순으로 정렬하기 위해 아래와 같이 민식어 단어의 모든 알파벳을 대응하는 순서의 영어 알파벳으로 치환하는 메소드를 작성한다. 이 때, n과 g가 붙어있는 ng의 경우는 무조건 하나의 알파벳으로 생각한다는 조건이 있기 때문에 ng를 가장 먼저 치환한다. private fun String.toMinsik() = this.replace("ng", "L") .replace("a", ".. 2023. 3. 18.
[Kotlin] 백준 16499 : 동일한 단어 그룹화하기 문제 링크 16499번: 동일한 단어 그룹화하기 첫째 줄에 단어의 개수 N이 주어진다. (2 ≤ N ≤ 100) 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 소문자로만 이루어져 있고, 길이는 10을 넘지 않는다. www.acmicpc.net 문제 해설 그룹에 속한 단어는 모두 같은 알파벳으로 이루어져 있고, 개수도 같다는 것은 결국 해당 그룹에 속한 문자열들은 각각 정렬했을 때 같은 문자열이 된다는 뜻이다. 즉, 입력받은 문자열을 문자배열로 변경하여 정렬한 후, 다시 문자열로 변경하여 Set에 저장하면 그룹의 최소 개수를 구할 수 있다. 이후 Set의 크기를 출력하면 된다. Code fun main() = with(System.`in`.bufferedReader()) { va.. 2023. 3. 10.
[Kotlin] 백준 16678 : 모독 문제 링크 16678번: 모독 명예에 죽고 명예에 사는 나라 얼라이언스에는 1명의 왕과 N명의 국회의원이 있다. 각 N 명의 국회의원은 a1, a2, ..., aN 의 명예 점수를 갖고 있으며, 명예 점수가 양수인 한 그들은 국회의원을 www.acmicpc.net 문제 해설 프로젝트 "Defile"은 모든 명예 점수를 1씩 감소시키고 이 때, 0이 되는 명예 점수만 있다면 계속 반복하는 방식이다. 즉, 단 한번의 "Defile"으로 모든 국회의원의 명예 점수를 0 이하로 만들기 위해선 가장 낮은 명예 점수가 1이어야하고, 각 명예 점수의 차이가 1 이하여야 한다는 것이다. 해커의 수를 최소로 하기 위해선 명예 점수를 1부터 공차가 1인 등차수열을 이루되, 중복은 신경쓰지 않아도 된다. 이를 위해서 명예 .. 2023. 2. 22.
[Kotlin] 백준 27315 : 틀리는 건 싫으니까 쉬운 문제에 올인하려고 합니다 문제 링크 27315번: 틀리는 건 싫으니까 쉬운 문제에 올인하려고 합니다 첫 번째 줄에 두 정수 $N$, $M$이 공백으로 구분되어 주어진다. ($1\leq M\leq N\leq 500\,000$) 다음 $N$개의 줄에 $D_i$ $P_i$ $T_i$ $E_i$의 네 정수로 각각 문제의 아이디어 난이도, 구현 난이도와 데이터 소유 www.acmicpc.net 문제 해설 기본적으로 틀렸습니다를 최소로 줄이려면 한별이의 아이디어 능력(이하 \(HD\))보다 작거나 같은 아이디어 난이도(이하 \(D\))를 가진 문제 중에서 구현 난이도(이하 \(P\))가 낮은 문제부터 해결해야 한다. 틀렸습니다의 개수는 각 문제마다 \(P\)와 한별이의 구현 능력(이하 \(HP\))의 차이이고, 문제를 풀 때마다 \(HP\.. 2023. 2. 18.