새소식

알고리즘/그래프

[백준 21736] 헌내기는 친구가 필요해 (파이썬 풀이)

  • -

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

 

21736번: 헌내기는 친구가 필요해

2020년에 입학한 헌내기 도연이가 있다. 도연이는 비대면 수업 때문에 학교에 가지 못해 학교에 아는 친구가 없었다. 드디어 대면 수업을 하게 된 도연이는 어서 캠퍼스 내의 사람들과 친해지고

www.acmicpc.net

import sys sys.setrecursionlimit(10**6) # 재귀 제한 늘이기 input = sys.stdin.readline def dfs(x,y): global cnt visited[x][y] = True if graph[x][y] == 'P': cnt+=1 for i in range(4): nx = x + dx[i] ny = y + dy[i] if 0<=nx<n and 0<=ny<m and not visited[nx][ny]: if graph[nx][ny] !="X": dfs(nx,ny) dx = [-1,1,0,0] dy = [0,0,-1,1] cnt = 0 n,m = map(int,input().split()) graph = list(input() for _ in range(n)) visited = [[False]*m for _ in range(n)] for i in range(n): for j in range(m): if graph[i][j]=="I": dfs(i,j) if cnt==0: print("TT") else: print(cnt)

- dfs로 풀었다. 도연이가 있는 위치를 기준으로 상하좌우를 살피며 깊이우선탐색을 진행하였고 전역변수 cnt로 만날 수 있는 사람의 수를 계산하였다. 기본적인 그래프 문제로 백준에 이와 비슷한 문제가 많다.

 

- 파이썬은 기본 재귀 깊이가 1000으로 매우 얕다. 따라서 재귀함수를 사용할 시 setrecursionlimit() 함수를 써서 늘려야 런타임 에러 (RecursionError)가 나지 않는다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.