[BOJ / 백준] 1303번 전쟁 - 전투 파이썬 (Python) 문제 풀이

2021. 10. 6. 11:10·Baekjoon
728x90

문제

 

문제 링크 : https://www.acmicpc.net/problem/1303

 

1303번: 전쟁 - 전투

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

www.acmicpc.net

 

 

 

 

CODE

from collections import deque
import sys

input = sys.stdin.readline
dir = [[0, -1], [0, 1], [1, 0], [-1, 0]]


def solve(x, y, ground, check):
    q = deque([[x, y]])
    check[y][x] = True
    cnt = 0

    while q:
        x, y = q.popleft()
        cnt += 1

        for d in dir:
            dx, dy = x + d[0], y + d[1]
            if 0 <= dx < n and 0 <= dy < m and ground[y][x] == ground[dy][dx] and check[dy][dx] == False:
                q.append([dx, dy])
                check[dy][dx] = True
    return cnt


if __name__ == '__main__':
    n, m = map(int, input().split())
    ground = []
    w_res = b_res = 0
    for _ in range(m):
        temp = input().rstrip()
        ground.append(list(temp))

    check = [[False] * n for _ in range(m)]

    for y in range(m):
        for x in range(n):
            if not check[y][x]:
                temp = solve(x, y, ground, check)
                if ground[y][x] == 'W':
                    w_res += temp ** 2
                else:
                    b_res += temp ** 2

    print(w_res, b_res)

 

 

 

 

 

풀이

💡 idea

- BFS

- 방문하지 않은 노드에 대해 인접한 노드를 count하며 방문처리

- 아군 / 적군에 따라 공격력을 따로 저장한다

 

💡 implementation

- 이동방향

dir = [[0, -1], [0, 1], [1, 0], [-1, 0]]

 

- 방문할 노드가 배열 범위 안에 있는지, 같은 군에 속했는지, 방문했던 노드인지 판단하는 if문

if 0 <= dx < n and 0 <= dy < m and ground[y][x] == ground[dy][dx] and check[dy][dx] == False:

 

- 아군 / 적군에 따라 결과 따로 저장

if ground[y][x] == 'W':
    w_res += temp ** 2
else:
    b_res += temp ** 2

 

 

 

 

 

결과

 

 

 

 

 

 

 

728x90
저작자표시 비영리 (새창열림)

'Baekjoon' 카테고리의 다른 글

[BOJ / 백준] 1697번 숨바꼭질 파이썬(Python) 문제 풀이  (0) 2021.10.06
[BOJ / 백준] 2178번 미로 탐색 파이썬(Python) 문제 풀이  (0) 2021.10.06
[BOJ / 백준] 1260번 DFS와 BFS 파이썬(Python) 문제 풀이  (0) 2021.10.06
[BOJ / 백준] 15683번 감시 파이썬(Python) 문제 풀이  (0) 2021.08.04
[BOJ / 백준] 16637번 괄호 추가하기 파이썬(Python) 문제 풀이  (0) 2021.08.04
'Baekjoon' 카테고리의 다른 글
  • [BOJ / 백준] 1697번 숨바꼭질 파이썬(Python) 문제 풀이
  • [BOJ / 백준] 2178번 미로 탐색 파이썬(Python) 문제 풀이
  • [BOJ / 백준] 1260번 DFS와 BFS 파이썬(Python) 문제 풀이
  • [BOJ / 백준] 15683번 감시 파이썬(Python) 문제 풀이
s_ih_yun
s_ih_yun
  • s_ih_yun
    CODESYUN
    s_ih_yun
  • 전체
    오늘
    어제
    • 분류 전체보기 (326)
      • Computer Science (26)
        • Concept (3)
        • Algorithm (23)
      • Web (54)
        • Web (7)
        • Spring (14)
        • MyBatis (1)
        • AWS (7)
        • HTML & CSS (14)
        • JavaScript (11)
      • Programming (37)
        • C++ (3)
        • Java (6)
        • Python (10)
        • MySQL (1)
        • Oracle (2)
        • Git (15)
        • Dev Tools (0)
      • Infra˙ DevOps (1)
      • Baekjoon (104)
        • 단계별로 풀어보기 (78)
      • CodeUp (98)
        • Python 기초 100제 (98)
      • Programmers (2)
      • Books (3)
      • etc (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • Syun's Pages
  • 인기 글

  • 태그

    CodeUp 기초 100제
    db
    c++
    CSS
    자료구조
    Cloud
    웹
    VS Code
    HTML
    BOJ
    myBatis
    web
    Tistory
    C
    Programmers
    oracle
    단계별로 풀어보기
    Python
    github
    MySQL
    codeup
    spring
    알고리즘
    JavaScript
    SourceTree
    clean code
    java
    git
    aws
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
s_ih_yun
[BOJ / 백준] 1303번 전쟁 - 전투 파이썬 (Python) 문제 풀이
상단으로

티스토리툴바