본문 바로가기
백준 & 프로그래머스

백준.유기농 배추.1012.py

by concho 2023. 9. 19.

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

 

1012번: 유기농 배추

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

www.acmicpc.net

import sys
def in_to_adj_dic():
    cabbage_xy_dic, cabbage_adj_dic = dict(), dict()
    row, column, cabbage_cnt = map(int, sys.stdin.readline().rstrip().split())
    # dfs하기 위해 인접 노드 딕셔너리 만들기
    for _ in range(cabbage_cnt):
        x, y = map(int, sys.stdin.readline().rstrip().split())
        cabbage_xy_dic[(x,y)] = True
    for xy in cabbage_xy_dic:
        tm_adj_list = []
        if cabbage_xy_dic.get((xy[0]+1,xy[1]), False): tm_adj_list.append((xy[0]+1,xy[1]))
        if cabbage_xy_dic.get((xy[0]-1,xy[1]), False): tm_adj_list.append((xy[0]-1,xy[1]))
        if cabbage_xy_dic.get((xy[0],xy[1]+1), False): tm_adj_list.append((xy[0],xy[1]+1))
        if cabbage_xy_dic.get((xy[0],xy[1]-1), False): tm_adj_list.append((xy[0],xy[1]-1))
        cabbage_adj_dic[xy] = tm_adj_list
    return cabbage_adj_dic, cabbage_xy_dic
    
def dfs(graph, start, coor_dic):
    result, visit = set(), []
    visit.append(start)

    while visit:
        node = visit.pop()
        if node not in result:
            result.add(node)
            visit.extend(graph[node])
            coor_dic.pop(node,0)
    return result

if __name__ == '__main__':
    test_case = int(input())
    total = []
    for _ in range(test_case):
        result,sol = [],[]
        adj_dic, coor_dic = in_to_adj_dic()
        while coor_dic:
            tm = coor_dic.popitem()
            sol = dfs(adj_dic, tm[0], coor_dic)
            result.append(len(sol))
        total.append(len(result))
    for t in total:
        print(t)

'백준 & 프로그래머스' 카테고리의 다른 글

백준.적록색약.10026.py  (0) 2023.09.19
백준.아기 상어2.17086.py  (0) 2023.09.19
백준.영역 구하기.2583.py  (0) 2023.09.18
백준.바이러스.2606.py  (0) 2023.09.15
백준.등수 구하기.1205.py  (0) 2023.09.13

댓글