[Leetcode] 947. Most Stones Removed with Same Row or Column

http://mandardave.com/tag/slideshow/mandar.dave1981 문제: https://leetcode.com/problems/most-stones-removed-with-same-row-or-column/

http://lksquaredphoto.com/newborn-documentary-in-long-beach/ 이 문제는 해석하면 행, 열이 겹치는 경우 각 점을 지울 수있다. 그려면 가장 많이 지울 수 있는 횟수는 몇번인지 알아내는 문제이다. connected component를 구하고
“connected component 개수 * (connected component의 크기 -1)” 가 우리가 구하는 값이다.

http://www.spazisonori.com/3141-dtit40138-novara-incontri-sesso.html 그래프 DFS 탐색으로 connected component를 구하여 풀 수 있지만, disjoint set으로 문제를 풀 수 있다. 같은 행이나 같은 열이 등장하면 두 점을 하나로 합치도록 한다. 나는 다음과 같이 시도를 했다.

https://www.pavimentoantitrauma.it/1481-dtit15344-donna-cerca-uomo-chiavari.html class Solution: def removeStones(self, stones: List[List[int]]) -> int: set_list = [] set_dict = {} for index, (r, c) in enumerate(stones): row_key = "r"+str(r) col_key = "c"+str(c) if row_key not in set_dict and col_key not in set_dict: #row, col 둘다 기존에 없는 경우 new_set = set() set_dict[col_key] = set_dict[row_key] = new_set set_dict[row_key].add(index) set_list.append(new_set) elif row_key in set_dict and col_key not in set_dict: # row만 기존에 있는 경우 -> 기존 집합에 추가 set_dict[row_key].add(index) set_dict[col_key] = set_dict[row_key] elif col_key in set_dict and row_key not in set_dict: # col만 기존에 있는 경우 -> 기존 집합에 추가 set_dict[col_key].add(index) set_dict[row_key] = set_dict[col_key] else: row_set = set_dict[row_key] col_set = set_dict[col_key] if row_set != col_set: row_set.update(col_set) row_set.add(index) for i in col_set: set_dict["r{}".format(stones[i][0])] = row_set set_dict["c{}".format(stones[i][1])] = row_set col_set.clear() else: row_set.add(index) ret = 0 for set_item in set_list: if len(set_item) > 0: ret += len(set_item) - 1 return ret

결과

Runtime: 124 ms, faster than 40.43% of Python3 online submissions forMost Stones Removed with Same Row or Column. Memory Usage: 13.7 MB, less than 31.94% of Python3 online submissions for Most Stones Removed with Same Row or Column.

속도는 그다지 빠르지 않게 나왔다.

리트코드 Solution에는 좀더 효율적으로 작성이 되어있고 코드 길이도 짧다.

댓글 남기기