Algorithm Problem/Python

[python] ๋ฐฑ์ค€ - 16234. ์ธ๊ตฌ ์ด๋™(์‚ผ์„ฑ SW ์—ญ๋Ÿ‰ ํ…Œ์ŠคํŠธ ๊ธฐ์ถœ ๋ฌธ์ œ)

deo2kim 2020. 9. 30. 08:42
๋ฐ˜์‘ํ˜•

๐Ÿค”๋ฌธ์ œ ํ•ด๊ฒฐ

  • G5 | ์‹œ๋ฎฌ๋ ˆ์ด์…˜, BFS

 

1. ์—ฐํ•ฉ์„ ์ฐพ๋Š”๋‹ค.

    ํ˜„์žฌ์œ„์น˜์™€ ์ธ์ ‘ํ•œ ์œ„์น˜์˜ ๊ฐ’์˜ ์ฐจ์ด๊ฐ€ ์กฐ๊ฑด์— ๋งž์œผ๋ฉด ์—ฐํ•ฉ๋ฆฌ์ŠคํŠธ์— ๋„ฃ์–ด์คฌ๋‹ค. (BFS)

2. ๋งŒ์•ฝ ์—ฐํ•ฉ์ด ์—†์œผ๋ฉด ๋

3. ์—ฐํ•ฉ์ด ์žˆ์œผ๋ฉด ์—ฐํ•ฉ ๋‚ด์—์„œ ์ธ๊ตฌ ์ด๋™์„ ํ•œ๋‹ค.

    ์—ฐํ•ฉ์˜ ๋ชจ๋“  ์ธ๊ตฌ์˜ ํ‰๊ท ๊ฐ’์œผ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.

4. (1,2,3)์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

    while๋ฌธ์œผ๋กœ 2๋ฒˆ์ด ๋‚˜์˜ฌ๋•Œ๊นŒ์ง€ ๋Œ๋ฆฐ๋‹ค.

 

๐Ÿ’จ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์„œ pypy๋กœ ๋Œ๋ ธ๋”๋‹ˆ  ํ†ต๊ณผ!!! ํŒŒ์ด์ฌ์€ ํ•ญ์ƒ ๋Š๋ ค์„œ ์ด์   ๊ทธ๋Ÿฌ๋ ค๋‹ˆ ํ•œ๋‹ค.

์•„๋‹ˆ๋ฉด ๋ญ”๊ฐ€ ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์ฐพ์•„๋ณด๋‹ˆ ์ธ์ ‘๋ฆฌ์ŠคํŠธ๋ฅผ ํ™œ์šฉํ•ด์„œ ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ.... ๋‚˜์ค‘์— ๋„์ „ํ•ด๋ณด๊ฒ ๋‹ค.

๐Ÿ’ป์†Œ์Šค ์ฝ”๋“œ

from _collections import deque


def move_population(union_list):
    for union in union_list:
        total = 0
        for country in union:
            x, y = country
            total += world[x][y]

        population = total // len(union)

        for country in union:
            x, y = country
            world[x][y] = population


def find_union(x, y):
    q = deque()
    q.append((x, y))
    union = []
    union.append((x, y))
    while q:
        cx, cy = q.popleft()
        for k in range(4):
            nx = cx + dx[k]
            ny = cy + dy[k]
            if 0 <= nx < N and 0 <= ny < N and (nx, ny) not in visited:
                if L <= abs(world[cx][cy] - world[nx][ny]) <= R:
                    union.append((nx, ny))
                    visited.add((nx, ny))
                    q.append((nx, ny))
    if len(union) > 1:
        union_list.append(union)


dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1]
if __name__ == '__main__':
    N, L, R = map(int, input().split())
    world = [list(map(int, input().split())) for _ in range(N)]

    answer = 0
    while True:
        union_list = []
        visited = set()
        for i in range(N):
            for j in range(N):
                if (i, j) not in visited:
                    visited.add((i, j))
                    find_union(i, j)
        if union_list:
            move_population(union_list)
            answer += 1
        else:
            break

    print(answer)

 

๐Ÿ“•๋ฌธ์ œ ํ™•์ธ

์ถœ์ฒ˜: BACKJOON ONLINE JUDGE

๋งํฌ: https://www.acmicpc.net/problem/16234

 

16234๋ฒˆ: ์ธ๊ตฌ ์ด๋™

N×Nํฌ๊ธฐ์˜ ๋•…์ด ์žˆ๊ณ , ๋•…์€ 1×1๊ฐœ์˜ ์นธ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ๋•…์—๋Š” ๋‚˜๋ผ๊ฐ€ ํ•˜๋‚˜์”ฉ ์กด์žฌํ•˜๋ฉฐ, rํ–‰ c์—ด์— ์žˆ๋Š” ๋‚˜๋ผ์—๋Š” A[r][c]๋ช…์ด ์‚ด๊ณ  ์žˆ๋‹ค. ์ธ์ ‘ํ•œ ๋‚˜๋ผ ์‚ฌ์ด์—๋Š” ๊ตญ๊ฒฝ์„ ์ด ์กด์žฌํ•œ๋‹ค. ๋ชจ๏ฟฝ๏ฟฝ

www.acmicpc.net


๋ฌธ์ œ

N×Nํฌ๊ธฐ์˜ ๋•…์ด ์žˆ๊ณ , ๋•…์€ 1×1๊ฐœ์˜ ์นธ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ๋•…์—๋Š” ๋‚˜๋ผ๊ฐ€ ํ•˜๋‚˜์”ฉ ์กด์žฌํ•˜๋ฉฐ, rํ–‰ c์—ด์— ์žˆ๋Š” ๋‚˜๋ผ์—๋Š” A[r][c]๋ช…์ด ์‚ด๊ณ  ์žˆ๋‹ค. ์ธ์ ‘ํ•œ ๋‚˜๋ผ ์‚ฌ์ด์—๋Š” ๊ตญ๊ฒฝ์„ ์ด ์กด์žฌํ•œ๋‹ค. ๋ชจ๋“  ๋‚˜๋ผ๋Š” 1×1 ํฌ๊ธฐ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋ชจ๋“  ๊ตญ๊ฒฝ์„ ์€ ์ •์‚ฌ๊ฐํ˜• ํ˜•ํƒœ์ด๋‹ค.

์˜ค๋Š˜๋ถ€ํ„ฐ ์ธ๊ตฌ ์ด๋™์ด ์‹œ์ž‘๋˜๋Š” ๋‚ ์ด๋‹ค.

์ธ๊ตฌ ์ด๋™์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰๋˜๊ณ , ๋” ์ด์ƒ ์•„๋ž˜ ๋ฐฉ๋ฒ•์— ์˜ํ•ด ์ธ๊ตฌ ์ด๋™์ด ์—†์„ ๋•Œ๊นŒ์ง€ ์ง€์†๋œ๋‹ค.

  • ๊ตญ๊ฒฝ์„ ์„ ๊ณต์œ ํ•˜๋Š” ๋‘ ๋‚˜๋ผ์˜ ์ธ๊ตฌ ์ฐจ์ด๊ฐ€ L๋ช… ์ด์ƒ, R๋ช… ์ดํ•˜๋ผ๋ฉด, ๋‘ ๋‚˜๋ผ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ๊ตญ๊ฒฝ์„ ์„ ์˜ค๋Š˜ ํ•˜๋ฃจ๋™์•ˆ ์—ฐ๋‹ค.
  • ์œ„์˜ ์กฐ๊ฑด์— ์˜ํ•ด ์—ด์–ด์•ผํ•˜๋Š” ๊ตญ๊ฒฝ์„ ์ด ๋ชจ๋‘ ์—ด๋ ธ๋‹ค๋ฉด, ์ธ๊ตฌ ์ด๋™์„ ์‹œ์ž‘ํ•œ๋‹ค.
  • ๊ตญ๊ฒฝ์„ ์ด ์—ด๋ ค์žˆ์–ด ์ธ์ ‘ํ•œ ์นธ๋งŒ์„ ์ด์šฉํ•ด ์ด๋™ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด, ๊ทธ ๋‚˜๋ผ๋ฅผ ์˜ค๋Š˜ ํ•˜๋ฃจ ๋™์•ˆ์€ ์—ฐํ•ฉ์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • ์—ฐํ•ฉ์„ ์ด๋ฃจ๊ณ  ์žˆ๋Š” ๊ฐ ์นธ์˜ ์ธ๊ตฌ์ˆ˜๋Š” (์—ฐํ•ฉ์˜ ์ธ๊ตฌ์ˆ˜) / (์—ฐํ•ฉ์„ ์ด๋ฃจ๊ณ  ์žˆ๋Š” ์นธ์˜ ๊ฐœ์ˆ˜)๊ฐ€ ๋œ๋‹ค. ํŽธ์˜์ƒ ์†Œ์ˆ˜์ ์€ ๋ฒ„๋ฆฐ๋‹ค.
  • ์—ฐํ•ฉ์„ ํ•ด์ฒดํ•˜๊ณ , ๋ชจ๋“  ๊ตญ๊ฒฝ์„ ์„ ๋‹ซ๋Š”๋‹ค.

๊ฐ ๋‚˜๋ผ์˜ ์ธ๊ตฌ์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ธ๊ตฌ ์ด๋™์ด ๋ช‡ ๋ฒˆ ๋ฐœ์ƒํ•˜๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N, L, R์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 50, 1 ≤ L ≤ R ≤ 100)

๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๊ฐ ๋‚˜๋ผ์˜ ์ธ๊ตฌ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. rํ–‰ c์—ด์— ์ฃผ์–ด์ง€๋Š” ์ •์ˆ˜๋Š” A[r][c]์˜ ๊ฐ’์ด๋‹ค. (0 ≤ A[r][c] ≤ 100)

์ธ๊ตฌ ์ด๋™์ด ๋ฐœ์ƒํ•˜๋Š” ํšŸ์ˆ˜๊ฐ€ 2,000๋ฒˆ ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž…๋ ฅ๋งŒ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ธ๊ตฌ ์ด๋™์ด ๋ช‡ ๋ฒˆ ๋ฐœ์ƒํ•˜๋Š”์ง€ ์ฒซ์งธ ์ค„์— ์ถœ๋ ฅํ•œ๋‹ค.

 

๋ฐ˜์‘ํ˜•