๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/๋ฐฑ์ค€(BOJ)

[ ํŒŒ์ด์ฌ(python) ] ๋ฐฑ์ค€ 10709 - ๊ธฐ์ƒ์บ์Šคํ„ฐ

by YWTechIT 2021. 7. 21.
728x90

๐Ÿ“ ๋ฐฑ์ค€ 10709 - ๊ธฐ์ƒ์บ์Šคํ„ฐ

๋ฐฑ์ค€ 10709 - ๊ธฐ์ƒ์บ์Šคํ„ฐ


โšก๏ธ ๋‚˜์˜ ํ’€์ด

์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฌธ์ œ์˜€๋Š”๋ฐ, ๊ตฌ๋ฆ„์ด ์›€์ง์ผ๋•Œ์˜ ๋กœ์ง์„ ์–ด๋–ป๊ฒŒ ์งœ๋Š”๋ƒ๊ฐ€ ์ค‘์š”ํ•œ ๋ฌธ์ œ์˜€๋‹ค. ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ๋‹ค๋ฅธ ์ฝ”๋“œ์— ๋น„ํ•ด ๊ธธ์ด๋„ ๋งŽ์•˜๊ณ , ์‹คํ–‰์‹œ๊ฐ„๋„ 100m/s์ •๋„ ์ฐจ์ด๊ฐ€ ๋‚ฌ๋‹ค. ๋‹ค์‹œ๋ณด๋‹ˆ๊นŒ ๋ฐ˜๋ณต๋ฌธ์„ ๋งŽ์ด ์‚ฌ์šฉํ•ด์„œ ๊ทธ๋Ÿฐ๊ฒƒ ๊ฐ™๋‹ค.

๋‚˜์˜ ํ’€์ด๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

  1. ์ž…๋ ฅ์— ๊ตฌ๋ฆ„์ด ์žˆ๋Š”์ง€ ์—†๋Š”์ง€๋ฅผ ํŒ๋‹จํ•˜์—ฌ boolean๊ฐ’์„ ๋ฆฌํ„ดํ•œ๋‹ค.
  2. ๊ตฌ๋ฆ„์ด ํ•œ๊ฐœ๋ผ๋„ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ํ˜„์žฌ sky์ขŒํ‘œ๊ฐ€ c์ด๊ณ  ๋‹ค์Œ ์นธ์„ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด cnt๋ฅผ ํ•˜๋‚˜์”ฉ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค. (์ข…๋ฃŒ์กฐ๊ฑด: cnt๊ฐ€ W๋ณด๋‹ค ์ปค์งˆ ๋•Œ)

 

๋‹ค๋ฅธ์‚ฌ๋žŒ์˜ ํ’€์ด์ˆœ์„œ๋Š” ์ž…๋ ฅ์˜ ๊ฐ row๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ’€์—ˆ๋Š”๋ฐ, ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋ฌธ์ œ์—์„œ ์—ด๋ผ๋ฆฌ๋Š” ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ํ–‰์„ ๊ธฐ์ค€์œผ๋กœ๋งŒ ํ’€๊ธฐ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์„œ ์ฝ”๋“œ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋Š”๊ฒƒ ๊ฐ™๋‹ค.

 

  1. ๊ฐ row๋ฅผ ๊ธฐ์ค€์œผ๋กœ cnt์™€ cloud๋ฅผ ์ดˆ๊ธฐํ™” ์‹œํ‚จ๋‹ค.
  2. ํ˜„์žฌ ์ขŒํ‘œ๊ฐ€ .์ธ๋ฐ not cloud๋ฉด -1์„ ๋„ฃ๋Š”๋‹ค. (์ด์ „๊นŒ์ง€ ๊ตฌ๋ฆ„์ด ์—†์œผ๋ฏ€๋กœ)
  3. ํ˜„์žฌ ์ขŒํ‘œ๊ฐ€ c๋ฉด 0์„ ๋„ฃ๋Š”๋‹ค. (๊ตฌ๋ฆ„์ด ํ˜„์žฌ ๋– ์žˆ๋Š” ์ƒํƒœ์ด๋ฏ€๋กœ)
  4. ํ˜„์žฌ ์ขŒํ‘œ๊ฐ€ .์ธ๋ฐ cloud๋ฉด ์ด์ „๊นŒ์ง€ ๋ˆ„์ ํ•œ cnt๋ฅผ ๋„ฃ๋Š”๋‹ค. (๊ตฌ๋ฆ„์ด cnt๋ถ„ ๋’ค์— ์˜ค๊ธฐ ๋•Œ๋ฌธ์—)

 

์ฃผ์˜ ํ•  ์ ์€ ๋‹ค์Œ ์‚ฌ์ง„์ฒ˜๋Ÿผ ์ด์ „์— ๋‹ค๋ฅธ ๊ตฌ๋ฆ„์ด ์žˆ๋”๋ผ๋„ ํ˜„์žฌ ์ขŒํ‘œ๊ธฐ์ค€์œผ๋กœ ์ œ์ผ ๊ฐ€๊นŒ์šด ๊ตฌ๋ฆ„๋งŒ ์‹ ๊ฒฝ์จ์•ผํ•œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ œ์ผ ์ฒ˜์Œ์œผ๋กœ ํ•˜๋Š˜์— ๊ตฌ๋ฆ„์ด ๋„์ฐฉํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ตฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.(๋ฌธ์ œ ์ฐธ๊ณ ) ๋”ฐ๋ผ์„œ ๋‘๋ฒˆ์งธ ์ฝ”๋“œ 15๋ฒˆ ๋ผ์ธ์—์„œ cnt๋ฅผ ๋‹ค์‹œ 1๋กœ ์ดˆ๊ธฐํ™” ์‹œ์ผœ์•ผํ•œ๋‹ค. (์ด ๋ถ€๋ถ„์—์„œ ์กฐ๊ธˆ ๋ง‰ํ˜”๋‹ค.)

 

 

# ๋‚˜์˜ ์ฝ”๋“œ
H, W = map(int, input().split())
sky = [input() for _ in range(H)]
result_sky = [[-1] * W for _ in range(H)]
visited = [[False] * W for _ in range(H)]
cnt = 1

def check_cloud():    # ๊ตฌ๋ฆ„์ด ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ํŒ๋‹จํ•˜๋Š” ํ•จ์ˆ˜
    for i in sky:
        if 'c' in i:
            return True
    return False

def print_arr(arr):    # arr์„ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜
    for i in arr:
        print(*i, end=' ')
        print()

def visited_cloud():    # ๊ตฌ๋ฆ„์˜ ์ดˆ๊ธฐ๊ฐ’์„ visitedํ•˜๋Š” ํ•จ์ˆ˜
    for i in range(H):
        for j in range(W):
            if sky[i][j] == 'c':
                visited[i][j] = True
                result_sky[i][j] = 0

if not check_cloud():    # ๊ตฌ๋ฆ„์ด ํ•˜๋‚˜๋„ ์—†๋Š” ๊ฒฝ์šฐ
    print_arr(result_sky)    

else:    # ๊ตฌ๋ฆ„์ด ํ•˜๋‚˜๋ผ๋„ ์žˆ๋Š” ๊ฒฝ์šฐ
    visited_cloud()

    while cnt < W:    # ๊ตฌ๋ฆ„์ด ์›€์ง์ด๋Š” ์ตœ๋Œ€ ํšŸ์ˆ˜๋Š” W
        temp_arr = [[-1] * W for _ in range(H)]

        for i in range(H):
            for j in range(W-1):
                if sky[i][j] == 'c' and not visited[i][j+1]:
                    temp_arr[i][j+1] = 'c'
                    result_sky[i][j+1] = cnt

        sky = temp_arr
        cnt += 1
    print_arr(result_sky)

 

# ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ
H, W = map(int, input().split())
sky = [input() for _ in range(H)]
answer = [[0] * W for _ in range(H)]

for i in range(H):
    cnt = 1
    cloud = False
    for j in range(W):
        if not cloud and sky[i][j] == '.':
            answer[i][j] = -1
        elif sky[i][j] == 'c':
            cloud = True
            answer[i][j] = 0
            cnt = 1
        elif cloud and sky[i][j] == '.':
            answer[i][j] = cnt
            cnt += 1

for i in answer:
    print(*i, end=' ')
    print()
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€