[알고리즘] 백준 2798번 : 블랙잭 (Kotlin)

    www.acmicpc.net/problem/2798

     

    2798번: 블랙잭

    첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는다. 합이 M을 넘지 않는 카드 3장을 찾을 수 있

    www.acmicpc.net

    1. Scanner

      
      fun main() = with(Scanner(System.`in`)) {
          val N: Int = nextInt()
          val M: Int = nextInt()
          val arr = IntArray(N)
          var result = 0
    
          for (i in 0 until N) {
              arr[i] = nextInt()
          }
    
          for (i in 0 until N - 2) {
              for (j in i + 1 until N - 1) {
                  for (k in j + 1 until N) {
                      val temp = arr[i] + arr[j] + arr[k]
                      if (M == temp) {
                          result = temp
                      }
                      if (temp in (result + 1) until M) {
                          result = temp
                      }
                  }
              }
          }
          print(result)
      }
      

     

     

    2. BufferedReader

      
      fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
          var st = StringTokenizer(readLine(), " ")
          val N = st.nextToken().toInt()
          val M = st.nextToken().toInt()
    
          val arr = IntArray(N)
          var result = 0
    
          st = StringTokenizer(readLine(), " ")
          for (i in 0 until N) {
              arr[i] = st.nextToken().toInt()
          }
    
          for (i in 0 until N - 2) {
              for (j in i + 1 until N - 1) {
                  for (k in j + 1 until N) {
                      val temp = arr[i] + arr[j] + arr[k]
                      if (M == temp) {
                          result = temp
                      }
                      if (temp in (result + 1) until M) {
                          result = temp
                      }
                  }
              }
          }
          print(result)
      }
      

     

     

    3. BufferedReader (Backtracking)

      
      fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
          var st = StringTokenizer(readLine(), " ")
          val N = st.nextToken().toInt()
          val M = st.nextToken().toInt()
    
          val arr = IntArray(N)
          var result = 0
    
          st = StringTokenizer(readLine(), " ")
          for (i in 0 until N) {
              arr[i] = st.nextToken().toInt()
          }
    
          for (i in 0 until N - 2) {
              if (arr[i] > M) continue
    
              for (j in i + 1 until N - 1) {
                  if (arr[i] + arr[j] > M) continue
    
                  for (k in j + 1 until N) {
                      val temp = arr[i] + arr[j] + arr[k]
                      if (M == temp) {
                          result = temp
                      }
                      if (temp in (result + 1) until M) {
                          result = temp
                      }
                  }
              }
          }
          print(result)
      }
      

     

     

     

     

     

    알고리즘은 문제파악이 문제인것같다

    뒤로 갈수록 문제 파악하기가 어렵다.. 

    댓글