티스토리 뷰
백준 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)
'알고리즘 정보 > Swift 알고리즘' 카테고리의 다른 글
LeetCode swift 스택예제 Validate Stack Sequences 풀이 (0) | 2021.03.02 |
---|---|
스위프트 기초정렬문제, 2693 N번째 큰 수 문제풀이 (0) | 2021.02.24 |
swift언어 프로그래머스 문자열예제, 이상한문자 만들기 풀이 (0) | 2021.02.19 |
swift 코딩테스트 기초, 최솟값만들기 계수정렬 풀이 (1) | 2021.02.18 |
swift filter, min 함수 예제, 제일작은수 제거하기 풀이 (0) | 2021.02.17 |
- Total
- Today
- Yesterday
- ios
- 백준알고리즘
- swift
- Collection
- 프로토콜
- 프로그래머스
- 개발자문서
- Protocol
- swift reduce
- 부스트코스
- 자연어처리
- CoreML
- 컬렉션
- swift문제
- 알고리즘
- swift 기초
- uikit
- swift 문자열
- createML
- 프로그래머스swift
- swift알고리즘
- SwiftUI
- 백준swift
- Swift 알고리즘
- swift언어
- 알고리즘문제
- swift string
- publisher
- 스위프트
- 김프매매
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |