본문 바로가기

스터디 1일 1커밋

240410 [BOJ/백준] 1743. 음식물 피하기

https://www.acmicpc.net/problem/1743

 

1743번: 음식물 피하기

첫째 줄에 통로의 세로 길이 N(1 ≤ N ≤ 100)과 가로 길이 M(1 ≤ M ≤ 100) 그리고 음식물 쓰레기의 개수 K(1 ≤ K ≤ N×M)이 주어진다.  그리고 다음 K개의 줄에 음식물이 떨어진 좌표 (r, c)가 주어진다

www.acmicpc.net


나의 코드

n, m, k = map(int, input().split())
arr = [[0]*m for _ in range(n)]
visited = [[0]*m for _ in range(n)]
for _ in range(k):
    i, j = map(int, input().split())
    arr[i-1][j-1] = 1

q = []
di = [0, 1, 0, -1]
dj = [1, 0, -1, 0]
max_size = 0

for i in range(n):
    for j in range(m):
        if arr[i][j] == 1 and visited[i][j] == 0:  # 방문하지 않은 음식물쓰레기 있는 곳
            q.append([i, j])  # 위치 저장
            visited[i][j] = 1  # 방문표시

            size = 1
            while q:
                x, y = q.pop(0)
                for k in range(4):
                    ni = x+di[k]
                    nj = y+dj[k]
                    if 0 <= ni < n and 0 <= nj < m and arr[ni][nj] == 1 and visited[ni][nj] == 0:
                        q.append([ni, nj])
                        visited[ni][nj] = 1
                        size += 1
            if max_size < size:
                max_size = size
print(max_size)

 

결과


이게 무슨일이야?!!! 중간에 안 떠들었으면 진짜 10분 만에 풀었을 것 같은데?? 예전에 풀었던 단지번호붙이기랑 비슷한 문제라고 생각하고 그 때 풀었던 방식 생각해보면서 코드짰는데 바로 성공! 내일 시험 이렇게만 풀리면 너무 좋겠다~~~