본문 바로가기
Algorithm/문제풀이_백준

[Swift][시뮬레이션과 구현] 백준 15685번 (드래곤 커브)

by Joahnee 2022. 4. 25.

요구능력

구현

 

문제풀이

엄청 잘 정리해놔주신분의 velog이다.

나도 저분의 게시글을 보고 공부했다.

.

.

 

후기

방향하나하나 생각못하고 한번에 돌리다가 시간을 낭비했다..

규칙은 못찾았지만, 구조설계는 어느정도 맞게했다.

코드

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)

댓글