{"componentChunkName":"component---src-templates-blog-post-js","path":"/Algorithm/BOJ-10216-Python/","result":{"data":{"site":{"siteMetadata":{"title":"hyesungoh","author":"hyesungoh","siteUrl":"https://www.hyesungoh.xyz","comment":{"disqusShortName":"","utterances":"hyesungoh/blog"},"sponsor":{"buyMeACoffeeId":""}}},"markdownRemark":{"id":"4fc1b864-bb47-5de3-b6cb-fda0933576d2","excerpt":"최대 5000의 값을 갖는 좌표 y, x와 반경 거리를 나타내는 r이 입력된다. n개의 좌표가 입력될 때 연결된 것을 계산하여 몇 개의 구역이 있는 지 출력하는 문제. 첫 번째 풀이는 5000의 크기를 갖는 2차원 배열을 이용하여 dfs를 사용해 풀었으나 메모리초과와 시간초과 결과를 받게 되었다. 입력되는 점과 방문확인을 위한 배열을 한 개로 사용하여도 같은 결과를 받았다. 두 번째 풀이는 유니온 파인드 방식을 이용하여 풀었다. 행렬, 리스트를 사용하지 않으며 n개의 배열을 만들어 x의 차이, y…","html":"<p>최대 5000의 값을 갖는 좌표 y, x와 반경 거리를 나타내는 r이 입력된다. n개의 좌표가 입력될 때 연결된 것을 계산하여 몇 개의 구역이 있는 지 출력하는 문제. 첫 번째 풀이는 5000의 크기를 갖는 2차원 배열을 이용하여 dfs를 사용해 풀었으나 메모리초과와 시간초과 결과를 받게 되었다. 입력되는 점과 방문확인을 위한 배열을 한 개로 사용하여도 같은 결과를 받았다. 두 번째 풀이는 유니온 파인드 방식을 이용하여 풀었다. 행렬, 리스트를 사용하지 않으며 n개의 배열을 만들어 x의 차이, y의 차이를 각각 곱한 값을 더한 값과 두 좌표의 r을 곱한 값을 비교하여 r을 곱한 값이 클 시 연결돼 있음을 판단하여 합집합 연산을 하여 풀었다.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># import sys</span>\n<span class=\"token comment\"># from collections import deque</span>\n<span class=\"token comment\"># input = sys.stdin.readline</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\"># dire = [[0,1],[0,-1],[1,0],[-1,0]]</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\"># def check(Y, X, r):</span>\n<span class=\"token comment\">#     for y in range(Y-r, Y+r):</span>\n<span class=\"token comment\">#         for x in range(X-r, X+r):</span>\n<span class=\"token comment\">#             if 0 &lt;= y &lt;= max_pos and 0 &lt;= x &lt;= max_pos:</span>\n<span class=\"token comment\">#                 graph[y][x] = 1</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\"># def dfs(Y, X, cnt):</span>\n<span class=\"token comment\">#     q = deque()</span>\n<span class=\"token comment\">#     q.append([Y, X])</span>\n<span class=\"token comment\">#     graph[Y][X] = cnt</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\">#     while q:</span>\n<span class=\"token comment\">#         y, x = q.popleft()</span>\n<span class=\"token comment\">#         for ty, tx in dire:</span>\n<span class=\"token comment\">#             ny, nx = ty + y, tx + x</span>\n<span class=\"token comment\">#             if 0 &lt;= ny &lt;= max_pos and 0 &lt;= nx &lt;= max_pos:</span>\n<span class=\"token comment\">#                 if graph[ny][nx] == 1:</span>\n<span class=\"token comment\">#                     graph[ny][nx] = cnt</span>\n<span class=\"token comment\">#                     q.append([ny, nx])</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\"># for _ in range(int(input())):</span>\n<span class=\"token comment\">#     N = int(input())</span>\n<span class=\"token comment\">#     check_list = []</span>\n<span class=\"token comment\">#     max_pos = 0</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\">#     for _ in range(N):</span>\n<span class=\"token comment\">#         y, x, r = map(int, input().split())</span>\n<span class=\"token comment\">#         check_list.append([y, x, r])</span>\n<span class=\"token comment\">#         max_pos = max(max_pos, y, x)</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\">#     graph = [[-1 for _ in range(max_pos+1)] for _ in range(max_pos+1)]</span>\n<span class=\"token comment\">#     # visit = [[0 for _ in range(max_pos+1)] for _ in range(max_pos+1)]</span>\n<span class=\"token comment\">#     for y, x, r in check_list:</span>\n<span class=\"token comment\">#         check(y, x, r)</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\">#     cnt = 1</span>\n<span class=\"token comment\">#     for y in range(max_pos):</span>\n<span class=\"token comment\">#         for x in range(max_pos):</span>\n<span class=\"token comment\">#             if graph[y][x] == 1:</span>\n<span class=\"token comment\">#                 cnt += 1</span>\n<span class=\"token comment\">#                 dfs(y, x, cnt)</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\">#     print(cnt-1)</span>\n\n\n<span class=\"token keyword\">import</span> sys\n<span class=\"token builtin\">input</span> <span class=\"token operator\">=</span> sys<span class=\"token punctuation\">.</span>stdin<span class=\"token punctuation\">.</span>readline\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">union</span><span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">,</span> b<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    parent_a <span class=\"token operator\">=</span> find<span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">)</span>\n    parent_b <span class=\"token operator\">=</span> find<span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">)</span>\n\n    <span class=\"token keyword\">if</span> parent_a <span class=\"token operator\">!=</span> parent_b<span class=\"token punctuation\">:</span>\n        parent<span class=\"token punctuation\">[</span>parent_b<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> parent_a\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">find</span><span class=\"token punctuation\">(</span>node<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">if</span> parent<span class=\"token punctuation\">[</span>node<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> node<span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">return</span> node\n\n    p <span class=\"token operator\">=</span> find<span class=\"token punctuation\">(</span>parent<span class=\"token punctuation\">[</span>node<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n    parent<span class=\"token punctuation\">[</span>node<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> p\n    <span class=\"token keyword\">return</span> p\n\n<span class=\"token keyword\">for</span> _ <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    n <span class=\"token operator\">=</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n    parent <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>i <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\n    ypos <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">0</span> <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\n    xpos <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">0</span> <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\n    radius <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">0</span> <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\n\n    <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        y<span class=\"token punctuation\">,</span> x<span class=\"token punctuation\">,</span> r <span class=\"token operator\">=</span> <span class=\"token builtin\">map</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">,</span> <span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        ypos<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> y\n        xpos<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> x\n        radius<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> r\n\n    ans <span class=\"token operator\">=</span> n\n    <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">for</span> j <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>i<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            ydif <span class=\"token operator\">=</span> ypos<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">-</span> ypos<span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span>\n            xdif <span class=\"token operator\">=</span> xpos<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">-</span> xpos<span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span>\n            r <span class=\"token operator\">=</span> radius<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">+</span> radius<span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span>\n\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>ydif<span class=\"token operator\">*</span>ydif <span class=\"token operator\">+</span> xdif<span class=\"token operator\">*</span>xdif<span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;=</span> <span class=\"token punctuation\">(</span>r<span class=\"token operator\">*</span>r<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n                <span class=\"token keyword\">if</span> find<span class=\"token punctuation\">(</span>i<span class=\"token punctuation\">)</span> <span class=\"token operator\">!=</span> find<span class=\"token punctuation\">(</span>j<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n                    union<span class=\"token punctuation\">(</span>i<span class=\"token punctuation\">,</span> j<span class=\"token punctuation\">)</span>\n                    ans <span class=\"token operator\">-=</span> <span class=\"token number\">1</span>\n\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>ans<span class=\"token punctuation\">)</span></code></pre></div>","frontmatter":{"title":"BOJ-10216 - Python","date":"February 13, 2021"}}},"pageContext":{"slug":"/Algorithm/BOJ-10216-Python/","previous":{"fields":{"slug":"/Project/likeamazinglion_refactoring_log/"},"frontmatter":{"title":"[Like Amazing Lion] Refactoring Log","category":"Project","draft":false}},"next":{"fields":{"slug":"/Algorithm/BOJ-5585-Python/"},"frontmatter":{"title":"BOJ-5585 - Python","category":"Algorithm","draft":false}}}},"staticQueryHashes":["3128451518","3290666882"]}