chae._.chae

[Algorithm] 백준 #1012 - 유기농 배추 본문

파이썬 알고리즘/BOJ

[Algorithm] 백준 #1012 - 유기농 배추

walbe0528 2022. 5. 27. 22:35
728x90
반응형

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

 

1012번: 유기농 배추

차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 

www.acmicpc.net

 

📌 다시 봐야 할 부분

 

 

1. 리스트 컴프리헨션!

 

 c = [i + 5 for i in range(10)]    # 0부터 9까지 숫자를 생성하면서 값에 5를 더하여 리스트 생성

 

M, N = map(int, input().split())  # 5, 7
area = [M * [0] for i in range(N)]
print(area)
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

 

감이 잘 안와서 예시로 숫자를 넣어보았다. 가로, 세로값으로 5와 7을 넣어주고,

리스트는 M*[0] for i in range(N) 로 만들면 5개씩 7묶음의 리스트가 생성된 결과를 확인하며 풀었다. 

 

 

2. 내가 실수한 부분이다ㅠㅠ

문제에서 배추의 위치가 전부 주어져서 모두 0으로 초기화한 2차원 리스트를 하나 만들어두고, 값을 입력받을 때마다 해당 위치를 1로 바꾸어주었다. 

이때 a, b의 변수로 입력받고 리스트를 area[a][b] = 1 을 해주었는데 순서가 틀렸다...!

이 부분을 생각안하고 막 풀면 항상 실수하는 것 같다.. 눈에 더 익을 때까지 열심히 봐두고, 신경써야겠다

 

import sys
from collections import deque
dx=[0, 0, -1, 1]
dy=[-1, 1, 0, 0]

def bfs(graph, x, y):
    queue = deque()
    queue.append((x, y))
    graph[x][y] = 0  # 지나간거 표시해주기

    while queue:   # 큐가 빌때까지
        x, y = queue.popleft()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if nx<0 or nx >=N or ny<0 or ny >= M:  # 범위 벗어난 경우
                continue
            if graph[nx][ny] == 1:
                queue.append((nx, ny))
                graph[nx][ny] = 0


T = int(sys.stdin.readline().rstrip())  # 테스트 케이스의 갯수

while T:
    M, N, K = map(int, sys.stdin.readline().rstrip().split())  # 가로, 세로, 위치의 갯수
    area=[[0] * M for i in range(N)]
    result = 0
    for _ in range(K):  # 배추의 위치가 한개씩 모두 주어진다
        a, b = map(int, sys.stdin.readline().rstrip().split())
        # area[a][b] = 1
        area[b][a] = 1
    for i in range(N):
        for j in range(M):
            if area[i][j] == 1:
                result += 1
                bfs(area, i, j)
    print(result)
    T -= 1

 

아직도 좀 어렵긴 하지만 이전보다 훨씬 내가 스스로 적는 코드의 부분이 많아져 좀 재밌는 것 같다🥰

728x90