[알고리즘] 백준 2839번 : 설탕 배달 (Kotlin)

    www.acmicpc.net/problem/2839

     

    2839번: 설탕 배달

    상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그

    www.acmicpc.net

    알고리즘은 정말 생각하면 할수록 더 나은 풀이가 나오는것 같습니다..!

     

    1. 제가 처음 풀었을때의 코드입니다

      
      fun main() = with(System.`in`.bufferedReader()) {
    
          var input = readLine().toInt()
          var count = 0
    
          while (true) {
              if (input % 5 == 0) {
                  print("${input / 5 + count}")
                  break
              } else if (input <= 0) {
                  print(-1)
                  break
              }
    
              input -= 3
              count++
          }
      }
      

    근데 채점하면 효율이 떨어지는것 같아서 다른분들 코드도 보고 이것저것 찾아봤습니다

    정말 신기한 코드들이 많더군요!

     

     

    2. 짧은 코드 버전

      
      fun main() = with(System.`in`.bufferedReader()) {
          val input = readLine().toInt()
          var bag = input / 5
          while ((input - bag * 5) % 3 > 0 && bag >= 0) {
              --bag
          }
          print(if (bag < 0) -1 else (input - bag * 5) / 3 + bag)
      }
      

     

     

    3.

      
      fun main() = with(System.`in`.bufferedReader()) {
    
          val input = readLine().toInt()
    
          for (i in (input / 5).downTo(0)) {
              val bag = (input - i * 5)
    
              if (bag % 3 != 0) {
                  continue
              }
    
              print(i + bag / 3)
              return
          }
          print(-1)
      }
      

     

     

    4.

      
      fun main() = with(System.`in`.bufferedReader()) {
          val input = readLine().toInt()
          
          for (i in 0 until input) {
              val bag = input - 3 * i
    
              if (bag < 0) {
                  println(-1)
                  break
              }
              if (bag.rem(5) == 0) {
                  println(i + bag / 5)
                  break
              }
          }
      }
      

     

     

    1번을 제외한 2,3,4번은 다른분들의 코드를 많이 참조해서 공부하였습니다

    언젠간 깊어지기를..!

    댓글