1번: 내가 작성한 코드
- 핵심 로직!!
- (0,0)부터 (M,N)까지 방문하지 않은 곳 탐색
- 이제 지금 이곳은 방문했으니 visited = True
- 만약 배추(1)가 있는 지점이면
- cnt +1 !
- 그리고 BFS 돌리기~~
(BFS) - queue에 해당 좌표를 넣고, while 반복문 안에서 현좌표와 상하좌우로 연결되는 지점을 방문한다!
- 장차 지점의 위치가 0보다 작거나 경계값이면 continue
- 지점을 처음 방문하고 and 배추(1)가 있다고 하면
- queue에 해당 지점의 좌표를 append!
(여기서부터 또 연결된 배추무리를 찾아야하기 때문에 넣는다)
T = int(input())
dx, dy = [0, 1, 0, -1], [1, 0, -1, 0]
def BFS(i, j):
queue = [(i, j)]
while queue:
cur = queue.pop(0)
i, j = cur[0], cur[1]
for w in range(4):
ii, jj = i+dx[w], j+dy[w]
if ii < 0 or ii == N or jj < 0 or jj == M:
continue
if not visited[ii][jj] and G[ii][jj]:
visited[ii][jj] = 1
queue.append((ii, jj))
for _ in range(T):
M, N, K = map(int, input().split())
G = [[0] * M for _ in range(N)]
visited = [[0] * M for _ in range(N)]
cnt = 0
for _ in range(K):
x, y = map(int, input().split())
G[y][x] = 1
for i in range(N):
for j in range(M):
if not visited[i][j]:
visited[i][j] = 1
if G[i][j]:
cnt += 1
BFS(i,j)
print(cnt)
2번: 1번 성공 후 참고한 코드
import sys
sys.setrecursionlimit(10000)
T = int(input())
B, ck = [], []
dx, dy = [1, 0 , -1, 0], [0, 1, 0, -1]
def dfs(x, y):
global B, ck
ck[x][y] = 1
for i in range(4):
xx, yy = x + dx[i], y + dy[i]
# 배추가 없거나 이미 방문했으면 넘어간다
if B[xx][yy] == 0 or ck[xx][yy]:
continue
dfs(xx, yy)
def process():
global B, ck
M, N, K = map(int, input().split())
B = [[0 for i in range(M+2)] for _ in range(N+2)]
ck = [[0 for i in range(M+2)] for _ in range(N+2)]
for _ in range(K):
X, Y = map(int, input().split())
B[Y+1][X+1] = 1
ans = 0
for i in range(1, N+1):
for j in range(1, M+1):
if B[i][j] == 0 or ck[i][j]:
continue
dfs(i,j)
ans += 1
print(ans)
for _ in range(T):
process()
- 3번: 배운 점
- 재귀를 쓰면 depth 제한으로 런타임 에러가 발생할 수 있다!
(이를 막기 위해, sys.setrecursionlimit(number)를 사용할 수 있지만 실제 시험장에서는 가능여부 불확실)
- 좌표가 0 미만이거나 경계값에 걸리지 않도록 M, N을 각각 +1씩 해주고, (1,1)부터 탐색을 시작한다!
- 문제의 가로 길이, 세로 길이에 대한 설명을 꼼꼼히 읽는다
'> 알고리즘 문제 풀이 > BOJ' 카테고리의 다른 글
*1927-최소 힙 (python, 파이썬) (0) | 2020.10.21 |
---|---|
***16768-Mooyo Mooyo (python, 파이썬) (0) | 2020.10.19 |
**14620-꽃길 (python, 파이썬) (0) | 2020.10.17 |
*16956-늑대와 양 (python, 파이썬) (0) | 2020.10.17 |
**16675-두 개의 손 (python, 파이썬) (0) | 2020.10.17 |
댓글