본문 바로가기
코딩테스트 준비/백준

[백준 1012번] 유기농 배추

by rahites 2022. 2. 27.

 

# 개강전 마지막 백준..

# 다음학기 알고리즘을 좀 더 배우게 되면 공부와 백준을 같이해보자!

 

-- 정답코드

import sys
sys.setrecursionlimit(10**6)

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

# 상하좌우가 붙어있는 그룹 count!

# 재귀함수를 이용
def check_group(x, y):
    if x < 0 or x >= M or y < 0 or y >= N:
        return
    if [x,y] in cabbage:
        cabbage.remove([x,y])
    else:
        return
    check_group(x + 1, y)
    check_group(x, y+1)
    check_group(x-1, y)
    check_group(x, y-1)

for _ in range(T):
    M, N, K = map(int, sys.stdin.readline().split()) # 가로길이, 세로길이, 배추 위치 개수
    cabbage = []
    count = 0 # 배추흰지렁이의 개수

    for _ in range(K): # cabbage list 만들기
        a, b = map(int, sys.stdin.readline().split())
        cabbage.append([a,b])

    while cabbage: # cabbage 리스트가 존재하는 한
        check_group(cabbage[0][0],cabbage[0][1])
        count += 1
    print(count)

처음에는 DFS, BFS 방법을 통해 문제를 풀려 노력했는데 결국은 재귀함수를 이용해 풀었다. ( 물론 DFS, BFS 방법으로도 풀 수 있는 듯 하다..)

재귀함수를 이용할 때 setrecursionlimit를 상한시켜 기본 반복인 횟수인 1000보다 큰 수를 입력해주어야한다. ( 간혹 재귀의 건수가 적어 답이 잘못나온다고 한다..)

 

기본적인 풀이방법은 입력받은 배추의 위치 좌표를 list로 담아 check_group을 통해 시작점에서 부터 이어진 한 그룹을 지우고 count + 1을 하는 방식으로 전체에 필요한 배추흰지렁이의 개수를 찾았다.

 

요즘에 따로하는 공부, 알바, 과외 때문에 백준을 소홀히 하였는데 개강 후에도 가능한만큼 문제 풀이에 도전해보겠다.

 

 

오늘도 성공적으로 필요한 배추흰지렁이의 개수를 찾아내었다.

'코딩테스트 준비 > 백준' 카테고리의 다른 글

[백준 11724번] 연결 요소의 개수  (0) 2022.02.07
[백준 1260번] DFS와 BFS  (0) 2022.01.23
[백준 2606번] 바이러스 - BFS, DFS  (0) 2022.01.22

댓글