본문 바로가기

알고리즘

백준 1303 전쟁- 전투

728x90

백준 1303 전쟁- 전투

 

문제

https://www.acmicpc.net/problem/1303

 

1303번: 전쟁 - 전투

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

www.acmicpc.net

분류

그래프

pass(복습필요)

하지만, 시간 지난뒤 다시 풀어봐야 할것같다. 

dfs, bfs 문제는 자주 안보면 풀이법을 자꾸 까먹는것같다.

 

풀이

2023.08.11 - [알고리즘] - softeer, 장애물 인식 프로그램

 

softeer, 장애물 인식 프로그램

softeer, 장애물 인식 프로그램 문제 https://softeer.ai/practice/info.do?idx=1&eid=409 Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 softeer.ai 풀이 일단 방문했으면 방문여부를 표시해야 재방문하는

pangeei-h.tistory.com

이 문제에서 탐색할 수 있는 조건에 같은 team인지 여부가 추가됨!

 

 

전체 코드

import sys
input = sys.stdin.readline

C, R = map(int, input().split())
# C, R = 5, 5

board = []
# board = [['W', 'B', 'W', 'W', 'W'], ['W', 'W', 'W', 'W', 'W'], ['B', 'B', 'B', 'B', 'B'], ['B', 'B', 'B', 'W', 'W'], ['W', 'W', 'W', 'W', 'W']]
for _ in range(R):
    board.append(list(input()))

# 북동남서
dr = [-1, 0, 1, 0]
dc = [0, 1, 0, -1]

def dfs(r, c, team):
    global cnt

    board[r][c] = 'V' # 방문표시
    cnt += 1

    # 갈 수 있는지 탐색
    for i in range(4):
        nr = r + dr[i]
        nc = c + dc[i]
        
        if 0 <= nr < R and 0 <= nc < C and board[nr][nc] == team:
            dfs(nr, nc, board[nr][nc])

w_score = 0
b_score = 0
for r in range(R):
    for c in range(C):
        # 방문한 적 없을 경우
        if board[r][c] != 'V':
            cnt = 0 # 초기화
            team = board[r][c]
            dfs(r, c, team)
            if team == 'W':
                w_score += cnt ** 2
            elif team == 'B':
                b_score += cnt ** 2

print(w_score, b_score)

'알고리즘' 카테고리의 다른 글

프로그래머스, 키패드 누르기  (0) 2023.08.23
프로그래머스, 숫자짝궁  (0) 2023.08.21
softeer, 장애물 인식 프로그램  (0) 2023.08.11
백준, 이모티콘  (0) 2023.08.09
프로그래머스, 공원산책  (0) 2023.08.07