[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함수를 사용하자.