티스토리 뷰
문제
https://www.acmicpc.net/problem/3190
3190번: 뱀
'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임
www.acmicpc.net
풀이
케이스도 많지 않아 구현만 하면 되는 문제였다.
뱀의 길이를 큐의 크기로 생각하였다. 이동한 위치를 current라는 변수로 나타내고, 이 current가 사과를 먹었다면 큐에 current를 추가하고 꼬리를 지우지않는 방향으로 구현하였다.
방향은 0,1,2,3을 각각 오른쪽, 위, 아래, 왼쪽으로 생각하여 방향에 따라 current의 값을 계산해주었다.
import Foundation
let n = Int(readLine()!)!
let k = Int(readLine()!)!
var apples: [[Int]] = []
var changeD: [[String]] = []
var current = [1,1]
var left: [[Int]] = [current]
var right: [[Int]] = []
var size = 1
var direction = 0 // 0오른쪽 1위 2아래 3왼쪽
var time = 0
for _ in 0..<k {
apples.append(readLine()!.split(separator: " ").map { Int(String($0))! })
}
let l = Int(readLine()!)!
for _ in 0..<l {
changeD.append(readLine()!.split(separator: " ").map { String($0) })
}
while true {
time += 1
switch direction {
case 0:
current[1] += 1
case 1:
current[0] -= 1
case 2:
current[0] += 1
default:
current[1] -= 1
}
//벽과 만나는지 확인
if current[0] == n + 1 || current[1] == n + 1 || current[0] == 0 || current[1] == 0 {
break
}
//자신의 몸과 만나는지 확인
if (left + right).contains(current) {
break
}
left.append(current)
//사과가 있는지 확인 -> 꼬리 안지워도됨
if !apples.contains(current) {
//큐가 가득찼으면 꼬리 지우기
if left.count + right.count > size {
if right.isEmpty {
right = left.reversed()
left.removeAll()
}
right.removeLast()
}
} else {
apples.remove(at:apples.firstIndex(of: current)!)
size += 1
}
if !changeD.isEmpty {
if time == Int(changeD[0][0])! {
if changeD[0][1] == "D" {
switch direction {
case 0:
direction = 2
case 1:
direction = 0
case 2:
direction = 3
default:
direction = 1
}
changeD.removeFirst()
} else {
switch direction {
case 0:
direction = 1
case 1:
direction = 3
case 2:
direction = 0
default:
direction = 2
}
changeD.removeFirst()
}
}
}
}
print(time)
_____________________________________________________________________________________________________
'PS' 카테고리의 다른 글
[Swift] 백준_미로탐색(2178) (0) | 2023.01.11 |
---|---|
[Swift] 백준_그림(1926) (0) | 2023.01.10 |
[Swift] 백준_좋은 친구(3078) (0) | 2023.01.10 |
[Swift] 백준_AC(5430) (0) | 2023.01.09 |
[Swift] 백준_덱(10866) (0) | 2023.01.08 |
댓글
최근에 올라온 글
- Total
- Today
- Yesterday