[알고리즘] 백준 10989번 : 수 정렬하기 3 (Kotlin)

www.acmicpc.net/problem/10989

 

10989번: 수 정렬하기 3

첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.

www.acmicpc.net

이 문제는 시간초과에 대해 신경써야 하는 문제이므로 비교적 성능이 무거운 Scanner의 사용을 배제한다

 

 

 

1. 아슬아슬하게 채점된 BufferedReader + BufferedWriter + Arrays.sort()

  
  fun main() {

      val br = BufferedReader(InputStreamReader(System.`in`))
      val bw = BufferedWriter(OutputStreamWriter(System.out))

      val N = br.readLine().toInt()
      val array = IntArray(N)

      for (i in 0 until N) {
          array[i] = br.readLine().toInt()
      }

      br.close()

      array.sort()
  //    Arrays.sort(array)
  
      for (i in 0 until N) {
          bw.write(array[i].toString())
          bw.newLine()
      }
 
      bw.flush()
      bw.close()
  }
  

array.sort()를 들어가보면 결국 Arrays.sort(array)를 실행시키는것은 동일하나 Arrays.sort(array)의 경우 자바 유틸을 import 시켜야 하기 때문에 array.sort()를 사용하였다

메모리 효율도 조금더 높아지긴 했는데 이것때문인지는 정확히 모르겠다

 

 

 

2. BufferedReader + BufferedWriter + IntArray()

  
  fun main() {
  
      val br = System.`in`.bufferedReader()
      val bw = System.`out`.bufferedWriter()
      val N: Int = br.readLine().toInt()

      val array = IntArray(10001)
      for (i in 0 until N) {
          array[br.readLine().toInt()]++
      }
      br.close()

      for (i in array.indices) {
          bw.write("$i\n".repeat(array[i]))
      }
      bw.close()
  }
  

코드도 더 짧아지고 시간도 정확히 절반이나 단축됐다..!

 

 

 

댓글