https://www.acmicpc.net/problem/2116
첫번째 주사위에 따라서 그 위에 쌓여 있는 주사위의 옆면이 결정된다. 주사위의 도면이 주어졌으므로, 첫번째 주사위의 아랫면이 1부터 6까지일때 각 경우를 따져서, 그 위에 주사위의 옆면 시뮬레이션 했다. 주사위 도면에다가, 각 주사위의 윗면과 아랫면을 제거해서 옆면을 구하는 방식으로 풀었다.
import Foundation
let n = Int(readLine()!)!
var diceArr: [[Int]] = []
var answer = 0
//페어 AF, BD, CE / 05,13,24
func pairNum(num: Int, diceNum: Int) -> Int {
let dice = diceArr[diceNum]
let index = dice.firstIndex(of: num)
if index == 0 {
return dice[5]
} else if index == 1 {
return dice[3]
} else if index == 2 {
return dice[4]
} else if index == 3 {
return dice[1]
} else if index == 4 {
return dice[2]
} else if index == 5 {
return dice[0]
}
return -1
}
func getSideNumList(underNum: Int, diceNum: Int) -> [Int] {
let onNum = pairNum(num: underNum, diceNum: diceNum)
var currentDice = diceArr[diceNum]
currentDice.remove(at: currentDice.firstIndex(of: underNum)!)
currentDice.remove(at: currentDice.firstIndex(of: onNum)!)
return currentDice
}
if n != 0 {
for _ in 0..<n {
let dice = readLine()!.split(separator: " ").map { Int($0)! }
diceArr.append(dice)
}
for i in 1...6 {
var selectNumList: [[Int]] = []
selectNumList.append(getSideNumList(underNum: i, diceNum: 0))
var onNum = pairNum(num: i, diceNum: 0)
for j in 1...n-1 {
onNum = pairNum(num: onNum, diceNum: j)
selectNumList.append(getSideNumList(underNum: onNum, diceNum: j))
}
var result = 0
for num in selectNumList {
result += num.max()!
}
answer = max(answer, result)
}
}
print(answer)
'Algorithm > 백준' 카테고리의 다른 글
Swift) 백준 2503번 숫자 야구 - S3 (0) | 2023.09.18 |
---|---|
Swift) 백준 17503번 맥주 축제 - S1 (0) | 2023.07.09 |
Swift) 백준 3190번 뱀 - G4 (0) | 2023.06.10 |
Swift) 백준 5430번 AC - G5 (1) | 2023.06.07 |
Swift) 백준 2468번 안전영역 - S1 (1) | 2023.06.06 |