-
[백준 알고리즘/Kotlin] 1181번 단어 정렬 (feat. Set에서 List로 변경?)IT Study/백준 알고리즘 2024. 1. 1. 17:19728x90
1181번 문제는 문제 속에 정답이 있습니다.
1. 길이가 짧은 것부터
2. 길이가 같으면 사전 순으로
단, 중복된 단어는 하나만 남기고 제거해야 한다.문제는 풀이해야 할 순서를 만들고, 그 순서대로 코드를 작성하면 되는데요. 아래와 같이 순서를 바꿔보도록 하죠.
1. 중복된 단어는 하나만 남기고 제거해야 한다.
2. 길이가 짧은 것부터, 길이가 같으면 사전 순으로먼저 중복을 제거하고, 정렬해주도록 하겠습니다.
최종 코드
import java.lang.StringBuilder fun main() = System.`in`.bufferedReader().use { br -> val n = br.readLine().toInt() val result = StringBuilder() // 중복 제거 val set = mutableSetOf<String>() repeat(n) { val word = br.readLine() set.add(word) } // 단어의 길이 → 알파벳 순서 val sortedList = set.toList().sortedWith(compareBy({ it.length }, { it })) for (word in sortedList) { result.append("$word\n") } println(result) }
1. mutableSetOf
중복된 원소를 허용하지 않기 위해 mutableSetOf을 사용하였습니다.
mutableSetOf 외에도 setOf도 사용할 수 있습니다.
변경 가능한 Set을 생성할 때에는 mutableSetOf를, 변경 불가한 Set을 생성할 때에는 setOf를 사용합니다.
(이 문제에선 입력 받으니, 변경 가능한 mutableSetOf를 사용해야겠죠?)
val set = mutableSetOf<String>() repeat(n) { val word = br.readLine() set.add(word) }
2. Set에서 List로 변경
val sortedList = set.toList().sortedWith(compareBy({ it.length }, { it }))
Set에서 List로 변경한 이유?
Set은 순서가 없는 집합이므로, 이를 순서가 있는 List로 변환하여 정렬을 수행할 수 있도록 하였습니다.
sortedWith(compareBy({ it.length }, { it }))
이 부분은 변환된 리스트를 정렬하는 역할을 합니다.
sortedWith 함수
Comparator를 인자로 받아 리스트를 정렬합니다.
compareBy 함수
Comparator를 생성하는 함수로, 여러 개의 선택자를 인자로 받아 각 선택자를 기준으로 순차적으로 비교합니다.
{ it.length }
첫 번째 선택자로, 단어의 길이를 기준으로 합니다.
이에 따라 먼저 리스트는 단어의 길이에 따라 정렬됩니다.
{ it }
두 번째 선택자로, 단어 자체를 기준으로 합니다.
길이가 같은 단어들은 단어 자체를 비교하여 정렬됩니다. 이때 단어는 알파벳 순서대로 정렬됩니다.'IT Study > 백준 알고리즘' 카테고리의 다른 글
[백준 알고리즘/Kotlin] 2751번 수 정렬하기2 (feat. 코드 비교하기) (2) 2024.01.06 [백준 알고리즘/Kotlin] 1847번 스택 수열 (feat. Stack, 스택 관련 메서드) (0) 2024.01.04 [백준 알고리즘/Kotlin] 2563번 색종이 (feat. 2차원 배열 2) (0) 2023.12.31 [백준 알고리즘/Kotlin] 2738번 행렬 덧셈 (feat. 2차원 배열) (0) 2023.12.31 [백준 알고리즘/Kotlin] 1157번 단어 공부 (feat. maxOrNull, count, indexOf) (0) 2023.12.27