-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[기출 풀이: 2024 KAKAO WINTER INTERNSHIP] 주사위 고르기 #31
Comments
이러니 시간초과가 날 수 밖에..없었음 case19번 부터 시간초과 된 코드import Foundation
func solution(_ dice:[[Int]]) -> [Int] {
let eachCount = dice.count / 2
var ans = [Int]()
var maxWin = 0
// A와 B가 가질 수 있는 주사위의 경우의 수 구하기
var diceCases = [(A: [Int], B: [Int])]()
func diceCase(current: Int, a: [Int]) {
if a.count == eachCount {
// Set으로 초기화를 시켜주면 contains 시간복잡도가 무려 O(1)
let b = (0..<dice.count).filter { !Set(a).contains($0) }
diceCases += [(a, b)]
return
}
for i in current..<dice.count {
diceCase(current: i+1, a: a+[i])
}
}
diceCase(current: 0, a: [])
func Allsum(index: [Int]) -> [Int] {
// 주사위 갯수에 따른 주사위의 경우의 수를 합해서 배열로 반환
func calculate(current: Int, sum: Int) -> [Int] {
if current == index.count {
return [sum]
}
var result = [Int]()
for i in dice[index[current]] {
result += calculate(current: current + 1, sum: sum + i)
}
return result
}
return calculate(current: 0, sum: 0)
}
for (A, B) in diceCases {
let sumA = Allsum(index: A)
let sumB = Allsum(index: B)
// 모든 경우의 수를 또 모든 경우의 수로 비교.. 경우의 수 지옥
// A가 이긴 경기에 따라 maxWin과 ans 최신화
var win = 0
for a in sumA {
for b in sumB {
if a > b {
win += 1
}
}
}
if win > maxWin {
maxWin = win
ans = A.map { $0 + 1 }
}
}
return ans
} |
크크 일단 손에 잡은 순간부터 문제를 하나 발견했어. 그건 바로 내가 시간복잡도를 계산할 줄 모른다는 것 . 시간복잡도에 대해서 공부하는 시간을 가졌고... 챗지피티한테 물어보니까 더 어려웠음
시간복잡도) 시간복잡도에 너무 약해서 뒤적뒤적
입력이 제한되어 있기 때문에 브루트 포스 (완전탐색) 형태로 구현하면 어떨까 생각 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
11/6(수)
주사위 고르기
The text was updated successfully, but these errors were encountered: