https://www.acmicpc.net/problem/1012
1012번: 유기농 배추
차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에
www.acmicpc.net
아이디어
1. 인접한 곳(상하좌우)면 한 곳으로 치니까 출발점을 만나면 끝까지 탐색해 1을 카운트해주면 한 곳을 셀 수 있다.
2. 이미 카운트한 곳은 중복으로 탐색하면 안되므로 탐색할때 방문 표시를 해둬야한다.
- 끝까지 탐색하면 되는 문제이므로 bfs,dfs 든 관계없다. 나는 bfs를 이용했다.
- 0과1로 된 배열을 읽어와 풀어도 되는데, 나는 그냥 좌표만 읽어와서, 특정 좌표가 좌표 리스트(cabbages)에 있으면 인접한 곳으로 간주하는 식으로 문제를 풀었다.
>> 제출 코드
T = int(input())
for _ in range(T):
M,N,K = map(int,input().split())
cabbages = []
for _ in range(K):
i,j = map(int,input().split())
cabbages.append((i,j))
di = [-1,0,1,0]
dj = [0,1,0,-1]
checked = []
cnt = 0
for cabbage in cabbages: # 각 좌표를 순회하면서 너비탐색할 예정
if cabbage in checked: # 이미 체크한 좌표면 너비탐색할 필요없이 넘어감
continue
else:
checked.append(cabbage) # 먼저 좌표에 확인 표시를 하고
Q = [cabbage] # 큐를 만들어 좌표를 넣음
while Q: # 큐에 좌표가 있는 한 계속 반복
now = Q.pop(0)
for k in range(4): # 인접리스트 대신 델타 탐색
ni = now[0] + di[k]
nj = now[1] + dj[k]
if not (ni,nj) in checked and (ni,nj) in cabbages:
checked.append((ni,nj))
Q.append((ni,nj))
cnt += 1
print(cnt)
풀이 과정
'Algorithm' 카테고리의 다른 글
[백준]2178. 미로탐색 - python (0) | 2023.03.13 |
---|---|
[SWEA]12712.파리퇴치3 - 파이썬 (0) | 2023.03.05 |
[BOJ] 2667. 단지번호붙이기 - 파이썬 (0) | 2023.02.26 |
[BOJ] 7682. 틱택토 (실패) (0) | 2023.02.26 |
[SWEA] 1238. contact - 파이썬 (1) | 2023.02.26 |
댓글