[๋ฐฑ์ค€] 2583 ์˜์—ญ ๊ตฌํ•˜๊ธฐ(python ํŒŒ์ด์ฌ)

2023. 3. 16. 18:38ยท๐Ÿงฉ Problem Solving/[๋ฐฑ์ค€]

https://www.acmicpc.net/problem/2583

 

2583๋ฒˆ: ์˜์—ญ ๊ตฌํ•˜๊ธฐ

์ฒซ์งธ ์ค„์— M๊ณผ N, ๊ทธ๋ฆฌ๊ณ  K๊ฐ€ ๋นˆ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฐจ๋ก€๋กœ ์ฃผ์–ด์ง„๋‹ค. M, N, K๋Š” ๋ชจ๋‘ 100 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ K๊ฐœ์˜ ์ค„์—๋Š” ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ง์‚ฌ๊ฐํ˜•์˜ ์™ผ์ชฝ ์•„๋ž˜ ๊ผญ์ง“์ ์˜ x, y์ขŒํ‘œ๊ฐ’๊ณผ ์˜ค

www.acmicpc.net


๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ํ•˜๋Š” ๋ฌธ์ œ. ๋น„์Šทํ•œ ์œ ํ˜•์˜ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ดค์œผ๋ฉด ์‰ฌ์šด ๋ฌธ์ œ.


์•„์ด๋””์–ด

1. ๋ชจ๋ˆˆ์ข…์ด 

  • M*N ํฌ๊ธฐ์˜ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋กœ ๋ชจ๋ˆˆ์ข…์ด๋ฅผ ๋‚˜ํƒ€๋ƒˆ๋‹ค.
  • ์ฃผ์–ด์ง„ ์ง์‚ฌ๊ฐํ˜• ์ขŒํ‘œ์— ๋”ฐ๋ผ ์ง์‚ฌ๊ฐํ˜•์„ ํ‘œํ˜„ํ•ด์ค€๋‹ค. 1์€ ์ง์‚ฌ๊ฐํ˜•, 0์€ ๋นˆ๊ณต๊ฐ„์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ๋ฌธ์ œ์—์„œ๋Š” ์ขŒํ‘œ๊ฐ€ ์™ผ์ชฝ ์•„๋ž˜๊ฐ€ ์›์ (0, 0)์ด์ง€๋งŒ, ๋ฆฌ์ŠคํŠธ๋Š” ์™ผ์ชฝ ์œ„๊ฐ€ ์›์ ์ด๋‹ค.
  • ์–ด์ฐจํ”ผ ๊ฐ€๋กœ์ถ•์— ๋Œ€ํ•ด ๋Œ€์นญ์ด๋ฏ€๋กœ ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•œ ๊ฐ’์„ ๊ตฌํ•˜๋Š”๋ฐ ๋ฌธ์ œ์—†๋‹ค๊ณ  ํŒ๋‹จํ•ด ๊ทธ๋Œ€๋กœ ํ’€์—ˆ๋‹ค.

2. ๋นˆ๊ณต๊ฐ„ ๊ฐœ์ˆ˜, ๋„“์ด ๊ตฌํ•˜๊ธฐ

  • ๋ชจ๋“  ์นธ์— ๋Œ€ํ•ด dfs๋ฅผ ํ•ด๋ณธ๋‹ค.
  • ์„ ํƒํ•œ ์นธ์ด 0์ด๋ผ๋ฉด ์ฃผ์œ„๋ฅผ ํƒ์ƒ‰ํ•ด ๋„“์ด๋ฅผ ๊ตฌํ•˜๊ณ , ๊ฐœ์ˆ˜์— +1 ํ•ด์ค€๋‹ค. 
  • ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ์นธ์€ 1๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ค‘๋ณต์„ ๋ฐฉ์ง€ํ•ด์ค€๋‹ค.

์ „์ฒด ์ฝ”๋“œ

import sys
sys.setrecursionlimit(10**6)
dx = [0, 0, -1, 1]
dy = [1, -1, 0, 0]

def dfs(x, y):
    global volume
    if x < 0 or x >= M or y < 0 or y >= N:
        return 0

    if paper[x][y] == 0:
        volume += 1
        paper[x][y] = 1
        for i in range(4):
            nx, ny = x + dx[i], y + dy[i]
            dfs(nx, ny)
        return volume
    return 0

M, N, K = map(int, input().split())
paper = [[0] * N for _ in range(M)]

for _ in range(K):
    ax, ay, bx, by = map(int, input().split())
    for i in range(ax, bx):
        for j in range(ay, by):
            paper[j][i] = 1

count = 0
volume_list = []

for i in range(M):
    for j in range(N):
        volume = 0
        if dfs(i, j) >= 1:
            count += 1
            volume_list.append(volume)

volume_list.sort()

print(count)
print(" ".join(map(str, volume_list)))

์ฝ”๋“œ ์„ค๋ช…

1. ๋ชจ๋ˆˆ ์ข…์ด

M, N, K = map(int, input().split())
paper = [[0] * N for _ in range(M)]

for _ in range(K):
    ax, ay, bx, by = map(int, input().split())
    for i in range(ax, bx):
        for j in range(ay, by):
            paper[j][i] = 1

์œ„์—์„œ ์„ค๋ช…ํ•œ ๋ชจ๋ˆˆ์ข…์ด๋ฅผ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •์ด๋‹ค.

M * N ํฌ๊ธฐ์˜ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋ฅผ ์ดˆ๊ธฐํ™” ํ•ด์ฃผ๊ณ , ์ง์‚ฌ๊ฐํ˜•์€ 1๋กœ ํ‘œํ˜„ํ•ด์ค€๋‹ค. 

๊ทธ๋ฆผ๊ณผ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋Œ€์นญ์ด์—ฌ๋„ ๊ฐ’์„ ๊ตฌํ•˜๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค.

 

์œ„์ชฝ์€ ๋ฌธ์ œ์— ์žˆ๋Š” ๊ทธ๋ฆผ, ์•„๋ž˜์ชฝ์€ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ–ˆ์„๋•Œ ๋‚˜์˜ค๋Š” ๋ฆฌ์ŠคํŠธ๋‹ค.

2. dfs

for i in range(M):
    for j in range(N):
        volume = 0
        if dfs(i, j) >= 1:
            count += 1
            volume_list.append(volume)

์ด์ œ ๊ฐ ํ•œ์นธ๋งˆ๋‹ค dfs๋ฅผ ํ•ด๋ณธ๋‹ค. dfs์˜ ๋ฆฌํ„ด๊ฐ’์€ ๋นˆ๊ณต๊ฐ„์˜ ๋„“์ด๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

๋”ฐ๋ผ์„œ 1์ด์ƒ์ด๋ฉด ๋นˆ๊ณต๊ฐ„์ด ์กด์žฌํ•œ๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ count๊ฐ’์„ ์ฆ๊ฐ€์‹œ์ผœ์ค€๋‹ค.

dfsํ•จ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

def dfs(x, y):
    global volume
    if x < 0 or x >= M or y < 0 or y >= N:
        return 0

    if paper[x][y] == 0:
        volume += 1
        paper[x][y] = 1
        for i in range(4):
            nx, ny = x + dx[i], y + dy[i]
            dfs(nx, ny)
        return volume
    return 0

๋ฐฉ๋ฌธํ•œ ์นธ์˜ ๊ฐ’์ด 0์ด๋ผ๋ฉด ์ƒํ•˜์ขŒ์šฐ์— ์žˆ๋Š” ์ขŒํ‘œ๋ฅผ ๋ฐฉ๋ฌธํ•œ๋‹ค.

๋ชจ๋“  ํƒ์ƒ‰์ด ๋๋‚˜๋ฉด ๋„“์ด(volume)๋ฅผ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿงฉ Problem Solving > [๋ฐฑ์ค€]' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฐฑ์ค€] 1759 ์•”ํ˜ธ๋งŒ๋“ค๊ธฐ (python ํŒŒ์ด์ฌ)  (0) 2023.03.30
[๋ฐฑ์ค€] 11559 puyopuyo (ํŒŒ์ด์ฌ python)  (0) 2023.03.26
[๋ฐฑ์ค€] 14938 ์„œ๊ฐ•๊ทธ๋ผ์šด๋“œ (python ํŒŒ์ด์ฌ)  (0) 2022.09.10
[๋ฐฑ์ค€]11660 ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 5 (python ํŒŒ์ด์ฌ)  (0) 2022.08.19
[๋ฐฑ์ค€] 10942 ํŒฐ๋ฆฐ๋“œ๋กฌ? (python ํŒŒ์ด์ฌ)  (0) 2022.08.17
'๐Ÿงฉ Problem Solving/[๋ฐฑ์ค€]' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [๋ฐฑ์ค€] 1759 ์•”ํ˜ธ๋งŒ๋“ค๊ธฐ (python ํŒŒ์ด์ฌ)
  • [๋ฐฑ์ค€] 11559 puyopuyo (ํŒŒ์ด์ฌ python)
  • [๋ฐฑ์ค€] 14938 ์„œ๊ฐ•๊ทธ๋ผ์šด๋“œ (python ํŒŒ์ด์ฌ)
  • [๋ฐฑ์ค€]11660 ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 5 (python ํŒŒ์ด์ฌ)
์ œ๋ด‰์•„
์ œ๋ด‰์•„
  • ์ œ๋ด‰์•„
    Overthinking
    ์ œ๋ด‰์•„
    fake it till you make it.
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (104)
      • ๐Ÿงฉ Problem Solving (83)
        • [๋ฐฑ์ค€] (74)
        • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] (7)
        • [SW Expert Academy] (1)
        • [์•Œ๊ณ ๋ฆฌ์ฆ˜ for PS] (1)
      • ๐Ÿ“ฆ Data Structure (2)
      • ๐Ÿ“œ Language (14)
        • [python] (14)
      • ๐Ÿ–ค Git (1)
      • ๐ŸŒ† ์ผ์ƒ (2)
        • ๐Ÿ’ฌ ๋ฒฝ๋ณด๊ณ  ๋งํ•˜๊ธฐ (2)
      • ๐Ÿ—„๏ธ ๊ธฐํƒ€ (2)
      • ๐Ÿ”ต css (0)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ํŒŒ์ด์ฌ
    Python
    ์œ„์ƒ์ •๋ ฌ
    ๋ฐฑ์ค€
    DFS
    ๋ƒ…์ƒ‰
    ๋ˆ„์ ํ•ฉ
    ์žฌ๊ท€
    SWEA
    ํŒฐ๋ฆฐ๋“œ๋กฌ
    ๊ทธ๋ฆฌ๋””
    ํˆฌํฌ์ธํ„ฐ
    DP
    ๋ธŒ๋ฃจํŠธํฌ์Šค
    ๋‹ค์ต์ŠคํŠธ๋ผ
    ์ •์ฒ˜๊ธฐ
    Bruteforce
    ๋ฐฑํŠธ๋ž˜ํ‚น
    ๋ถ€๋ถ„ํ•ฉ
    slicing
    ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ
    ์Šคํƒ
    ๊ตฌํ˜„
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    ๋ถ„ํ•  ์ •๋ณต
    BFS
    imos
    boj
    ํ”Œ๋กœ์ด๋“œ์›Œ์…œ
    ๋ฐ๋ธŒ์ฝ”์Šค
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
์ œ๋ด‰์•„
[๋ฐฑ์ค€] 2583 ์˜์—ญ ๊ตฌํ•˜๊ธฐ(python ํŒŒ์ด์ฌ)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”