Skip to content

Commit fbe5bec

Browse files
committed
[BOJ] #1012. 유기농 배추 / 실버2 / 54분(힌트)
1 parent 5e8f7a0 commit fbe5bec

File tree

2 files changed

+76
-0
lines changed

2 files changed

+76
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import sys
2+
sys.setrecursionlimit(10000) #재귀 limit 설정(파이썬 최대 깊이 늘리는 모듈 이용)
3+
4+
input = sys.stdin.readline
5+
# dfs 함수 정의
6+
def dfs(x, y):
7+
# x와 y의 위치가 벗어나거나, 양배추리스트에 없는 위치라면 그냥 반환
8+
if x < 0 or x >= M or y < 0 or y >= N or cabbage_filed[x][y] == 0:
9+
return
10+
11+
# 현재 위치 방문 처리
12+
cabbage_filed[x][y] = 0 # 배추 있던 자리 1->0으로 변경해서 중복 방지
13+
14+
# 상하좌우 위치 탐색
15+
dfs(x+1, y) # 오른쪽 배추 탐색
16+
dfs(x-1, y) # 왼쪽 배추 탐색
17+
dfs(x, y+1) # 위쪽 배추 탐색
18+
dfs(x, y-1) # 아래쪽 배추 탐색
19+
20+
21+
T = int(input()) # 테스트케이스 수
22+
for _ in range(T):
23+
M, N, K = map(int, input().strip().split()) # M: 가로길이, N: 세로길이, K: 배추개수
24+
cabbage_filed = [[0] * N for _ in range(M)] # 양배추밭 리스트 초기화
25+
26+
for _ in range(K):
27+
x, y = map(int, input().strip().split())
28+
cabbage_filed[x][y] = 1 # 입력받은 x, y 위치에 배추가 있으므로 1로 변경
29+
30+
worms = 0 # 지렁이 필요 수 초기화
31+
for i in range(M):
32+
for j in range(N):
33+
if cabbage_filed[i][j] == 1: # 배추가 심어져 있고 아직 방문하지 않은 경우
34+
worms += 1 # 지렁이 수 +1
35+
dfs(i, j)# dfs 호출하여 모든 연결된 배추 방문 처리
36+
37+
38+
print(worms) # 현재 테스트케이스에 대한 지렁이 수 출력
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import sys
2+
sys.setrecursionlimit(10000) #재귀 limit 설정(파이썬 최대 깊이 늘리는 모듈 이용)
3+
4+
input = sys.stdin.readline
5+
# dfs 함수 정의
6+
def dfs(x, y):
7+
# x와 y의 위치가 벗어나거나, 양배추리스트에 없는 위치라면 그냥 반환
8+
if x < 0 or x >= M or y < 0 or y >= N or cabbage_filed[x][y] == 0:
9+
return
10+
11+
# 현재 위치 방문 처리
12+
cabbage_filed[x][y] = 0 # 배추 있던 자리 1->0으로 변경해서 중복 방지
13+
14+
# 상하좌우 위치 탐색
15+
dfs(x+1, y) # 오른쪽 배추 탐색
16+
dfs(x-1, y) # 왼쪽 배추 탐색
17+
dfs(x, y+1) # 위쪽 배추 탐색
18+
dfs(x, y-1) # 아래쪽 배추 탐색
19+
20+
21+
T = int(input()) # 테스트케이스 수
22+
for _ in range(T):
23+
M, N, K = map(int, input().strip().split()) # M: 가로길이, N: 세로길이, K: 배추개수
24+
cabbage_filed = [[0] * N for _ in range(M)] # 양배추밭 리스트 초기화
25+
26+
for _ in range(K):
27+
x, y = map(int, input().strip().split())
28+
cabbage_filed[x][y] = 1 # 입력받은 x, y 위치에 배추가 있으므로 1로 변경
29+
30+
worms = 0 # 지렁이 필요 수 초기화
31+
for i in range(M):
32+
for j in range(N):
33+
if cabbage_filed[i][j] == 1: # 배추가 심어져 있고 아직 방문하지 않은 경우
34+
worms += 1 # 지렁이 수 +1
35+
dfs(i, j)# dfs 호출하여 모든 연결된 배추 방문 처리
36+
37+
38+
print(worms) # 현재 테스트케이스에 대한 지렁이 수 출력

0 commit comments

Comments
 (0)