[Boj문제풀이]

[Boj/백준] 1303 Python

ki7348 2021. 9. 27. 19:33

문제출처: https://www.acmicpc.net/problem/1303

 

1303번: 전쟁 - 전투

첫째 줄에는 전쟁터의 가로 크기 N, 세로 크기 M(1 ≤ N, M ≤ 100)이 주어진다. 그 다음 두 번째 줄에서 M+1번째 줄에는 각각 (X, Y)에 있는 병사들의 옷색이 띄어쓰기 없이 주어진다. 모든 자리에는

www.acmicpc.net

 

1. 문제 접근 방식

W와 B일때 경우를 나눠서 BFS를 돌리면 될 것 같았다.

한 개의 함수를 만들고 마지막 인자에 W와 B를 각각 넣어준다.

 

 

2. 내가 푼 코드

import sys
from collections import deque

dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]

def bfs(x,y,color):
    queue = deque()
    queue.append((x,y))
    graph[x][y] = 0

    cnt = 1
    while queue:
        x, y = queue.popleft()
        for i in range(4):
            nx=x+dx[i]
            ny=y+dy[i]
            if nx < 0 or ny < 0 or nx>=m or ny>=n:
                continue
            if graph[nx][ny] == color:
                cnt+=1
                graph[nx][ny] = 0
                queue.append((nx,ny))
    return cnt

n, m = map(int,sys.stdin.readline().split())

graph = [list(sys.stdin.readline().strip()) for _ in range(m)]

sumW = 0
sumB = 0

for i in range(m):
    for j in range(n):
        if graph[i][j] == 'W':
            sumW += pow(bfs(i,j,'W'),2)
        elif graph[i][j] == 'B':
            sumB += pow(bfs(i,j,'B'),2)

print(sumW, sumB)

 

 

3. 결과 및 느낀점

어떤 수의 X제곱을 구하고 싶을 땐 pow함수를 사용하자.

'[Boj문제풀이]' 카테고리의 다른 글

[Boj/백준] 22352 Python  (0) 2021.09.28
[Boj/백준] 6118 Python  (0) 2021.09.27
[Boj/백준] 1743 Python  (0) 2021.09.26
[Boj/백준] 3187 Python  (0) 2021.09.24
[Boj/백준] 14502 Python  (0) 2021.09.23