๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • What would life be If we had no courage to attemp anything?
๐“๐จ๐๐š๐ฒ ๐ˆ ๐‹๐ž๐š๐ซ๐ง

๐“๐จ๐๐š๐ฒ ๐ˆ ๐‹๐ž๐š๐ซ๐ง 2022.04.06.์ˆ˜

by DevIseo 2022. 4. 6.

0406 Today I Learn

์˜ค๋Š˜์€ ์‚ฌ์‹ค Django๋ฅผ ๋ฐฐ์› ๋Š”๋ฐ ๋ฐฐ์šด๊ฒŒ ๋„ˆ๋ฌด ๋งŽ์•„์„œ ์ •๋ฆฌํ•˜๊ธฐ๊ฐ€ ์• ๋งคํ•ด ์ผ๋‹จ ๋ฌธ์ œํ’€์ด์— ๋Œ€ํ•œ TIL์„ ์˜ฌ๋ฆฌ๊ธฐ๋กœ ํ–ˆ๋‹ค. ๋‚ด์ผ ๋‹ค์‹œ ์‹ค์Šตํ•˜๋ฉด์„œ Django๋Š” ์–ด๋ ค์› ๋˜ ๋ถ€๋ถ„์— ๋Œ€ํ•ด ๋”ฐ๋กœ ์ •๋ฆฌํ•ด์„œ ์˜ฌ๋ ค์•ผ๊ฒ ๋‹ค.


์˜ค๋Š˜์€ Aํ˜• ๋Œ€๋น„๋ฅผ ์œ„ํ•œ ํŠน๊ฐ•์„ ์œ„ํ•ด SWEA๋ฌธ์ œ 1๊ฐœ๋ฅผ ํ’€์—ˆ๋‹ค.BFS๋ฅผ ์ด์šฉํ•œ ๋ฌธ์ œ์ธ๋ฐ, ์‚ฌ์‹ค ๋” ์งง์€ ์ฝ”๋“œ๋กœ ์ตœ์ ํ™” ๊ฐ€๋Šฅํ•ด ๋ณด์ธ๋‹ค.

๋ฌธ์ œ ๋งํฌ

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

๋‚˜์˜ ํ’€์ด

from collections import deque
T = int(input())
for tc in range(1,T+1):
    N,M = map(int,input().split())
    arr=[list(input()) for _ in range(N)]
    a_visit = [[0]*M for _ in range(N)]
    b_visit = [[0]*M for _ in range(N)]
    a_cnt,b_cnt=0,0
    a_max,b_max=0,0
    
    def a_bfs(y,x):
        global a_max
        q = deque()
        q.append((y,x))
        cnt=1
        while q:
            ny,nx = q.popleft()
            directy=[-1,1,0,0]
            directx=[0,0,-1,1]

            for i in range(4):
                dy=directy[i]+ny
                dx=directx[i]+nx

                if 0<=dy<N and 0<=dx<M:
                    if arr[dy][dx]!='A': continue
                    if a_visit[dy][dx]!=0:continue
                    a_visit[dy][dx]=1
                    cnt+=1
                    q.append((dy,dx))
        if a_max<cnt:
            a_max=cnt

    def b_bfs(y,x):
        global b_max
        q = deque()
        q.append((y,x))

        cnt=1
        while q:
            ny,nx = q.popleft()
            directy=[-1,1,0,0]
            directx=[0,0,-1,1]

            for i in range(4):
                dy=directy[i]+ny
                dx=directx[i]+nx

                if 0<=dy<N and 0<=dx<M:
                    if arr[dy][dx]!='B': continue
                    if b_visit[dy][dx]!=0:continue
                    b_visit[dy][dx]=1
                    cnt+=1
                    q.append((dy,dx))
        if b_max<cnt:
            b_max=cnt

    for i in range(N):
        for j in range(M):
            if arr[i][j] == 'A' and a_visit[i][j] == 0:
                a_cnt+=1
                a_visit[i][j]=1
                a_bfs(i,j)
            if arr[i][j] == 'B' and b_visit[i][j]==0:
                b_cnt+=1
                b_visit[i][j]=1
                b_bfs(i,j)

    answer=max(a_max,b_max)
    print(f'#{tc} {a_cnt} {b_cnt} {answer}')

์ „๋žต

'A'๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์„ ๋•Œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ณณ์ด๋ผ๋ฉด BFS๋ฅผ ๋Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

์ด ๋•Œ a_cnt+1์€ ๊ฐœ์ฒด์˜ ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

BFS๋ฅผ ํƒ€๋ฉด์„œ cntํ•ด์ฃผ๋Š” ๊ฒƒ์€ ๊ฐœ์ฒด์˜ ํฌ๊ธฐ๋ฅผ ์„ธ๋Š” ๊ฒƒ์œผ๋กœ max๊ฐ’์„ ๊ฐฑ์‹ ํ•ด ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ๊ตฌํ•ด์ฃผ์—ˆ๋‹ค.

'B'๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์„ ๋•Œ๋„ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ’์„ ๊ตฌํ•ด์ค€๋‹ค.

์ถœ๋ ฅ์—์„œ๋Š” a์˜ ๊ฐœ์ฒด์ˆ˜์™€ b์˜ ๊ฐœ์ฒด์ˆ˜ ๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ ํฐ ๊ฐœ์ฒด์˜ ํฌ๊ธฐ๋ฅผ ์ถœ๋ ฅํ•ด์•ผํ•˜๋Š”๋ฐ, maxํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด a์˜ ์ตœ๋Œ€ ํฌ๊ธฐ์™€ b์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ๋น„๊ตํ•ด answer๋กœ ์ถœ๋ ฅํ•ด ์ฃผ์—ˆ๋‹ค.

๋Œ“๊ธ€