SWEA 14195微生物観察


SWEA 14195微生物観察


質問する


https://swexpertacademy.com/main/code/userProblem/userProblemDetail.do?contestProbId=AX_Pn1I6fBQDFARi

に答える


現在のidxのvalueをAとBの2つの値に分け、各AリストとBリストに結果を追加します.

コード#コード#

import sys
sys.stdin = open('input.txt')


def dfs(start):
    global temp
    global visited
    global cnt
    visited[start[0]][start[1]] = 1
    cnt += 1
    if cnt > temp:
        temp = cnt

    for i in range(4):
        nr = start[0] + d[i][0]
        nc = start[1] + d[i][1]
        if 0 <= nr < N and 0 <= nc < M and visited[nr][nc] != 1 and arr[start[0]][start[1]] == arr[nr][nc]: # 기존과 같을 때만 dfs를 순회

            dfs([nr,nc])

d = [(-1,0),(1,0),(0,-1),(0,1)]

T = int(input())



for tc in range(T):
    N, M = map(int, input().split())

    arr = [list(list(input())) for _ in range(N)]

    visited = [[0]*M for _ in range(N)]
    A = [0]                                             # max 를 사용하기 위해 리스트의 초기값에 0을 넣어줌
    B = [0]
    for i in range(N):
        for j in range(M):
            temp = 0
            if arr[i][j] == 'A' and visited[i][j] != 1: # A일 때는 dfs 순회 후 A 배열에 추가
                cnt = 0
                dfs([i,j])
                A.append(temp)
            elif arr[i][j] == 'B' and visited[i][j] != 1:   # B일 때는 dfs 순회 후 B 배열에 추가
                cnt = 0
                dfs([i, j])
                B.append(temp)
            elif arr[i][j] =='_':
                visited[i][j] = 1

    print(f'#{tc+1} {len(A)-1} {len(B)-1} {max(max(A),max(B))}')    # 길이와 최댓값을 구해서 출력

結果



maxで最大値を求めると、リストが空であることを考慮していなかったため、実行時エラーが発生しました.そこで、この部分を修正するには、まずリストに0を入れてから始めます.