Algorithm Problem/Python

[python] ๋ฐฑ์ค€ - 1743. ์Œ์‹๋ฌผ ํ”ผํ•˜๊ธฐ

deo2kim 2020. 9. 7. 08:39
๋ฐ˜์‘ํ˜•

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

S1 | BFS

์ด๋ฒˆ์—๋Š” 2์ฐจ์›๋ฆฌ์ŠคํŠธ๋ฅผ ํ™œ์šฉํ•˜์ง€ ์•Š๊ณ  set()์„ ํ™œ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

 

๊ฐ๊ฐ์˜ ์ขŒํ‘œ๊ฐ€ ์ฃผ์–ด์ ธ ์žˆ์œผ๋ฏ€๋กœ ์“ฐ๋ ˆ๊ธฐ๋ฅผ ํ•˜๋‚˜ ์„ ํƒํ•ด ์ƒํ•˜์ขŒ์šฐ BFSํƒ์ƒ‰์„ ํ•œ๋‹ค.

์ฃผ๋ณ€์˜ ์“ฐ๋ ˆ๊ธฐ๋ฅผ ์„ ํƒํ•  ๋•Œ๋งˆ๋‹ค visited ์— add ํ•ด์ค€๋‹ค.

๋˜ count + 1 ์„ ํ•ด์ค˜์„œ ์“ฐ๋ ˆ๊ธฐ ๋”๋ฏธ์˜ ํฌ๊ธฐ๋ฅผ answer ์— ๋‹ด๋Š”๋‹ค.

 

๐Ÿ’จ set() ์„ ์“ฐ๋Š” ์ด์œ 
 if tmp in set() : ์ด๋ ‡๊ฒŒ tmp๊ฐ€ set()์— ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ํ™•์ธํ•  ๋•Œ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(1) ์ด๋‹ค.
ํ•˜์ง€๋งŒ if tmp in list : list์˜ ๊ฒฝ์šฐ O(n) ์ด๋‹ค.

 

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

import sys
from collections import deque


def bfs(x, y):
    q = deque()
    q.append((x, y))
    cnt = 1  # ์‹œ์ž‘ํ•œ ์“ฐ๋ ˆ๊ธฐ ํฌํ•จ
    while q:
        x, y = q.popleft()
        for k in range(4):
            nx = x + dx[k]
            ny = y + dy[k]
            if 1 <= nx < N + 1 and 1 <= ny < M + 1:
                if (nx, ny) in trashSet and (nx, ny) not in visited:
                    cnt += 1
                    q.append((nx, ny))
                    visited.add((nx, ny))
    else:
        answer.append(cnt)


if __name__ == "__main__":
    N, M, K = map(int, sys.stdin.readline().split())

    # set() ์„ ์“ฐ๋Š” ์ด์œ 
    # if tmp in set(): ์ด๋ ‡๊ฒŒ tmp๊ฐ€ set()์— ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ํ™•์ธํ•  ๋•Œ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(1)์ด๋‹ค.
    # ํ•˜์ง€๋งŒ if tmp in list: list์˜ ๊ฒฝ์šฐ O(n)์ด๋‹ค.
    trashSet = set()  # ์Œ์‹๋ฌผ ์…‹
    visited = set()  # ๋ฐฉ๋ฌธ ์ฒดํฌ

    for _ in range(K):
        r, c = map(int, sys.stdin.readline().split())
        trashSet.add((r, c))

    answer = []
    dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1]
    for trash in trashSet:
        if (trash[0], trash[1]) not in visited:  # ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋”ฐ๋ฉด
            visited.add((trash[0], trash[1]))  # ๋ฐฉ๋ฌธ ์ถ”๊ฐ€
            bfs(trash[0], trash[1])  # BFS GOGO!

    print(max(answer))

 

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

์ถœ์ฒ˜: BACKJOON ONLINE JUDGE

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

 

1743๋ฒˆ: ์Œ์‹๋ฌผ ํ”ผํ•˜๊ธฐ

์ฒซ์งธ ์ค„์— ํ†ต๋กœ์˜ ์„ธ๋กœ ๊ธธ์ด N(1 ≤ N ≤ 100)๊ณผ ๊ฐ€๋กœ ๊ธธ์ด M(1 ≤ M ≤ 100) ๊ทธ๋ฆฌ๊ณ  ์Œ์‹๋ฌผ ์“ฐ๋ ˆ๊ธฐ์˜ ๊ฐœ์ˆ˜ K(1 ≤ K ≤ 10,000)์ด ์ฃผ์–ด์ง„๋‹ค.  ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ K๊ฐœ์˜ ์ค„์— ์Œ์‹๋ฌผ์ด ๋–จ์–ด์ง„ ์ขŒํ‘œ (r, c)๊ฐ€ ์ฃผ์–ด์ง„๏ฟฝ

www.acmicpc.net

๋ฌธ์ œ

์ฝ”๋ ˆ์Šค์ฝ” ์ฝ˜๋„๋ฏธ๋‹ˆ์—„ 8์ธต์€ ํ•™์ƒ๋“ค์ด 3๋ผ์˜ ์‹์‚ฌ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ณต๊ฐ„์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ช‡๋ช‡ ๋น„์–‘์‹ฌ์ ์ธ ํ•™์ƒ๋“ค์˜ ๋งŒํ–‰์œผ๋กœ ์Œ์‹๋ฌผ์ด ํ†ต๋กœ ์ค‘๊ฐ„ ์ค‘๊ฐ„์— ๋–จ์–ด์ ธ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ์Œ์‹๋ฌผ๋“ค์€ ๊ทผ์ฒ˜์— ์žˆ๋Š” ๊ฒƒ๋ผ๋ฆฌ ๋ญ‰์น˜๊ฒŒ ๋ผ์„œ ํฐ ์Œ์‹๋ฌผ ์“ฐ๋ ˆ๊ธฐ๊ฐ€ ๋œ๋‹ค. 

์ด ๋ฌธ์ œ๋ฅผ ์ถœ์ œํ•œ ์„ ์ƒ๋‹˜์€ ๊ฐœ์ธ์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ์Œ์‹๋ฌผ์„ ์‹ค๋‚ดํ™”์— ๋ฌปํžˆ๋Š” ๊ฒƒ์„ ์ •๋ง ์ง„์ •์œผ๋กœ ์‹ซ์–ดํ•œ๋‹ค. ์ฐธ๊ณ ๋กœ ์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ•ด์•ผ ํ•  ๋‹ต์€ ์ด ๋ฌธ์ œ๋ฅผ ๋‚ธ ์กฐ๊ต๋ฅผ ๋งž์ถ”๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. 

ํ†ต๋กœ์— ๋–จ์–ด์ง„ ์Œ์‹๋ฌผ์„ ํ”ผํ•ด๊ฐ€๊ธฐ๋ž€ ์‰ฌ์šด ์ผ์ด ์•„๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์„ ์ƒ๋‹˜์€ ๋–จ์–ด์ง„ ์Œ์‹๋ฌผ ์ค‘์— ์ œ์ผ ํฐ ์Œ์‹๋ฌผ๋งŒ์€ ํ”ผํ•ด ๊ฐ€๋ ค๊ณ  ํ•œ๋‹ค. 

์„ ์ƒ๋‹˜์„ ๋„์™€ ์ œ์ผ ํฐ ์Œ์‹๋ฌผ์˜ ํฌ๊ธฐ๋ฅผ ๊ตฌํ•ด์„œ “10ra"๋ฅผ ์™ธ์น˜์ง€ ์•Š๊ฒŒ ๋„์™€์ฃผ์ž.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํ†ต๋กœ์˜ ์„ธ๋กœ ๊ธธ์ด N(1 ≤ N ≤ 100)๊ณผ ๊ฐ€๋กœ ๊ธธ์ด M(1 ≤ M ≤ 100) ๊ทธ๋ฆฌ๊ณ  ์Œ์‹๋ฌผ ์“ฐ๋ ˆ๊ธฐ์˜ ๊ฐœ์ˆ˜ K(1 ≤ K ≤ 10,000)์ด ์ฃผ์–ด์ง„๋‹ค.  ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ K๊ฐœ์˜ ์ค„์— ์Œ์‹๋ฌผ์ด ๋–จ์–ด์ง„ ์ขŒํ‘œ (r, c)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

์ขŒํ‘œ (r, c)์˜ r์€ ์œ„์—์„œ๋ถ€ํ„ฐ, c๋Š” ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ๊ฐ€ ๊ธฐ์ค€์ด๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์Œ์‹๋ฌผ ์ค‘ ๊ฐ€์žฅ ํฐ ์Œ์‹๋ฌผ์˜ ํฌ๊ธฐ๋ฅผ ์ถœ๋ ฅํ•˜๋ผ.

ํžŒํŠธ

# . . .
  . # # .
  # # . .
์œ„์™€ ๊ฐ™์ด ์Œ์‹๋ฌผ์ด ๋–จ์–ด์ ธ์žˆ๊ณ  ์ œ์ผํฐ ์Œ์‹๋ฌผ์˜ ํฌ๊ธฐ๋Š” 4๊ฐ€ ๋œ๋‹ค. (์ธ์ ‘ํ•œ ๊ฒƒ์€ ๋ถ™์–ด์„œ ํฌ๊ฒŒ ๋œ๋‹ค๊ณ  ๋‚˜์™€ ์žˆ์Œ. ๋Œ€๊ฐ์„ ์œผ๋กœ๋Š” ์Œ์‹๋ฌผ ๋ผ๋ฆฌ ๋ถ™์„์ˆ˜ ์—†๊ณ  ์ƒํ•˜์ขŒ์šฐ๋กœ๋งŒ ๋ถ™์„์ˆ˜ ์žˆ๋‹ค.)

๋ฐ˜์‘ํ˜•