[백준]1012-유기농배추 with.Python
💡문제 분석 요약
-- 문제 --
입력 : T = 테스트 케이스 , M = 가로 길이(1 ≤ M ≤ 50), N = 세로 길이(1 ≤ N ≤ 50), K = 배추가 심어져 있는 위치의 개수(1 ≤ K ≤ 2500), X,Y = 배추의 위치(0 ≤ X ≤ M-1, 0 ≤ Y ≤ N-1)
- 어떤 배추에 지렁이가 한 마리라도 살고 있으면 (상하좌우)인접한 다른 배추로 이동할 수 있어, 그 배추들 역시 해충으로부터 보호받을 수 있다.(두 배추의 위치가 같은 경우는 없다.)
💡알고리즘 설계
💡코드
💡시간복잡도
O(N)
💡틀린 이유
💡틀린 부분 수정 or 다른 풀이
import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline
# dfs 정의
def dfs(x, y):
# 상하좌우
dx = [0, 0, -1, 1]
dy = [1, -1, 0, 0]
# 네 방향 탐색
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
# 범위 안에 있고 1이면(=배추이면) 지나간것을 -1로 표시하고 주변 탐색
if (0 <= nx < m) and (0 <= ny < n) and graph[ny][nx] == 1:
graph[ny][nx] = -1
dfs(nx, ny)
t = int(input()) # 테스트 케이스의 개수
for _ in range(t):
m, n, k = map(int, input().split()) # 가로, 세로, 배추 개수
graph = [[0 for _ in range(m)] for _ in range(n)]
# 배추 위치 표시
for _ in range(k):
X, Y = map(int, input().split())
graph[Y][X] = 1 # X, Y 바꿔서 표시해야하는거 주의!
# 배추 그룹 수(=배추흰지렁이 개수) 세기
count = 0
for a in range(m):
for b in range(n):
if graph[b][a] == 1:
dfs(a ,b)
count += 1
print(count)
💡느낀점 or 기억 할 정보
처음 코테를 접하다보니 접근하는데 어려움을 느낌. -> 문제 많이 접해보기.
개념만 공부하지 말고 기본 구현한 코드 많이 접해보기.
sys.setrecursionlimit(10**6) : 깊은 재귀 호출이 필요한 경우 재귀 한도 증가.
graph[Y][X] : 2차원 배열을 표시 할 때 행,열 순서로 표기하기 때문에 순서 바꿔서 적어줘야함.
-출처 : https://dduniverse.tistory.com/entry/%EB%B0%B1%EC%A4%80-1012-%EC%9C%A0%EA%B8%B0%EB%86%8D-%EB%B0%B0%EC%B6%94-%ED%8C%8C%EC%9D%B4%EC%8D%AC-python 풀이법 익히는 것을 목표로 하였습니다.