목차

피리 부는 사나이

ps
링크acmicpc.net/…
출처BOJ
문제 번호16724
문제명피리 부는 사나이
레벨골드 2
분류

Disjoint set

시간복잡도O(nm)
인풋사이즈n<=1000, m<=1000
사용한 언어Python
제출기록53140KB / 1308ms
최고기록680ms
해결날짜2021/11/18

풀이

코드

"""Solution code for "BOJ 16724. 피리 부는 사나이".

- Problem link: https://www.acmicpc.net/problem/16724
- Solution link: http://www.teferi.net/ps/problems/boj/16724

Tags: [Disjoint Set]
"""

import itertools
import sys
from teflib import disjointset


def main():
    N, M = [int(x) for x in sys.stdin.readline().split()]
    grid = [sys.stdin.readline().rstrip() for _ in range(N)]

    delta = {'U': -M, 'D': M, 'L': -1, 'R': 1}
    group_count = N * M
    dsu = disjointset.DisjointSet(group_count)
    counter = itertools.count()
    for row in grid:
        for direction in row:
            cur_cell = next(counter)
            adj_cell = cur_cell + delta[direction]
            try:
                dsu.union(cur_cell, adj_cell, should_raise=True)
            except ValueError:
                pass
            else:
                group_count -= 1

    print(group_count)


if __name__ == '__main__':
    main()