문제 소개
주사위를 어떻게 굴릴것인지가 관건.
문제 풀이
이렇게 주사위가 동서남북으로 굴러간것을 표시하면 이렇게 된다. [위, 북, 동, 서, 남, 아래] 순으로 표시하면 위처럼 나타낼 수 있다. 나머지는 구현문제이다.
import Foundation
let nmxyk = readLine()!.components(separatedBy: " ").map { Int($0)! }
let (n, m, x, y, k) = (nmxyk[0], nmxyk[1], nmxyk[2], nmxyk[3], nmxyk[4])
var map = Array(repeating: [Int](), count: n)
for i in 0..<n {
let input = readLine()!.components(separatedBy: " ").map { Int($0)! }
map[i] = input
}
let cmds = readLine()!.components(separatedBy: " ").map { Int($0)! }
let ds = [(0, 1), (0, -1), (-1, 0), (1, 0)]
var loc: (i: Int, j: Int) = (x, y)
var dice = [0, 0, 0, 0, 0, 0]
for cmd in cmds {
let ni = loc.i + ds[cmd-1].0
let nj = loc.j + ds[cmd-1].1
if 0..<n ~= ni && 0..<m ~= nj {
switch cmd {
case 1:
dice = [dice[3], dice[1], dice[0], dice[5], dice[4], dice[2]]
case 2:
dice = [dice[2], dice[1], dice[5], dice[0], dice[4], dice[3]]
case 3:
dice = [dice[4], dice[0], dice[2], dice[3], dice[5], dice[1]]
case 4:
dice = [dice[1], dice[5], dice[2], dice[3], dice[0], dice[4]]
default: break
}
if map[ni][nj] == 0 {
map[ni][nj] = dice[5]
} else {
dice[5] = map[ni][nj]
map[ni][nj] = 0
}
print(dice[0])
loc = (ni, nj)
}
}
'→ Problems' 카테고리의 다른 글
[Algorithm] 백준 - 14891번 톱니바퀴 (Swift) (0) | 2024.06.29 |
---|---|
[Algorithm] 백준 - 4375번 1 (Swift) (0) | 2024.06.27 |
[Algorithm] 백준 - 2252번 줄세우기 (Swift) (위상정렬) (0) | 2024.06.22 |
[Algorithm] 백준 - 1644번 소수의 연속합 (Swift) (0) | 2024.06.22 |
[Algorithm] 백준 - 1806번 부분합 (Swift) (0) | 2024.06.21 |