-
[백준] 3184 - 양알고리즘 2023. 5. 10. 16:40728x90
1. 문제
https://www.acmicpc.net/problem/3184
3184번: 양
첫 줄에는 두 정수 R과 C가 주어지며(3 ≤ R, C ≤ 250), 각 수는 마당의 행과 열의 수를 의미한다. 다음 R개의 줄은 C개의 글자를 가진다. 이들은 마당의 구조(울타리, 양, 늑대의 위치)를 의미한다.
www.acmicpc.net
2. 접근
1. 울타리로 가둬져있는 각각의 공간마다 wolf, sheep 수를 구해준다.
2. 한 지점부터 dfs로 상하좌우로 재귀함수를 실행한다
3. dfs 의 x,y 지점이 True라면 4번으로 진행한다
4. 각 영역마다의 wolf >= sheep 이면 w += wolf , wolf < sheep 이면 s += sheep를 해준다
3. 풀이
# 3184 실버1 import sys input = sys.stdin.readline sys.setrecursionlimit(10**9) n,m = map(int,input().split()) board = [] for i in range(n): board.append(list(map(str,input().rstrip()))) wolf, sheep = 0,0 w,s = 0,0 visited = [[False] * m for _ in range(n)] def dfs(x,y): global wolf, sheep if 0<=x<n and 0<=y<m and visited[x][y] == False: if board[x][y] != '#': visited[x][y] = True if board[x][y] == 'o': sheep += 1 elif board[x][y] == 'v': wolf += 1 dfs(x-1,y) dfs(x+1,y) dfs(x,y-1) dfs(x,y+1) return True return False for i in range(n): for j in range(m): if dfs(i,j) == True: if sheep > wolf: s += sheep else: w += wolf sheep , wolf = 0,0 print(s,w)
'알고리즘' 카테고리의 다른 글
[백준] 1138 - 한 줄로 서기 (0) 2023.05.10 [백준] 1205 - 등수 구하기 (0) 2023.05.10 [백준] 1325 - 효율적인 해킹 (1) 2023.05.08 [백준] 1051 - 숫자 정사각형 (0) 2023.05.08 [백준] 1080 - 행렬 (1) 2023.05.08