코딩테스트/백준

[백준] 2564.경비원 (Swift)

도지대디 2022. 5. 31. 16:31

[백준] 2564.경비원 (Swift)

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

 

2564번: 경비원

첫째 줄에 블록의 가로의 길이와 세로의 길이가 차례로 주어진다. 둘째 줄에 상점의 개수가 주어진다. 블록의 가로의 길이와 세로의 길이, 상점의 개수는 모두 100이하의 자연수이다. 이어 한 줄

www.acmicpc.net

풀이

탐색할 좌표들은 주어진 사각형의 가장자리에만 위치하고 있습니다.

 

저는 일단 이 좌표들을 2차원 배열 위에 옮겼습니다. 좌표들은 칸이 아닌 점에 위치하고 있기 때문에 행과 열의 개수는 하나씩 더 크게 선언해주었습니다.

 

문제의 입출력 예시를 2차원 배열에 저장한 것은 아래와 같습니다.

 

하지만 이렇게 되면 좌표간의 거리를 계산하는것이 매우 복잡해지기 때문에 저는 이 가장자리 좌표들의 정보를 1차원 배열로 다시 옮겨보고자 했습니다.

입출력 예시를 간단하게 그림으로 표현해봤습니다. 빨간색으로 표시한 부분을 기점으로 사각형을 1차원 배열에 옮기면 아래 그림과 같이 변형됩니다.

이렇게 1차원 배열에 좌표들을 옮기면 거리 계산이 훨씬 간단해집니다. 

 

그림에 표시된 A 와 B 값중 작은 값은 좌표간의 최단 거리가 됩니다.

코드