양 파이썬

박슬빈·2021년 8월 27일
0

문제

입력 , 출력

정답

import sys
from collections import deque
sys.setrecursionlimit(1000000)  # 재귀 최대깊이를 정해줌

input = sys.stdin.readline


def bfs():
    global v, o
    for i in range(n):
        for j in range(m):
            if arr[i][j] != '#' and visited[i][j] == 0:
                if visited[i][j] == 0:
                    dq.append([i, j])
                    cntv = cnto = 0
                    while dq:
                        x, y = dq.popleft()
                        if visited[x][y] == 0:
                            if arr[x][y] == 'v' and visited[x][y] == 0:
                                cntv += 1
                            if arr[x][y] == 'o' and visited[x][y] == 0:
                                cnto += 1
                            visited[x][y] = 1
                            for h in range(4):
                                nx = x+dx[h]
                                ny = y+dy[h]
                                if nx >= 0 and nx < n and ny >= 0 and ny < m:
                                    if arr[nx][ny] != '#' and visited[nx][ny] == 0:
                                        dq.append([nx, ny])
                    if cnto > cntv:
                        o += cnto
                    else:
                        v += cntv


n, m = map(int, input().split())
arr = [[[] for i in range(m)]for i in range(n)]
visited = [[0 for i in range(m)]for i in range(n)]
v = o = 0
dx = [1, 0, -1, 0]
dy = [0, 1, 0, -1]
dq = deque()
for i in range(n):
    a = input()
    for j in range(m):
        arr[i][j] = a[j]
bfs()
print(o, v)

설명

#이 아닐경우에 bfs를 해서 울타리 안에 있는 양,늑대를 모두 찾아서
양 수 > 늑대 수 일경우에는 총 양의 수에 더해주고
아닐경우에는 총 늑대 수 에 더해준다
조건만 찾으면 간단하게 bfs구현만 하면 쉬운 문제이다.

후기

예제에서는 정답이라고 나왔는데 채점결과 틀렸다고 하였다.
아무리 생각해도 틀린부분이없어서 다른 정답을 봤는데 다른부분이 없어서 문제점을 찾아보니 이중for문이 이상하게 순서대로 돌아가지 않았다.
찾아보니 이중for문 안에 for문에서 i를 사용해서 그랬다.
반복문을 사용할때 매우 중요하게 생각해야할것같다..
다 풀고 이상한곳에서 시간을 많이 써버렸다..

profile
이것저것합니다

0개의 댓글