https://www.acmicpc.net/problem/1347

 

1347번: 미로 만들기

홍준이는 미로 안의 한 칸에 남쪽을 보며 서있다. 미로는 직사각형 격자모양이고, 각 칸은 이동할 수 있거나, 벽을 포함하고 있다. 모든 행과 열에는 적어도 하나의 이동할 수 있는 칸이 있다. 홍

www.acmicpc.net

구현 문제에 해당한다. 홍준이의 이동방향을 어떻게 구현할지 고민했던 문제다.

 

풀이

시작지점이 지도의 어느 부분인지 알 수 없다. 따라서 시작 지점에서 최대 이동 범위인 50칸을 상하좌우로 확장한 상태에서 시작하여 지도를 그려낸 뒤 방문했던 x, y값의 최대, 최소 좌표 영역을 출력했다. 

미로 탐색 부분의 구현은 BFS를 사용할 때 자주 사용하던 dx, dy배열을 사용하여 "L"이나 "R"이 입력되면 배열의 인덱스를 변경하는 방법으로 구현했다.

 

정답 코드

import Foundation
let n = Int(readLine()!)!
let cmd = readLine()!.map{String($0)}
var map = Array(repeating: Array(repeating: "#", count: 101), count: 101)
var x = 51
var y = 51
var xMin = 51
var xMax = 51
var yMin = 51
var yMax = 51
let dx = [1,0,-1,0]
let dy = [0,-1,0,1]
var direction = 0
map[x][y] = "."
for cmd in cmd{
if cmd == "F"{
x += dx[direction]
y += dy[direction]
map[x][y] = "."
xMin = min(xMin, x)
xMax = max(xMax, x)
yMin = min(yMin, y)
yMax = max(yMax, y)
}
if cmd == "R"{
direction += 1
if direction>3{
direction = 0
}
continue
}
if cmd == "L"{
direction -= 1
if direction<0{
direction = 3
}
continue
}
}
for x in xMin...xMax{
for y in yMin...yMax{
print(map[x][y],terminator: "")
}
print("")
}
view raw 1347.swift hosted with ❤ by GitHub

'Problem Solving > BOJ' 카테고리의 다른 글

[1195] 킥다운  (1) 2022.11.02
[1915] 가장 큰 정사각형  (0) 2022.11.01
[1388] 바닥 장식  (0) 2022.10.31
[1063] 킹  (1) 2022.10.28
[16920] 확장게임  (0) 2022.10.26

+ Recent posts