{"componentChunkName":"component---src-templates-blog-post-js","path":"/Problem-Solving/2019-12-22-1002번-터렛/","result":{"data":{"site":{"siteMetadata":{"title":"Hun's Footsteps 🥷","author":"전여훈","siteUrl":"https://jeonyeohun.netlify.app","comment":{"disqusShortName":"","utterances":"jeonyeohun/jeonyeohun.github.io"},"sponsor":{"buyMeACoffeeId":"jeonyeohun"}}},"markdownRemark":{"id":"597926cd-730e-52a8-87ed-96e09b0d518d","excerpt":"1002번: 터렛 접근 방법: 두 터렛의 공격범위가 겹치는 점을 구하면 되는 문제인 것 같다. 원의 교점에 대한 내용을 다 잊어버려서 구글링을 통해서 규칙을 찾아보았다. 규칙: r1, r2 가 두 원의 반지름이고 d가 두원의 중심 사이의 거리를 의미할 때, 두 원이 만나지 않는 경우 r1 + r2 < d r1 - r2 > d d = 0 두 원이 한 점에서 만나는 경우 r1 + r2 = d r1 - r2 = d 두 원이 두 점에서 만나는 경우 r1 - r2 < d < r1 + r…","html":"<h3 id=\"1002번-터렛\" style=\"position:relative;\"><a href=\"#1002%EB%B2%88-%ED%84%B0%EB%A0%9B\" aria-label=\"1002번 터렛 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><a href=\"https://www.acmicpc.net/problem/1002\">1002번: 터렛</a></h3>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">조규현과 백승환은 터렛에 근무하는 직원이다. 하지만 워낙 존재감이 없어서 인구수는 차지하지 않는다. 다음은 조규현과 백승환의 사진이다.\n이석원은 조규현과 백승환에게 상대편 마린(류재명)의 위치를 계산하라는 명령을 내렸다. 조규현과 백승환은 각각 자신의 터렛 위치에서 현재 적까지의 거리를 계산했다.\n\n조규현의 좌표 (x1, y1)와 백승환의 좌표 (x2, y2)가 주어지고, 조규현이 계산한 류재명과의 거리 r1과 백승환이 계산한 류재명과의 거리 r2가 주어졌을 때, 류재명이 있을 수 있는 좌표의 수를 출력하는 프로그램을 작성하시오.</code></pre></div>\n<h3 id=\"접근-방법\" style=\"position:relative;\"><a href=\"#%EC%A0%91%EA%B7%BC-%EB%B0%A9%EB%B2%95\" aria-label=\"접근 방법 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>접근 방법:</h3>\n<ul>\n<li>두 터렛의 공격범위가 겹치는 점을 구하면 되는 문제인 것 같다. 원의 교점에 대한 내용을 다 잊어버려서 구글링을 통해서 규칙을 찾아보았다.</li>\n<li>\n<p>규칙: r1, r2 가 두 원의 반지름이고 d가 두원의 중심 사이의 거리를 의미할 때,</p>\n<ul>\n<li>두 원이 만나지 않는 경우</li>\n<li>r1 + r2 &#x3C; d</li>\n<li>r1 - r2 > d</li>\n<li>d = 0</li>\n<li>두 원이 한 점에서 만나는 경우</li>\n<li>r1 + r2 = d</li>\n<li>r1 - r2 = d</li>\n<li>두 원이 두 점에서 만나는 경우</li>\n<li>r1 - r2 &#x3C; d &#x3C; r1 + r2</li>\n<li>그리고 두 원이 일치하는 경우는 중심점 좌표가 같으면서 반지름이 같은 경우이다.</li>\n</ul>\n</li>\n</ul>\n<p>이 규칙을 코드로 잘 풀어내면 해결 할 수 있을 것 같다.</p>\n<h3 id=\"통과-코드\" style=\"position:relative;\"><a href=\"#%ED%86%B5%EA%B3%BC-%EC%BD%94%EB%93%9C\" aria-label=\"통과 코드 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>통과 코드:</h3>\n<div class=\"gatsby-highlight\" data-language=\"cpp\"><pre class=\"language-cpp\"><code class=\"language-cpp\"><span class=\"token macro property\"><span class=\"token directive-hash\">#</span><span class=\"token directive keyword\">include</span> <span class=\"token string\">&lt;iostream></span></span>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#</span><span class=\"token directive keyword\">include</span> <span class=\"token string\">&lt;cmath></span></span>\n\n<span class=\"token keyword\">using</span> <span class=\"token keyword\">namespace</span> std<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">int</span> <span class=\"token function\">isIntersect</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> r1<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> r2<span class=\"token punctuation\">,</span> <span class=\"token keyword\">double</span> d<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">int</span> <span class=\"token function\">main</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> x1<span class=\"token punctuation\">,</span> x2<span class=\"token punctuation\">,</span> y1<span class=\"token punctuation\">,</span> y2<span class=\"token punctuation\">,</span> r1<span class=\"token punctuation\">,</span> r2<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> t <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n\n    cin <span class=\"token operator\">>></span> t<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">while</span><span class=\"token punctuation\">(</span>t<span class=\"token operator\">--</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        cin <span class=\"token operator\">>></span> x1 <span class=\"token operator\">>></span> y1 <span class=\"token operator\">>></span> r1 <span class=\"token operator\">>></span> x2 <span class=\"token operator\">>></span> y2 <span class=\"token operator\">>></span> r2<span class=\"token punctuation\">;</span> <span class=\"token comment\">// 입력받기</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>x1 <span class=\"token operator\">==</span> x2 <span class=\"token operator\">&amp;&amp;</span> y1 <span class=\"token operator\">==</span> y2 <span class=\"token operator\">&amp;&amp;</span> r1 <span class=\"token operator\">==</span> r2<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> <span class=\"token comment\">// 두 점이 같은 좌표이고 반지름도 같다면 동일한 원. -1 을 출력하고 끝내기</span>\n            cout <span class=\"token operator\">&lt;&lt;</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span> <span class=\"token operator\">&lt;&lt;</span> endl<span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">continue</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n        <span class=\"token keyword\">double</span> d <span class=\"token operator\">=</span> <span class=\"token function\">sqrt</span><span class=\"token punctuation\">(</span><span class=\"token function\">pow</span><span class=\"token punctuation\">(</span>x2<span class=\"token operator\">-</span>x1<span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token function\">pow</span><span class=\"token punctuation\">(</span>y2<span class=\"token operator\">-</span>y1<span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 두 점 사이의 거리 구하기</span>\n        cout <span class=\"token operator\">&lt;&lt;</span> <span class=\"token function\">isIntersect</span><span class=\"token punctuation\">(</span>r1<span class=\"token punctuation\">,</span> r2<span class=\"token punctuation\">,</span> d<span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;&lt;</span> endl<span class=\"token punctuation\">;</span> <span class=\"token comment\">// 교차점 개수 판정함수 호출 및 출력</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">return</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">int</span> <span class=\"token function\">isIntersect</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> r1<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> r2<span class=\"token punctuation\">,</span> <span class=\"token keyword\">double</span> d<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>r1 <span class=\"token operator\">+</span> r2 <span class=\"token operator\">&lt;</span> d <span class=\"token operator\">||</span> <span class=\"token function\">abs</span><span class=\"token punctuation\">(</span>r1 <span class=\"token operator\">-</span> r2<span class=\"token punctuation\">)</span> <span class=\"token operator\">></span> d <span class=\"token operator\">||</span> d <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">return</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 두 원이 만나지 않을 때</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>r1 <span class=\"token operator\">+</span> r2 <span class=\"token operator\">==</span> d <span class=\"token operator\">||</span> <span class=\"token function\">abs</span><span class=\"token punctuation\">(</span>r1 <span class=\"token operator\">-</span> r2<span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> d<span class=\"token punctuation\">)</span> <span class=\"token keyword\">return</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 두 원이 만나는 점이 하나일 때</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token function\">abs</span><span class=\"token punctuation\">(</span>r1 <span class=\"token operator\">-</span> r2<span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;</span> d <span class=\"token operator\">&amp;&amp;</span> r1 <span class=\"token operator\">+</span> r2 <span class=\"token operator\">></span> d<span class=\"token punctuation\">)</span> <span class=\"token keyword\">return</span> <span class=\"token number\">2</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 두 원이 만나는 점이 두개일 때</span>\n    <span class=\"token keyword\">else</span> <span class=\"token keyword\">return</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>","frontmatter":{"title":"[백준 알고리즘] 1002번: 터렛","date":"December 22, 2019"}}},"pageContext":{"slug":"/Problem-Solving/2019-12-22-1002번-터렛/","previous":{"fields":{"slug":"/Problem-Solving/2019-12-21-1011번-Fly-me-to-the-Alpha-Centauri/"},"frontmatter":{"title":"[백준 알고리즘] 1011번: Fly me to the Alpha Centauri","category":"Problem-Solving","draft":false}},"next":{"fields":{"slug":"/Problem-Solving/2019-12-23-2920번-음계/"},"frontmatter":{"title":"[백준 알고리즘] 2920번: 음계","category":"Problem-Solving","draft":false}}}},"staticQueryHashes":["2486386679","3128451518"]}