ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [๋ฐฑ์ค€] 16234 ์ธ๊ตฌ ์ด๋™ with Python
    PS 2022. 2. 3. 19:45
    728x90
    ๋ฐ˜์‘ํ˜•

    ๐Ÿ“Œ BOJ 16234 ์ธ๊ตฌ ์ด๋™

    ๐Ÿ’ก ์กฐ๊ฑด

    1. Nร—Nํฌ๊ธฐ์˜ ๋•…์ด ์žˆ๊ณ , ๋•…์€ 1ร—1๊ฐœ์˜ ์นธ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค.
      N, L, R์ด ์ฃผ์–ด์ง„๋‹ค. (1 โ‰ค N โ‰ค 50, 1 โ‰ค L โ‰ค R โ‰ค 100)
    2. ์ธ๊ตฌ ์ด๋™์€ ํ•˜๋ฃจ ๋™์•ˆ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰๋˜๊ณ , ๋” ์ด์ƒ ์•„๋ž˜ ๋ฐฉ๋ฒ•์— ์˜ํ•ด ์ธ๊ตฌ ์ด๋™์ด ์—†์„ ๋•Œ๊นŒ์ง€ ์ง€์†๋œ๋‹ค.
        1. ๊ตญ๊ฒฝ์„ ์„ ๊ณต์œ ํ•˜๋Š” ๋‘ ๋‚˜๋ผ์˜ ์ธ๊ตฌ ์ฐจ์ด๊ฐ€ L๋ช… ์ด์ƒ, R๋ช… ์ดํ•˜๋ผ๋ฉด, ๋‘ ๋‚˜๋ผ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ๊ตญ๊ฒฝ์„ ์„ ์˜ค๋Š˜ ํ•˜๋ฃจ ๋™์•ˆ ์—ฐ๋‹ค.
        1. ์œ„์˜ ์กฐ๊ฑด์— ์˜ํ•ด ์—ด์–ด์•ผํ•˜๋Š” ๊ตญ๊ฒฝ์„ ์ด ๋ชจ๋‘ ์—ด๋ ธ๋‹ค๋ฉด, ์ธ๊ตฌ ์ด๋™์„ ์‹œ์ž‘ํ•œ๋‹ค.
        1. ๊ตญ๊ฒฝ์„ ์ด ์—ด๋ ค์žˆ์–ด ์ธ์ ‘ํ•œ ์นธ๋งŒ์„ ์ด์šฉํ•ด ์ด๋™ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด, ๊ทธ ๋‚˜๋ผ๋ฅผ ์˜ค๋Š˜ ํ•˜๋ฃจ ๋™์•ˆ์€ ์—ฐํ•ฉ์ด๋ผ๊ณ  ํ•œ๋‹ค.
        1. ์—ฐํ•ฉ์„ ์ด๋ฃจ๊ณ  ์žˆ๋Š” ๊ฐ ์นธ์˜ ์ธ๊ตฌ์ˆ˜๋Š” (์—ฐํ•ฉ์˜ ์ธ๊ตฌ์ˆ˜) / (์—ฐํ•ฉ์„ ์ด๋ฃจ๊ณ  ์žˆ๋Š” ์นธ์˜ ๊ฐœ์ˆ˜)๊ฐ€ ๋œ๋‹ค.
        1. ์—ฐํ•ฉ์„ ํ•ด์ฒดํ•˜๊ณ , ๋ชจ๋“  ๊ตญ๊ฒฝ์„ ์„ ๋‹ซ๋Š”๋‹ค.
    3. ๊ฐ ๋‚˜๋ผ์˜ ์ธ๊ตฌ์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ธ๊ตฌ ์ด๋™์ด ๋ฉฐ์น  ๋™์•ˆ ๋ฐœ์ƒํ•˜๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด์•ผํ•œ๋‹ค.
    4. rํ–‰ c์—ด์— ์ฃผ์–ด์ง€๋Š” ์ •์ˆ˜๋Š” A[r][c]์˜ ๊ฐ’์ด๋‹ค. (0 โ‰ค A[r][c] โ‰ค 100)
    5. BFS ์•Œ๊ณ ๋ฆฌ์ฆ˜, ๊ตฌํ˜„์œ ํ˜•์˜ ๋ฌธ์ œ

    ๐Ÿ–ฅ ์†Œ์Šค ์ฝ”๋“œ

    from sys import stdin
    from collections import deque
    
    n, l, r = map(int, stdin.readline().split())
    if l > r:
        l, r = r, l
    
    board = []
    for _ in range(n):
        board.append(list(map(int, stdin.readline().split())))
    
    dx, dy = [1, 0, 0, -1], [0, -1, 1, 0]
    
    
    def check(x, y):
        visited = set()
        q = deque()
        visited.add((x, y))
        q.append((x, y, board[x][y]))
        vals = [board[x][y]]
        tf = False
    
        while q:
            x, y, cost = q.popleft()
    
            for i in range(4):
                nx, ny = x + dx[i], y + dy[i]
                if -1 < nx < n and -1 < ny < n:
                    if l <= abs(cost - board[nx][ny]) <= r and (nx, ny) not in visited:
                        visited.add((nx, ny))
                        q.append((nx, ny, board[nx][ny]))
                        vals.append(board[nx][ny])
                        tf = True
    
        if not tf:
            return False
        else:
            res = int(sum(vals) / len(vals))
            return [res, visited]
    
    
    cnt = 0
    while 1:
        tf = []
        for i in range(n):
            for j in range(n):
                temp = check(i, j)
                if temp is not False:
                    tf.append(temp)
    
        if not tf:
            break
        else:
            cnt += 1
            for val, visited in tf:
                for x, y in visited:
                    board[x][y] = val
    
    print(cnt)

    ๐Ÿ”– ์˜ˆ์ œ ๋ฐ ์‹คํ–‰๊ฒฐ๊ณผ

    ์˜ˆ์ œ

    2 20 50
    50 30
    30 40

    ์‹คํ–‰๊ฒฐ๊ณผ

    1

    โŒจ๏ธ ๋ฌธ์ œ ํ’€์ด

    1. board ๋ฆฌ์ŠคํŠธ์— ๊ฐ ๊ตญ๊ฐ€์˜ ์ธ๊ตฌ์ˆ˜๋ฅผ ์ž…๋ ฅ ๋ฐ›๊ณ , ์ธ๊ตฌ ์ด๋™ ํšŸ์ˆ˜๋ฅผ ์ €์žฅํ•  cnt ๋ณ€์ˆ˜๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”.
    2. ์ธ๊ตฌ ์ด๋™์ด ์ผ์–ด๋‚˜์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ while ๋ฐ˜๋ณต์„ ํ†ตํ•ด์„œ ์ฒดํฌ๋ฅผ ํ•ด์ค„ ๊ฒƒ.
    3. ์ธ๊ตฌ ์ด๋™์ด ์ผ์–ด๋‚ฌ์„ ๋•Œ, ์ธ๊ตฌ ์ด๋™ ํ›„์˜ ์ธ๊ตฌ ์ˆ˜์™€ ์ธ๊ตฌ ์ด๋™์ด ์ผ์–ด๋‚œ ๋„์‹œ์˜ ์ขŒํ‘œ๋ฅผ ๋‹ด์„ ๋ฆฌ์ŠคํŠธ ๋ณ€์ˆ˜ tf๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    4. board ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ, ๊ฐ ์ขŒํ‘œ์—์„œ ์—ฐํ•ฉ์ด ๋  ์ˆ˜ ์žˆ๋Š” ๊ตญ๊ฐ€๋ฅผ ์ฒดํฌํ•˜์—ฌ ๋ฐ˜ํ™˜๋œ ๊ฐ’์„ temp์— ์ €์žฅํ•œ๋‹ค.
      ๋งŒ์•ฝ, temp ๊ฐ€ False๋ผ๋ฉด ์ธ๊ตฌ์ด๋™์ด ์ผ์–ด๋‚˜์ง€ ์•Š์€ ๊ฒƒ์ด๋‹ค.
      ๋ฐ˜๋Œ€๋กœ False ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์ธ๊ตฌ์ด๋™์ด ์ผ์–ด๋‚œ ๊ฒƒ์ด๋‹ค.
    5. board ์ „์ฒด๋ฅผ ์ˆœํšŒํ–ˆ์Œ์—๋„ ์ธ๊ตฌ์ด๋™์ด ์ผ์–ด๋‚˜์ง€ ์•Š์•„ tf๊ฐ€ ๋น„์–ด์žˆ๋‹ค๋ฉด, ๊ทธ๋Œ€๋กœ while ๋ฌธ ๋ฐ–์œผ๋กœ ๋‚˜์˜จ๋‹ค.
    6. tf๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด, ์ธ๊ตฌ์ด๋™ ํšŸ์ˆ˜(cnt)๋ฅผ + 1 ํ•ด์ค€ ๋’ค,
      tf ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉด์„œ, ์—ฐํ•ฉ๋ผ๋ฆฌ์˜ ์ธ๊ตฌ ์ด๋™์„ ํ•œ ์ขŒํ‘œ์— ํ•ด๋‹นํ•˜๋Š” ์ธ๊ตฌ ์ˆ˜๋กœ board ๊ฐ’์„ ๊ฐฑ์‹ ํ•œ๋‹ค.
    7. check() ํ•จ์ˆ˜์˜ ๋กœ์ง์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
      1. BFS ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜์—ฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์€ ์ขŒํ‘œ์™€ ์—ฐํ•ฉ์ด ๋  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ตญ๊ฐ€๋ฅผ ์ฐพ๋Š”๋‹ค.
      2. ๋‹ค์Œ ์ด๋™ํ•˜๋ ค๋Š” ์ขŒํ‘œ๊ฐ€ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜์–ด์•ผํ•˜๊ณ ,
        ๊ทธ ์ขŒํ‘œ์— ํ•ด๋‹นํ•˜๋Š” board์˜ ๊ฐ’์ด l <= ๊ตญ๊ฒฝ์„ ๊ณต์œ ํ•˜๋Š” ๊ตญ๊ฐ€๋“ค์˜ ์ธ๊ตฌ ์ฐจ์ด <= r ์˜ ์กฐ๊ฑด์„ ์ง€์ผœ์•ผํ•œ๋‹ค.
      3. ๋˜ํ•œ (1), (2) ์˜ ์กฐ๊ฑด์„ ์ง€ํ‚จ ๊ฒฝ์šฐ, ์—ฐํ•ฉ๋“ค์˜ ๊ฐ ์ธ๊ตฌ์ˆ˜๋Š” vals ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•ด ํ‰๊ท  ์ธ๊ตฌ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
      4. check ํ•จ์ˆ˜ ๋‚ด์˜ ์ธ๊ตฌ์ด๋™ ํŒ๋ณ„ ๋ณ€์ˆ˜์ธ tf ์— ์ธ๊ตฌ์ด๋™์„ ํ–ˆ์„ ์‹œ, True ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.

    ๐Ÿ’พ ๋Š๋‚€์ 

    1. ๊ตญ๊ฒฝ์„ ์„ ๊ณต์œ ํ•˜๋Š” ๋‘ ๊ตญ๊ฐ€์˜ ์ธ๊ตฌ ์ฐจ์ด ์กฐ๊ฑด์„ ๋„ฃ๋Š” ๊ฒƒ์—์„œ ํ•œ๋ฒˆ ํ—ค๋งธ๋‹ค.
    2. ์—ฐํ•ฉ์œผ๋กœ ๊ตฌ์„ฑ๋œ ๊ตญ๊ฐ€๋“ค์˜ ์ธ๊ตฌ ํ‰๊ท  ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์—์„œ ๊ณ ๋ฏผ์„ ํ–ˆ์—ˆ๋‹ค.
    3. ๋ชจ๋“  ์—ฐํ•ฉ์„ ๋”ฐ๋กœ ๊ตฌํ•ด์„œ ์—ฐํ•ฉ๋ผ๋ฆฌ์˜ ํ‰๊ท  ์ธ๊ตฌ ์ˆ˜๋กœ ๊ฐฑ์‹ ํ•˜๋Š” ๋ถ€๋ถ„์ด ํ•œ๋ฒˆ์— ์ด๋ฃจ์–ด์ ธ์•ผ ํ•œ๋‹ค.
    4. ํ•˜์ง€๋งŒ (3)์˜ ๋ฐฉ์‹์ด ์•„๋‹Œ ์—ฐํ•ฉ์ด ์ƒ๊ธธ๋•Œ๋งˆ๋‹ค ๋ณ€๊ฒฝํ•ด์ฃผ์–ด ์˜ˆ์ œ ๊ฒฐ๊ณผ๋„ ๋‹ค๋ฅด๊ฒŒ ๋‚˜์˜ค๋Š” ๋Œ€์ฐธ์‚ฌ๊ฐ€ ์žˆ์—ˆ๋‹ค.
    5. BFS ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘์—์„œ๋„ ์กฐ๊ฑด์ด ๊ฝค ์žˆ์–ด์„œ ๊ตฌํ˜„์ด ์กฐ๊ธˆ ๋ฌป์–ด๋‚˜์˜จ ๋ฌธ์ œ ๊ฐ™์•˜๊ณ , ํ’€๊ธฐ ์กฐ๊ธˆ ํž˜์ด ๋“ค์—ˆ๋‹ค.
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Designed by Tistory.