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

[Kotlin] 백준 1181 : 단어 정렬

by 개발하는 곰돌이 2022. 11. 22.

문제 링크

 

1181번: 단어 정렬

첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

www.acmicpc.net



문제 해설

여러 문자열의 입력이 주어졌을 때 입력된 문자열들의 중복을 제거하고 길이가 짧은순으로 정렬하되, 같은 길이의 문자열은 사전순으로 정렬하는 문제이다. 여러가지 해법이 있겠지만 나의 해결 순서는 다음과 같다.

  1. 입력받은 문자열을 배열에 저장
  2. 중복 문자열 제거
  3. 문자열을 사전순으로 정렬
  4. 문자열의 길이가 짧은 순으로 정렬

2. 중복 문자열 제거의 경우에는 Set에 입력받은 문자열을 저장하는 방법도 있지만 나는 배열 객체에 제공되는 distinct()메소드를 사용했다.


Code

fun main() = with(System.`in`.bufferedReader()) {
    val bw = System.out.bufferedWriter()
    val n = readLine().toInt()
    // distinct()로 중복을 제거하고 sorted()로 사전순 정렬을 한 다음 sortedWith로 길이가 짧은순서로 정렬
    val strings = Array(n) { readLine() }.distinct().sorted().sortedWith(compareBy { it.length })
    for (s in strings) {
        bw.write("$s\n")
    }
    bw.close()
}

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

[Kotlin] 백준 1010 : 다리 놓기  (1) 2022.11.24
[Kotlin] 백준 1094 : 막대기  (0) 2022.11.23
[Kotlin] 백준 1308 : D-Day  (0) 2022.11.23
[Kotlin] 백준 1251 : 단어 나누기  (0) 2022.11.23
[Kotlin] 백준 1811 : Adjacent Mastermind  (0) 2022.11.22

댓글