Algorithm/문제풀이_백준
[Swift][시뮬레이션과 구현] 백준 15685번 (드래곤 커브)
Joahnee
2022. 4. 25. 14:08
요구능력
구현
문제풀이
나도 저분의 게시글을 보고 공부했다.
.
.
후기
방향하나하나 생각못하고 한번에 돌리다가 시간을 낭비했다..
규칙은 못찾았지만, 구조설계는 어느정도 맞게했다.
코드
var n = Int(String(readLine()!))!//드래곤커브개수
var arr = [[Int]]()
for _ in 0..<n{
arr.append(readLine()!.split(separator: " ").map{Int(String($0))!})
}
var visited = Array(repeating: Array(repeating: false, count: 101), count: 101)
let dx = [0, -1, 0, 1]
let dy = [1, 0, -1, 0]
var result = 0
for i in arr{
let x = i[1]
let y = i[0]
let d = i[2] //방향
let g = i[3] //세대
visited[x][y] = true //처음좌표
var nx = x + dx[d]
var ny = y + dy[d]
visited[nx][ny] = true
var stack = [Int]()
stack.append(d)
for _ in stride(from: 1, through: g, by: 1){
for j in stride(from: stack.count - 1, through: 0, by: -1){
var k = stack[j] + 1
if k == 4{ k = 0 }
nx = nx + dx[k]
ny = ny + dy[k]
visited[nx][ny] = true
stack.append(k)
}
}
}
for i in 0...100{
for j in 0...100{
if visited[i][j]{
if i + 1 > 100 || j + 1 > 100{
continue
}
if visited[i][j] && visited[i + 1][j] && visited[i][j + 1] && visited[i + 1][j + 1]{
result += 1
}
}
}
}
print(result)