Upload
hyeok-oh
View
22
Download
1
Embed Size (px)
Citation preview
문제
호수의 개수를 구하는 문제 (상,하,좌,우,대각선으로 연결된 곳 W(물)는 같은 호수로 본다)
W 물
. 땅
W . . . W .
. W W . W W
. . W . W W
. . . . W .
. W . . W W
W W . . . W
. W . W . W
. W W . . W
입력 행 N , 열 M 이 입력으로 주어진다. (1 <= N <= 100; 1 <= M <= 100)
입출력예 입력: 8 6 출력: 3
문제풀이
영상처리의 라벨링과 동일한 작업 과정을 거침 1. 최초로 W가 발견되는 위치까지 탐색 2. W가 발견 될 경우 이를 n번째 호수로 표시하고 배열의 인접한 점을 탐색
3. 만약 인접한 곳에 W가 없다면 1.의 위치에서 다시 W가 발견되는 지점을 찾고 2., 3.의 과정 반복
W . . . W .
. W W . W W
. . W . W W
. . . . W .
. W . . W W
W W . . . W
. W . W . W
. W W . . W
문제풀이
왼쪽에서 오른쪽, 위에서 아래의 순서로 W(255)를 발견할때까지 배열을 탐색
좌측 그림의 예에서는 (0, 0)에서 255인 점을 발견 스택에 (0, 0)을 PUSH
(0, 0)
STACK
문제풀이
스택이 비어있지 않다면, POP을 수행하고 해당 위치를 COUNT값으로 표시함
그 후 인접한 점(상, 하, 좌, 우, 대각)을 탐색하여 배열의 유효범위를 벗어나지 않고 255인 위치이면 해당 점을 PUSH하고 -1로 표시(재접근 방지)
1
(1, 1)
(0, 0)
STACK
문제풀이
마찬가지로 스택이 비어있지 않다면, POP을 수행하고 해당 위치를 COUNT값으로 표시함
그 후 인접한 점(상, 하, 좌, 우, 대각)을 탐색하여 배열의 유효범위를 벗어나지 않고 255인 위치이면 해당 점을 PUSH하고 -1로 표시(재접근 방지)
1
1
(2, 2)
(1, 2)
(1, 1)
STACK
문제풀이
마찬가지로 스택이 비어있지 않다면, POP을 수행하고 해당 위치를 COUNT값으로 표시함
그 후 인접한 점(상, 하, 좌, 우, 대각)을 탐색하여 배열의 유효범위를 벗어나지 않고 255인 위치이면 해당 점을 PUSH하고 -1로 표시(재접근 방지)
1
1
1
(2, 2)
(1, 2)
STACK
문제풀이
(1, 2)인 점을 POP해서 COUNT(1)로 표시하고 나면 스택이 비게 되므로 첫번째 호수를 찾는 작업을 마침
그 후 (0, 0)에서부터 다시 W(255)를 탐색해 나감
1
1 1
1
(1, 2)
STACK
문제풀이
위의 과정을 반복하면 좌측과 같은 결과가 완성됨 호수의 갯수는 COUNT값을 출력하면 됨
1 2
1 1 2 2
1 2 2
2
3 2 2
3 3 2
3 3 2
3 3 2 STACK
소스코드입력: N, M을 입력받고 W(물)입력 시 255로 매핑
탐색: 배열을 탐색하며 W(255)인 위치를 찾고 PUSH
라벨링: 스택에서 POP한 점을 COUNT값으로 표시하고 인접 배열 탐색 - PUSH, POP은 자유롭게 구현 가능
출력: 라벨링을 마친 후 COUNT값 출력