๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 3184_์–‘

๋ฟŒ์•ผ._. 2022. 6. 2. 11:37

Silver II

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/3184)

<์–‘>

๋ฌธ์ œ 

 

๋ฏธํ‚ค์˜ ๋’ท๋งˆ๋‹น์—๋Š” ํŠน์ • ์ˆ˜์˜ ์–‘์ด ์žˆ๋‹ค. ๊ทธ๊ฐ€ ํ‘น ์ž ๋“  ์‚ฌ์ด์— ๋ฐฐ๊ณ ํ”ˆ ๋Š‘๋Œ€๋Š” ๋งˆ๋‹น์— ๋“ค์–ด์™€ ์–‘์„ ๊ณต๊ฒฉํ–ˆ๋‹ค.
๋งˆ๋‹น์€ ํ–‰๊ณผ ์—ด๋กœ ์ด๋ฃจ์–ด์ง„ ์ง์‚ฌ๊ฐํ˜• ๋ชจ์–‘์ด๋‹ค. ๊ธ€์ž '.' (์ )์€ ๋นˆ ํ•„๋“œ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ๊ธ€์ž '#'๋Š” ์šธํƒ€๋ฆฌ๋ฅผ, 'o'๋Š” ์–‘, 'v'๋Š” ๋Š‘๋Œ€๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
ํ•œ ์นธ์—์„œ ์ˆ˜ํ‰, ์ˆ˜์ง๋งŒ์œผ๋กœ ์ด๋™ํ•˜๋ฉฐ ์šธํƒ€๋ฆฌ๋ฅผ ์ง€๋‚˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์นธ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ๋‘ ์นธ์€ ๊ฐ™์€ ์˜์—ญ ์•ˆ์— ์†ํ•ด ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ๋งˆ๋‹น์—์„œ "ํƒˆ์ถœ"ํ•  ์ˆ˜ ์žˆ๋Š” ์นธ์€ ์–ด๋–ค ์˜์—ญ์—๋„ ์†ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๊ฐ„์ฃผํ•œ๋‹ค.
๋‹คํ–‰ํžˆ ์šฐ๋ฆฌ์˜ ์–‘์€ ๋Š‘๋Œ€์—๊ฒŒ ์‹ธ์›€์„ ๊ฑธ ์ˆ˜ ์žˆ๊ณ  ์˜์—ญ ์•ˆ์˜ ์–‘์˜ ์ˆ˜๊ฐ€ ๋Š‘๋Œ€์˜ ์ˆ˜๋ณด๋‹ค ๋งŽ๋‹ค๋ฉด ์ด๊ธฐ๊ณ , ๋Š‘๋Œ€๋ฅผ ์šฐ๋ฆฌ์—์„œ ์ซ“์•„๋‚ธ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๋Š‘๋Œ€๊ฐ€ ๊ทธ ์ง€์—ญ ์•ˆ์˜ ๋ชจ๋“  ์–‘์„ ๋จน๋Š”๋‹ค.
๋งจ ์ฒ˜์Œ ๋ชจ๋“  ์–‘๊ณผ ๋Š‘๋Œ€๋Š” ๋งˆ๋‹น ์•ˆ ์˜์—ญ์— ์กด์žฌํ•œ๋‹ค.
์•„์นจ์ด ๋„๋‹ฌํ–ˆ์„ ๋•Œ ์‚ด์•„๋‚จ์€ ์–‘๊ณผ ๋Š‘๋Œ€์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ.

 

 

์ž…๋ ฅ

 

์ฒซ ์ค„์—๋Š” ๋‘ ์ •์ˆ˜ R๊ณผ C๊ฐ€ ์ฃผ์–ด์ง€๋ฉฐ(3 ≤ R, C ≤ 250), ๊ฐ ์ˆ˜๋Š” ๋งˆ๋‹น์˜ ํ–‰๊ณผ ์—ด์˜ ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
๋‹ค์Œ R๊ฐœ์˜ ์ค„์€ C๊ฐœ์˜ ๊ธ€์ž๋ฅผ ๊ฐ€์ง„๋‹ค. ์ด๋“ค์€ ๋งˆ๋‹น์˜ ๊ตฌ์กฐ(์šธํƒ€๋ฆฌ, ์–‘, ๋Š‘๋Œ€์˜ ์œ„์น˜)๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

์ถœ๋ ฅ 

 

ํ•˜๋‚˜์˜ ์ค„์— ์•„์นจ๊นŒ์ง€ ์‚ด์•„์žˆ๋Š” ์–‘๊ณผ ๋Š‘๋Œ€์˜ ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋Š” ๋‘ ์ •์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

๋ฌธ์ œ ํ’€์ด

- my solution

import sys
from collections import deque

def survival(arr, visited, start, result):
    queue=deque([start])
    sheep=0;wolf=0

    if arr[start[0]][start[1]]=='v': # ๋Š‘๋Œ€
        wolf+=1
    elif arr[start[0]][start[1]]=='o': # ์–‘
        sheep+=1

    dx=[-1,1,0,0] # ์ƒํ•˜์ขŒ์šฐ
    dy=[0,0,-1,1]

    while queue:
        temp=queue.popleft()
        for i in range(4):
            x=temp[0]+dx[i]
            y=temp[1]+dy[i]
            if 0<=x<len(arr) and 0<=y<len(arr[0]) and visited[x][y]==0:
                if arr[x][y]!="#":
                    queue.append([x,y])
                    visited[x][y]=1
                    if arr[x][y]=='v':
                        wolf+=1
                    elif arr[x][y]=='o':
                        sheep+=1
                else:
                    visited[x][y]=1

    if sheep>wolf:
        result[0]+=sheep
    else:
        result[1]+=wolf


def main():
    r,c=map(int, input().split()) # ํ–‰, ์—ด

    arr=[]
    for i in range(r):
        arr.append(list(sys.stdin.readline().strip()))

    visited=[[0]*c for i in range(r)] # ๋ฐฉ๋ฌธ ์—ฌ๋ถ€
    result=[0,0] # ์–‘, ๋Š‘๋Œ€ ์ˆ˜
    for i in range(r):
        for j in range(c):
            if arr[i][j]!='#' and visited[i][j]==0: # ์šธํƒ€๋ฆฌ๊ฐ€ ์•„๋‹ˆ๊ณ  ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด
                visited[i][j]=1 # ๋ฐฉ๋ฌธ
                survival(arr, visited, [i,j], result)

    print(str(result[0])+" "+ str(result[1]))


if __name__=='__main__':
    main()

 

  • survival ( arr, ๋ฐฉ๋ฌธ ์—ฌ๋ถ€, ์‹œ์ž‘ ์ขŒํ‘œ, ๊ฒฐ๊ณผ )
    : sheep, wolf  = ๊ฐ™์€ ์˜์—ญ์—์„œ ์‚ด์•„๋‚จ์€ ์–‘๊ณผ ๋Š‘๋Œ€์˜ ์ˆ˜
    : queue๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต -> ์ œ์ผ ์ฒ˜์Œ ๊ฐ’์„ pop ํ•˜์—ฌ ์ƒํ•˜์ขŒ์šฐ๋ฅผ ํƒ์ƒ‰ -> ๋ฒ”์œ„ ์•ˆ์ด๋ฉฐ ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด -> ์šธํƒ€๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด queue์— ์ถ”๊ฐ€ ๋ฐ ๋ฐฉ๋ฌธ, ์–‘์ด๋‚˜ ๋Š‘๋Œ€์ธ ๊ฒฝ์šฐ wolf, sheep์— +1 but  ์šธํƒ€๋ฆฌ๋ผ๋ฉด ๋ฐฉ๋ฌธ๋งŒ ํ‘œ์‹œ
    : ๊ฐ™์€ ์˜์—ญ ํƒ์ƒ‰์„ ๋๋‚ธ ํ›„ ์–‘์ด ๋Š‘๋Œ€๋ณด๋‹ค ๋งŽ๋‹ค๋ฉด result [0]์— ์–‘์˜ ์ˆ˜ ๋”ํ•ด์ฃผ๊ณ  ๋Š‘๋Œ€๊ฐ€ ๋งŽ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋ฉด result [1]์— ๋Š‘๋Œ€ ์ˆ˜ ๋”ํ•ด์คŒ

  • main
    : ํ–‰ r, ์—ด c ์ž…๋ ฅ
    : arr ์ž…๋ ฅ
    : visited = ๋ฐฉ๋ฌธ ์—ฌ๋ถ€
    : result = [์–‘, ๋Š‘๋Œ€]
    : arr ์ „์ฒด๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ ์šธํƒ€๋ฆฌ๊ฐ€ ์•„๋‹ˆ๊ณ  ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๋ฐฉ๋ฌธ ํ›„ ํ•จ์ˆ˜ ํ˜ธ์ถœ
    : result ์ถœ๋ ฅ

์ƒ๊ฐ๐Ÿค”