[알고리즘] 백준 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()
      }
      

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

     

     

     

    댓글