티스토리 뷰

반응형

 

 

 


백준 2798 블랙잭 문제설명

블랙잭문제는 solved.ac 기준 브론즈2로 기초문제입니다. 

 

 

 

 

블랙잭 문제는 N장의 카드 숫자가 주어졌을때, M을 넘지 않으면서 최대한 M값에 가까운 카드 3장의 합을 출력하는 문제입니다. 

 

 

 

 

시간제한은 1초이지만, 카드의 개수는 최대 100개이므로 완전탐색(brute force)으로 충분히 풀 수 있는 문제입니다. 

예제 입력 1을 보면, M이 21인데, 세개의 숫자를 합했을때 합이 21인 경우가 있어서 M을 넘지 않으면서 가장 M에 가까운 값, 21을 출력했습니다. 

 

이어서 swift언어로 문제 풀어보도록 하겠습니다.

 

 

 


백준 2798 블랙잭 swift 문제풀이

한줄 문자열 입력을 받은 뒤 String타입을 [Int]타입 배열로 변환하는 커스텀 클로져입니다. 범위가 작은 문제이므로 굳이 이렇게 할 필요는없고, split, components 등을 사용하시면 됩니다.

 

 

 

 

18 ~ 20행) N, M과 카드의 숫자(오름차순 정렬)를 입력받습니다.

21 ~ 22행) M과 세 수의 합의 차잇값 중에 최솟값을 저장할 minDiff변수와 정답을 저장할 answer 변수를 선언했습니다.

 

 

 

 

정말 단순 무식한 방법(brute force)의 완전탐색으로 문제를 풀었습니다.

 

삼중포문을 돌리고 있고, 완전탐색을 합니다. 다만 각 for문 마다 다음 for문을 돌릴 필요가 없는 경우 다음 for문 실행을 생략하는 가지치기 과정이 존재합니다.(25, 27행) 현재까지 더한 수가 M을 이미 넘는 경우에는 다음 숫자를 고려할 필요가 없는 것입니다. 그렇게 M을 넘지 않으면서 가장 가까운 수를 answer에 갱신하면 정답을 출력할 수 있게 됩니다. 

 

아래는 본 코드 제출결과 및 소스코드입니다. 참고하시기 바랍니다. 

 

 

 

 

 


백준 2798 블랙잭 swift 코드 제출결과 & swift 전체 풀이 소스코드

let input: (() -> [Int]) = {
  let string = readLine()!
  var temp = 0
  var result: [Int] = []
  string.forEach {
    if $0 == " " {
      result.append(temp)
      temp = 0
      return
    }
    temp = temp * 10 + Int($0.asciiValue!) - 48
  }
  result.append(temp)
  return result
}

let array = input()
let (N, M) = (array[0], array[1])
let cardList = input().sorted()
var minDiff = Int.max
var answer = 0
for idx in 0..<cardList.count-2 {
  for jdx in idx+1..<cardList.count-1 {
    if cardList[idx] + cardList[jdx] - 1 >= M { break }
    for kdx in jdx+1..<cardList.count {
      if cardList[idx] + cardList[jdx] + cardList[kdx] > M { break }
      let sum = (cardList[idx] + cardList[jdx] + cardList[kdx])
      var diff = M - sum
      diff *= diff >= 0 ? 1 : -1
      if minDiff > diff {
        minDiff = diff
        answer = sum
      }
    }
  }
}

print(answer)

 

 

 

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함