3190 swift / c++ - 뱀
2024. 9. 23. 03:16ㆍ카테고리 없음
뱀 게임 구현
c++
/* ************************************************************************** */
/* */
/* ::: ::: ::: */
/* Problem Number: 3190 :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: chanhihi <boj.kr/u/chanhihi> +#+ +#+ +#+ */
/* +#+ +#+ +#+ */
/* https://boj.kr/3190 #+# #+# #+# */
/* Solved: 2024/09/23 02:08:59 by chanhihi ### ### ##.kr */
/* */
/* ************************************************************************** */
#include <bits/stdc++.h>
using namespace std;
int dx[] = {1, 0, -1, 0};
int dy[] = {0, 1, 0, -1};
int main() {
int n, k, l;
cin >> n >> k;
vector<vector<int>> board(n, vector<int>(n));
char list[10000] = {0};
for (int i = 0; i < k; i++) {
int y, x;
cin >> y >> x;
board[y - 1][x - 1] = 1;
}
cin >> l;
for (int i = 0; i < l; i++) {
int x;
char c;
cin >> x >> c;
list[x] = c;
}
deque<pair<int, int>> snake;
int nx = 0, ny = 0;
int dir = 0, sec = 0;
snake.push_back({0, 0});
while (nx >= 0 && nx < n && ny >= 0 && ny < n) {
if (list[sec] == 'D') {
dir = (dir + 1) % 4;
} else if (list[sec] == 'L') {
dir = (dir + 3) % 4;
}
nx += dx[dir];
ny += dy[dir];
auto it = find(snake.begin(), snake.end(), pair<int, int>{nx, ny});
if (nx < 0 || ny < 0 || nx >= n || ny >= n || it != snake.end()) {
break;
}
if (!board[ny][nx]) {
snake.pop_back();
} else {
board[ny][nx] = 0;
}
snake.push_front({nx, ny});
sec++;
}
cout << sec + 1;
return 0;
}
swift
import Foundation
let dx = [1, 0, -1, 0]
let dy = [0, 1, 0, -1]
let n = Int(readLine()!)!
let k = Int(readLine()!)!
var board = Array(repeating: Array(repeating: 0, count: n), count: n)
var directionChanges = [Int: String]()
for _ in 0..<k {
let input = readLine()!.split(separator: " ").map { Int($0)! }
let y = input[0] - 1
let x = input[1] - 1
board[y][x] = 1
}
let l = Int(readLine()!)!
for _ in 0..<l {
let input = readLine()!.split(separator: " ")
let time = Int(input[0])!
let dir = String(input[1])
directionChanges[time] = dir
}
var snake = [(0, 0)]
var dir = 0, sec = 0, nx = 0, ny = 0
while true {
sec += 1
nx += dx[dir]
ny += dy[dir]
if nx < 0 || ny < 0 || nx >= n || ny >= n || snake.contains(where: { $0 == (nx, ny) }) {
break
}
if board[ny][nx] == 0 {
snake.removeLast()
} else {
board[ny][nx] = 0
}
snake.insert((nx, ny), at: 0)
if let newDir = directionChanges[sec] {
if newDir == "D" {
dir = (dir + 1) % 4
} else if newDir == "L" {
dir = (dir + 3) % 4
}
}
}
print(sec)