2146번 - 다리 만들기
아래 코드가 그 문제의 코드이구요.
모든 칸을 순회하면서 아래와 같은 과정을 반복하였습니다.
1. 이 칸이 육지에 속하는 가
이 칸이 육지에 속해야 지만 다리를 놓을 수 있기 때문입니다.
2. 이 칸이 바다에 한 면이라도 접해 있는가
이 칸이 바다에 한 면이라도 접해 있어야지 다리를 놓을 수 있기 때문입니다.
3. 이 칸이 속해 있는 대륙을 모두 방문 표시
이 칸이 속해 있는 대륙을 모두 방문 표시하여 다리가 이 대륙에서 시작하여 이 대륙으로 끝나는 다리로 만들어지는 것을 방지하기 위해 모두 방문 표시 하였습니다.
4. BFS 시작
이 칸에 대하여 BFS 를 시작합니다.
BFS를 하다가 그 자리가 육지이고 방문하지 않았으면(다른 대륙이라면) 탐색을 종료합니다.
이름도 설명드리겠습니다.
ca 배열 : 지금 체크할 칸이 속해있는 대륙의 칸을 모두 1로 저장하는 배열입니다.
q : BFS에서 그 칸의 좌표(x, y)를 저장하고 있습니다.
step : BFS에서 그 칸과 다리의 시작 칸과의 거리를 저장하고 있습니다.
ans : 놓을 수 있는 다리의 길이의 최솟값을 저장하였다가 모든 칸을 순회하면 출력하는 변수입니다. n : 지도의 크기를 저장하는 변수입니다.
check 함수 : 입력으로 주어진 칸이 지도의 범위를 넘어가는지 안 넘어가는 지를 판단하고 그 칸이 바다면 1, 육지면 2를 리턴하는 함수입니다.
go 함수 : BFS의 반복되는 (위쪽, 아래쪽, 오른쪽, 왼쪽) 칸에 대한 처리를 하기 위한 함수입니다.
이 코드는 제출하니까 100%에서 틀렸다고 뜨네요...
이 코드에 문제점이나 반레를 찾아주세요!!!!
48~49번째 줄이 이상하네요
정말 사소한 실수를 하였네요....
48줄과 49줄에 0으로 다 해야하는데 (2, 2)에 대한 BFS가 동작하는지 테스트 할려고, 했던것으로 바꾸지도 않고 제출하였네요...
wjdgud0621님, 정말 감사합니다!!!!!!!!
댓글을 작성하려면 로그인해야 합니다.
jabbong 3년 전 1
아래 코드가 그 문제의 코드이구요.
모든 칸을 순회하면서 아래와 같은 과정을 반복하였습니다.
1. 이 칸이 육지에 속하는 가
이 칸이 육지에 속해야 지만 다리를 놓을 수 있기 때문입니다.
2. 이 칸이 바다에 한 면이라도 접해 있는가
이 칸이 바다에 한 면이라도 접해 있어야지 다리를 놓을 수 있기 때문입니다.
3. 이 칸이 속해 있는 대륙을 모두 방문 표시
이 칸이 속해 있는 대륙을 모두 방문 표시하여 다리가 이 대륙에서 시작하여 이 대륙으로 끝나는 다리로 만들어지는 것을 방지하기 위해 모두 방문 표시 하였습니다.
4. BFS 시작
이 칸에 대하여 BFS 를 시작합니다.
BFS를 하다가 그 자리가 육지이고 방문하지 않았으면(다른 대륙이라면) 탐색을 종료합니다.
이름도 설명드리겠습니다.
ca 배열 : 지금 체크할 칸이 속해있는 대륙의 칸을 모두 1로 저장하는 배열입니다.
q : BFS에서 그 칸의 좌표(x, y)를 저장하고 있습니다.
step : BFS에서 그 칸과 다리의 시작 칸과의 거리를 저장하고 있습니다.
ans : 놓을 수 있는 다리의 길이의 최솟값을 저장하였다가 모든 칸을 순회하면 출력하는 변수입니다.
n : 지도의 크기를 저장하는 변수입니다.
check 함수 : 입력으로 주어진 칸이 지도의 범위를 넘어가는지 안 넘어가는 지를 판단하고 그 칸이 바다면 1, 육지면 2를 리턴하는 함수입니다.
go 함수 : BFS의 반복되는 (위쪽, 아래쪽, 오른쪽, 왼쪽) 칸에 대한 처리를 하기 위한 함수입니다.
이 코드는 제출하니까 100%에서 틀렸다고 뜨네요...
이 코드에 문제점이나 반레를 찾아주세요!!!!