[파이썬] 백준 3184, 3187 : 양, 양치기 꿍 (실버1)
3184번: 양
첫 줄에는 두 정수 R과 C가 주어지며(3 ≤ R, C ≤ 250), 각 수는 마당의 행과 열의 수를 의미한다. 다음 R개의 줄은 C개의 글자를 가진다. 이들은 마당의 구조(울타리, 양, 늑대의 위치)를 의미한다.
www.acmicpc.net
3187번: 양치기 꿍
입력의 첫 번째 줄에는 각각 영역의 세로와 가로의 길이를 나타내는 두 개의 정수 R, C (3 ≤ R, C ≤ 250)가 주어진다. 다음 각 R줄에는 C개의 문자가 주어지며 이들은 위에서 설명한 기호들이다.
www.acmicpc.net
풀이
0. 방향성 생각
주어진 영역 내에서 양, 늑대의 수를 세서 계산.
탐색 가능한 영역이면 DFS로
1. 입력
import sys
sys.setrecursionlimit(10**6)
input = lambda: sys.stdin.readline().rstrip()
h,w = map(int,input().split())
arr = [list(input()) for _ in range(h)]
2. 함수 정의
def dfs(x,y,sheep,wolf):
if x<0 or x>=w or y<0 or y>=h:
return sheep,wolf
if arr[y][x] != '#':
if arr[y][x] == 'v': wolf += 1
elif arr[y][x] == 'o': sheep += 1
arr[y][x] = '#'
step = [[1,-1,0,0],[0,0,1,-1]]
for i in range(4):
nx = x + step[0][i]
ny = y + step[1][i]
sheep,wolf = dfs(nx,ny,sheep,wolf)
return sheep,wolf
3. 출력
# 양
a,b = 0,0
for s,w in result:
if s<=w : b += w
else : a += s
print(a,b)
# 양치기 꿍
a,b = 0,0
for s,w in result:
if s>w : a += s
else : b += w
print(a,b)
전체코드
import sys
sys.setrecursionlimit(10**6)
input = lambda: sys.stdin.readline().rstrip()
h,w = map(int,input().split())
arr = [list(input()) for _ in range(h)]
def dfs(x,y,sheep,wolf):
if x<0 or x>=w or y<0 or y>=h:
return sheep,wolf
if arr[y][x] != '#':
if arr[y][x] == 'v': wolf += 1
elif arr[y][x] == 'o': sheep += 1
arr[y][x] = '#'
step = [[1,-1,0,0],[0,0,1,-1]]
for i in range(4):
nx = x + step[0][i]
ny = y + step[1][i]
sheep,wolf = dfs(nx,ny,sheep,wolf)
return sheep,wolf
result = []
for i in range(h):
for j in range(w):
if arr[i][j] != '#':
result.append(dfs(j,i,0,0))
# 양
a,b = 0,0
for s,w in result:
if s<=w : b += w
else : a += s
print(a,b)
# 양치기 꿍
a,b = 0,0
for s,w in result:
if s>w : a += s
else : b += w
print(a,b)
코멘트
dfs 인수로 양 늑대수 넣어서 그런지 몰라도 성능이 나쁘다.
태그 찾아서 DFS로 풀었는데 굳이 DFS로 풀어야 하는지 모르겠다.
'Algorithm > Graph' 카테고리의 다른 글
[파이썬] 백준 17090 : 미로 탈출하기 (골드3) (0) | 2023.07.31 |
---|---|
[파이썬] 백준 1525 : 퍼즐 (골드2) (0) | 2023.07.30 |
[파이썬] 프로그래머스 : 단어 변환 (Lv.2) (0) | 2023.07.20 |
[파이썬] 백준 연구소3 : 17142 (골드3) (0) | 2023.07.12 |
[파이썬] 백준 17141 : 연구소2 (골드4) (0) | 2023.07.12 |
[파이썬] 백준 14502 : 연구소 (골드4) (0) | 2023.07.11 |
[파이썬] 프로그래머스 : 미로탈출 (Lv.2) (0) | 2023.07.07 |
댓글