Jekyll2021-07-20T18:17:40+09:00https://aisiunme.github.io/feed.xml책쓰고 번역하는 개발자웹개발, 유튜브 코딩교육, 기술서적 집필, 일본어 번역, 애니메이션 감상평 및 자막 제작, 라노벨 창작Jun Leeaisiunme@gmail.com백준 알고리즘 문제 풀이 - 큐(10845)2018-10-10T00:00:00+09:002018-10-10T00:00:00+09:00https://aisiunme.github.io/algorithm/2018/10/10/baekjoon-queue-10845<h2 id="baekjoon-problem-10845---큐의-간단한-동작들을-직접-구현하는-문제">Baekjoon Problem #10845 - 큐의 간단한 동작들을 직접 구현하는 문제</h2>
<p>정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.</p>
<p>명령은 총 여섯 가지이다.</p>
<ol>
<li>push X: 정수 X를 큐에 넣는 연산이다.</li>
<li>pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.</li>
<li>size: 큐에 들어있는 정수의 개수를 출력한다.</li>
<li>empty: 큐가 비어있으면 1, 아니면 0을 출력한다.</li>
<li>front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.</li>
<li>back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.</li>
</ol>
<blockquote>
<dl>
<dt>입력</dt>
<dd>첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.</dd>
</dl>
</blockquote>
<blockquote>
<dl>
<dt>출력</dt>
<dd>출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.</dd>
</dl>
</blockquote>
<hr />
<p>예제 입력 1</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>15
push 1
push 2
front
back
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
front
</code></pre></div></div>
<p>예제 출력 1</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>1
2
2
0
1
2
-1
0
1
-1
0
3
</code></pre></div></div>
<hr />
<h3 id="my-solution-in-python-ok_hand">My Solution in Python :ok_hand:</h3>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">deque</span>
<span class="n">queue</span> <span class="o">=</span> <span class="n">deque</span><span class="p">()</span>
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="nb">input</span><span class="p">())):</span>
<span class="n">k</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="k">if</span> <span class="n">k</span><span class="p">[:</span><span class="mi">2</span><span class="p">]</span><span class="o">==</span><span class="s">'pu'</span><span class="p">:</span> <span class="n">queue</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">k</span><span class="p">[</span><span class="mi">5</span><span class="p">:]))</span>
<span class="k">elif</span> <span class="n">k</span><span class="p">[:</span><span class="mi">2</span><span class="p">]</span><span class="o">==</span><span class="s">'po'</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="n">queue</span><span class="p">.</span><span class="n">popleft</span><span class="p">()</span> <span class="k">if</span> <span class="n">queue</span> <span class="k">else</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">k</span><span class="p">[:</span><span class="mi">2</span><span class="p">]</span><span class="o">==</span><span class="s">'si'</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">queue</span><span class="p">))</span>
<span class="k">elif</span> <span class="n">k</span><span class="p">[:</span><span class="mi">2</span><span class="p">]</span><span class="o">==</span><span class="s">'em'</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="mi">0</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">queue</span><span class="p">)</span> <span class="k">else</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">k</span><span class="p">[:</span><span class="mi">2</span><span class="p">]</span><span class="o">==</span><span class="s">'fr'</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="n">queue</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">queue</span> <span class="k">else</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="n">queue</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="n">queue</span> <span class="k">else</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
</code></pre></div></div>
<blockquote>
<p>파이썬에서는 collections 모듈의 deque를 통해 스택이나 큐를 매우 손쉽게 구현할 수 있도록 하고 있습니다.</p>
<p>또한, 문제에 나와있지 않은 명령이 주어지는 경우는 없다고 했으므로, push와 pop을 구분하기 위해서 최소한 앞의 두 문자는 확인해야 어떤 명령어인지를 확인할 수 있습니다.</p>
<p>만약 ‘pu’로 시작하면 명령어는 ‘push’이고, k의 5번째 인덱스부터 끝까지가 스택에 넣어야할 정수가 되므로 이것을 정수로 변환한 후 append() 메소드를 통해 스택에 저장하면 됩니다.<br />
만약 ‘po’로 시작하면 명령어는 ‘pop’이고, 스택이 비어있지 않으면 pop() 메소드를 사용하여 가장 마지막에 저장된 요소(top 위치)를 출력하고 스택이 비어있다면 -1을 출력하면 됩니다.<br />
만약 ‘si’로 시작하면 명령어는 ‘size’이고, 스택의 길이를 len() 함수를 통해 출력하면 됩니다.<br />
만약 ‘em’으로 시작하면 명령어는 ‘empty’이고, 스택의 길이가 0이 아니면 0을 출력하고 0이면 1을 출력하면 됩니다.<br />
만약 ‘fr’로 시작하면 명령어는 ‘front’이고, 스택의 길이가 0이 아니면 큐의 가장 앞에 있는 요소를 출력하고 0이면 -1을 출력하면 됩니다.
마지막으로 남은 명령어는 ‘back’이고, 스택의 길이가 0이 아니면 큐의 가장 뒤에 있는 요소를 출력하고 0이면 -1을 출력하면 됩니다.</p>
<p>이렇게 파이썬에서는 deque를 사용하여 큐 자료구조를 아주 손쉽게 구현할 수 있습니다.</p>
</blockquote>
<hr />
<p>백준 온라인 저지 <a href="https://www.acmicpc.net/problem/10845">https://www.acmicpc.net/problem/10845</a></p>Jun Leeaisiunme@gmail.comBaekjoon Problem #10845 - 큐의 간단한 동작들을 직접 구현하는 문제백준 알고리즘 문제 풀이 - 괄호(9012)2018-10-04T00:00:00+09:002018-10-04T00:00:00+09:00https://aisiunme.github.io/algorithm/2018/10/04/baekjoon-parenthesis-string-9012<h2 id="baekjoon-problem-9012---스택을-사용하여-괄호의-올바른-사용-여부를-찾는-문제">Baekjoon Problem #9012 - 스택을 사용하여 괄호의 올바른 사용 여부를 찾는 문제</h2>
<p>괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다. 만일 x 가 VPS 라면 이것을 하나의 괄호에 넣은 새로운 문자열 “(x)”도 VPS 가 된다. 그리고 두 VPS x 와 y를 접합(concatenation)시킨 새로운 문자열 xy도 VPS 가 된다. 예를 들어 “(())()”와 “((()))” 는 VPS 이지만 “(()(”, “(())()))” , 그리고 “(()” 는 모두 VPS 가 아닌 문자열이다.</p>
<p>여러분은 입력으로 주어진 괄호 문자열이 VPS 인지 아닌지를 판단해서 그 결과를 YES 와 NO 로 나타내어야 한다.</p>
<blockquote>
<dl>
<dt>입력</dt>
<dd>입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 주어진다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 괄호 문자열이 한 줄에 주어진다. 하나의 괄호 문자열의 길이는 2 이상 50 이하이다.</dd>
</dl>
</blockquote>
<blockquote>
<dl>
<dt>출력</dt>
<dd>출력은 표준 출력을 사용한다. 만일 입력 괄호 문자열이 올바른 괄호 문자열(VPS)이면 “YES”, 아니면 “NO”를 한 줄에 하나씩 차례대로 출력해야 한다.</dd>
</dl>
</blockquote>
<hr />
<p>예제 입력 1</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>6
(())())
(((()())()
(()())((()))
((()()(()))(((())))()
()()()()(()()())()
(()((())()(
</code></pre></div></div>
<p>예제 출력 1</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>NO
NO
YES
NO
YES
NO
</code></pre></div></div>
<hr />
<h3 id="my-solution-in-python-ok_hand">My Solution in Python :ok_hand:</h3>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="nb">input</span><span class="p">())):</span>
<span class="n">stack</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">word</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="k">for</span> <span class="n">ch</span> <span class="ow">in</span> <span class="n">word</span><span class="p">:</span>
<span class="k">if</span> <span class="n">ch</span> <span class="o">==</span> <span class="s">'('</span><span class="p">:</span> <span class="n">stack</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="n">ch</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">stack</span><span class="p">:</span> <span class="n">stack</span><span class="p">.</span><span class="n">pop</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">stack</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="n">ch</span><span class="p">)</span>
<span class="k">break</span>
<span class="k">print</span><span class="p">(</span><span class="s">'NO'</span> <span class="k">if</span> <span class="n">stack</span> <span class="k">else</span> <span class="s">'YES'</span><span class="p">)</span>
</code></pre></div></div>
<blockquote>
<p>괄호 문자열은 ‘(‘문자와 ‘)’문자만을 포함합니다. 따라서 올바른 괄호 문자열을 판단하기 위해서는 이 두 문자만을 판단하면 됩니다.</p>
<p>우선 ‘(‘문자라면 그냥 스택에 저장하면 됩니다.<br />
문제는 ‘)’문자입니다. ‘)’문자일 때 만약 스택이 비어있다면 해당 문자열은 올바른 괄호 문자열이 아니므로 break 키워드를 사용하여 빠져나갑니다. 만약 스택이 비어 있지 않다면 스택의 가장 나중에 저장된 ‘(‘문자를 pop하면 됩니다.</p>
<p>이 과정을 반복한 후 주어진 문자열이 올바른 괄호 문자열이라면 스택에는 어떠한 문자도 저장되어 있지 않게 되며, 반대로 스택이 비어있지 않다면 해당 문자열은 올바르지 않은 괄호 문자열인 것입니다.</p>
</blockquote>
<hr />
<p>백준 온라인 저지 <a href="https://www.acmicpc.net/problem/9021">https://www.acmicpc.net/problem/9021</a></p>Jun Leeaisiunme@gmail.comBaekjoon Problem #9012 - 스택을 사용하여 괄호의 올바른 사용 여부를 찾는 문제백준 알고리즘 문제 풀이 - 스택(10828)2018-10-02T00:00:00+09:002018-10-02T00:00:00+09:00https://aisiunme.github.io/algorithm/2018/10/02/baekjoon-stack-10828<h2 id="baekjoon-problem-10828---스택의-간단한-동작들을-직접-구현하는-문제">Baekjoon Problem #10828 - 스택의 간단한 동작들을 직접 구현하는 문제</h2>
<p>정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.</p>
<p>명령은 총 다섯 가지이다.</p>
<ol>
<li>push X: 정수 X를 스택에 넣는 연산이다.</li>
<li>pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.</li>
<li>size: 스택에 들어있는 정수의 개수를 출력한다.</li>
<li>empty: 스택이 비어있으면 1, 아니면 0을 출력한다.</li>
<li>top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.</li>
</ol>
<blockquote>
<dl>
<dt>입력</dt>
<dd>첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.</dd>
</dl>
</blockquote>
<blockquote>
<dl>
<dt>출력</dt>
<dd>출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.</dd>
</dl>
</blockquote>
<hr />
<p>예제 입력 1</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>14
push 1
push 2
top
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
top
</code></pre></div></div>
<p>예제 출력 1</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>2
2
0
2
1
-1
0
1
-1
0
3
</code></pre></div></div>
<hr />
<h3 id="my-solution-in-python-ok_hand">My Solution in Python :ok_hand:</h3>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">stack</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="nb">input</span><span class="p">())):</span>
<span class="n">k</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="k">if</span> <span class="n">k</span><span class="p">[:</span><span class="mi">2</span><span class="p">]</span><span class="o">==</span><span class="s">'pu'</span><span class="p">:</span> <span class="n">stack</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">k</span><span class="p">[</span><span class="mi">5</span><span class="p">:]))</span>
<span class="k">elif</span> <span class="n">k</span><span class="p">[:</span><span class="mi">2</span><span class="p">]</span><span class="o">==</span><span class="s">'po'</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="n">stack</span><span class="p">.</span><span class="n">pop</span><span class="p">()</span> <span class="k">if</span> <span class="n">stack</span> <span class="k">else</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">k</span><span class="p">[:</span><span class="mi">2</span><span class="p">]</span><span class="o">==</span><span class="s">'si'</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">stack</span><span class="p">))</span>
<span class="k">elif</span> <span class="n">k</span><span class="p">[:</span><span class="mi">2</span><span class="p">]</span><span class="o">==</span><span class="s">'em'</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="mi">0</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">stack</span><span class="p">)</span> <span class="k">else</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span><span class="k">print</span><span class="p">(</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">stack</span><span class="p">)</span> <span class="k">else</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
</code></pre></div></div>
<blockquote>
<p>문제에 나와있지 않은 명령이 주어지는 경우는 없다고 했으므로, push와 pop을 구분하기 위해서 최소한 앞의 두 문자는 확인해야 어떤 명령어인지를 확인할 수 있습니다.</p>
<p>만약 ‘pu’로 시작하면 명령어는 ‘push’이고, k의 5번째 인덱스부터 끝까지가 스택에 넣어야할 정수가 되므로 이것을 정수로 변환한 후 append() 메소드를 통해 스택에 저장하면 됩니다.<br />
만약 ‘po’로 시작하면 명령어는 ‘pop’이고, 스택이 비어있지 않으면 pop() 메소드를 사용하여 가장 마지막에 저장된 요소(top 위치)를 출력하고 스택이 비어있다면 -1을 출력하면 됩니다.<br />
만약 ‘si’로 시작하면 명령어는 ‘size’이고, 스택의 길이를 len() 함수를 통해 출력하면 됩니다.<br />
만약 ‘em’으로 시작하면 명령어는 ‘empty’이고, 스택의 길이가 0이 아니면 0을 출력하고 0이면 1을 출력하면 됩니다.<br />
마지막으로 남은 명령어는 ‘top’이며, 스택의 길이가 0이 아니면 가장 마지막에 저장된 요소를 출력하고 0이면 -1을 출력하면 됩니다.</p>
<p>이렇게 아주 간단한 스택 자료구조를 파이썬의 리스트을 이용하여 구현해 보았습니다.</p>
</blockquote>
<hr />
<p>백준 온라인 저지 <a href="https://www.acmicpc.net/problem/10828">https://www.acmicpc.net/problem/10828</a></p>Jun Leeaisiunme@gmail.comBaekjoon Problem #10828 - 스택의 간단한 동작들을 직접 구현하는 문제백준 알고리즘 문제 풀이 - 골드바흐의 추측(9020)2018-10-01T00:00:00+09:002018-10-01T00:00:00+09:00https://aisiunme.github.io/algorithm/2018/10/01/baekjoon-goldbachs-conjecture-9020<h2 id="baekjoon-problem-9020---2보다-큰-모든-짝수는-두-소수의-합으로-나타낼-수-있음을-구하는-문제">Baekjoon Problem #9020 - 2보다 큰 모든 짝수는 두 소수의 합으로 나타낼 수 있음을 구하는 문제</h2>
<p>1보다 큰 자연수 중에서 1과 자기 자신을 제외한 약수가 없는 자연수를 소수라고 한다. 예를 들어, 5는 1과 5를 제외한 약수가 없기 때문에 소수이다. 하지만, 6은 6 = 2 × 3 이기 때문에 소수가 아니다.</p>
<p>골드바흐의 추측은 유명한 정수론의 미해결 문제로, 2보다 큰 모든 짝수는 두 소수의 합으로 나타낼 수 있다는 것이다. 이러한 숫자를 골드바흐 숫자라고 한다. 또, 짝수를 두 소수의 합으로 나타내는 표현을 그 숫자의 골드바흐 파티션이라고 한다. 예를 들면, 4 = 2 + 2, 6 = 3 + 3, 8 = 3 + 5, 10 = 5 + 5, 12 = 5 + 7, 14 = 3 + 11, 14 = 7 + 7이다. 10000보다 작거나 같은 모든 짝수 n에 대한 골드바흐 파티션은 존재한다.</p>
<p>2보다 큰 짝수 n이 주어졌을 때, n의 골드바흐 파티션을 출력하는 프로그램을 작성하시오. 만약 가능한 n의 골드바흐 파티션이 여러 가지인 경우에는 두 소수의 차이가 가장 작은 것을 출력한다.</p>
<blockquote>
<dl>
<dt>입력</dt>
<dd>첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고 짝수 n이 주어진다. (4 ≤ n ≤ 10,000)</dd>
</dl>
</blockquote>
<blockquote>
<dl>
<dt>출력</dt>
<dd>각 테스트 케이스에 대해서 주어진 n의 골드바흐 파티션을 출력한다. 출력하는 소수는 작은 것부터 먼저 출력하며, 공백으로 구분한다.</dd>
</dl>
</blockquote>
<hr />
<p>예제 입력 1</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>3
8
10
16
</code></pre></div></div>
<p>예제 출력 1</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>3 5
5 5
5 11
</code></pre></div></div>
<hr />
<h3 id="my-solution-in-python-ok_hand">My Solution in Python :ok_hand:</h3>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">m</span> <span class="o">=</span> <span class="mi">10000</span>
<span class="n">s</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="n">m</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">m</span><span class="o">**</span><span class="mf">0.5</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span>
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="n">i</span><span class="p">,</span> <span class="n">m</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="n">i</span><span class="p">):</span>
<span class="k">if</span> <span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="p">]:</span> <span class="n">s</span><span class="p">[</span><span class="n">j</span><span class="p">]</span><span class="o">=</span><span class="mi">0</span>
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="nb">input</span><span class="p">())):</span>
<span class="n">n</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="nb">input</span><span class="p">())</span>
<span class="n">r</span> <span class="o">=</span> <span class="p">[(</span><span class="n">x</span><span class="p">,</span> <span class="n">n</span><span class="o">-</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">s</span><span class="p">[:</span><span class="n">n</span><span class="o">//</span><span class="mi">2</span><span class="o">+</span><span class="mi">1</span><span class="p">])</span> <span class="k">if</span> <span class="n">y</span> <span class="ow">and</span> <span class="n">s</span><span class="p">[</span><span class="n">n</span><span class="o">-</span><span class="n">x</span><span class="p">]][</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="k">print</span><span class="p">(</span><span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">r</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
</code></pre></div></div>
<blockquote>
<p>1번 라인부터 5번 라인까지의 중첩 for 문은 에라토스테네스의 체를 사용하여 10,000까지의 소수를 모두 구하는 코드입니다. 소수에 해당하는 인덱스에는 그 값이 1로 저장되며, 소수가 아니면 0이 저장됩니다.<br />
따라서 이 문제를 해결하는 코드는 실질적으로 8번 라인 단 한 줄이 됩니다.</p>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">r</span> <span class="o">=</span> <span class="p">[(</span><span class="n">x</span><span class="p">,</span> <span class="n">n</span><span class="o">-</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">s</span><span class="p">[:</span><span class="n">n</span><span class="o">//</span><span class="mi">2</span><span class="o">+</span><span class="mi">1</span><span class="p">])</span> <span class="k">if</span> <span class="n">y</span> <span class="ow">and</span> <span class="n">s</span><span class="p">[</span><span class="n">n</span><span class="o">-</span><span class="n">x</span><span class="p">]][</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
</code></pre></div> </div>
<p>코드의 각 부분을 살펴보면,<br />
우선 8 = 3 + 5나 8 = 5 + 3이나 그 결과는 같기 때문에, 문제에서 작은 소수부터 먼저 출력하라고 했으므로, 우리는 에라토스테네스의 체를 사용하여 구한 소수를 저장해 놓은 리스트 s에서 n//2+1까지만 살펴보면 됩니다.<br />
여기서 enumerate() 함수는 시퀀스형 데이터를 전달받아 그 값을 인덱스와 함께 반환해 줍니다. 즉, 변수 x에는 인덱스가 저장되며, 변수 y에는 해당 인덱스에 저장된 값이 저장되는 것입니다.</p>
<p>이때 s[x]의 값이 1이고 동시에 s[n-x]의 값도 1이라면, 정수 n은 두 소수의 합으로 이루어진 골드바흐 파티션이 존재한다고 할 수 있습니다.<br />
만약 이렇게 구한 골드바흐 파티션이 여러 개라면 가장 마지막 요소가 두 소수의 차이가 가장 작은 파티션이므로, -1번째 인덱스를 가지는 요소를 출력하면 됩니다.</p>
</blockquote>
<hr />
<p>백준 온라인 저지 <a href="https://www.acmicpc.net/problem/9020">https://www.acmicpc.net/problem/9020</a></p>Jun Leeaisiunme@gmail.comBaekjoon Problem #9020 - 2보다 큰 모든 짝수는 두 소수의 합으로 나타낼 수 있음을 구하는 문제백준 알고리즘 문제 풀이 - 소수 찾기(1978)2018-09-28T00:00:00+09:002018-09-28T00:00:00+09:00https://aisiunme.github.io/algorithm/2018/09/28/baekjoon-find-prime-number-1978<h2 id="baekjoon-problem-1978---주어진-수-중에서-소수가-몇-개인지를-출력하는-문제">Baekjoon Problem #1978 - 주어진 수 중에서 소수가 몇 개인지를 출력하는 문제</h2>
<p>주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.</p>
<blockquote>
<dl>
<dt>입력</dt>
<dd>첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.</dd>
</dl>
</blockquote>
<blockquote>
<dl>
<dt>출력</dt>
<dd>주어진 수들 중 소수의 개수를 출력한다.</dd>
</dl>
</blockquote>
<hr />
<p>예제 입력 1</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>4
1 3 5 7
</code></pre></div></div>
<p>예제 출력 1</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>3
</code></pre></div></div>
<hr />
<h3 id="my-solution-in-python-ok_hand">My Solution in Python :ok_hand:</h3>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">result</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">map</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span><span class="nb">input</span><span class="p">().</span><span class="n">split</span><span class="p">()):</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> <span class="n">result</span><span class="o">-=</span><span class="mi">1</span>
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">i</span><span class="o">**</span><span class="p">.</span><span class="mi">5</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">%</span> <span class="n">j</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">result</span><span class="o">-=</span><span class="mi">1</span>
<span class="k">break</span>
<span class="n">result</span><span class="o">+=</span><span class="mi">1</span>
<span class="k">print</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
</code></pre></div></div>
<blockquote>
<p>이번 문제에서는 소수의 개수만 출력하면 되므로, 굳이 소수로 확인된 숫자들을 저장할 필요가 없습니다.<br />
따라서 우선 전달받은 숫자가 1이라면 소수가 아니므로 변수 result 값에서 1을 뺍니다.<br />
다음으로 소수인지 아닌지 여부를 검사하여 만약 소수가 아니라면 변수 result 값에서 1을 빼고, 소수라면 1을 더하면 소수의 총 개수를 확인할 수 있습니다.</p>
</blockquote>
<hr />
<p>백준 온라인 저지 <a href="https://www.acmicpc.net/problem/1978">https://www.acmicpc.net/problem/1978</a></p>Jun Leeaisiunme@gmail.comBaekjoon Problem #1978 - 주어진 수 중에서 소수가 몇 개인지를 출력하는 문제백준 알고리즘 문제 풀이 - 베르트랑 공준(4948)2018-09-27T00:00:00+09:002018-09-27T00:00:00+09:00https://aisiunme.github.io/algorithm/2018/09/27/baekjoon-bertrands-postulate-4948<h2 id="baekjoon-problem-4948---임의의-자연수-n과-2n-사이에-존재하는-소수의-개수를-구하는-문제">Baekjoon Problem #4948 - 임의의 자연수 n과 2n 사이에 존재하는 소수의 개수를 구하는 문제</h2>
<p>베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다.</p>
<p>이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼프가 1850년에 증명했다.</p>
<p>예를 들어, 10보다 크고, 20보다 작거나 같은 소수는 4개가 있다. (11, 13, 17, 19) 또, 14보다 크고, 28보다 작거나 같은 소수는 3개가 있다. (17,19, 23)</p>
<p>n이 주어졌을 때, n보다 크고, 2n보다 작거나 같은 소수의 개수를 구하는 프로그램을 작성하시오.</p>
<blockquote>
<dl>
<dt>입력</dt>
<dd>입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 케이스는 n을 포함하며, 한 줄로 이루어져 있다. (n ≤ 123456)</dd>
<dd>입력의 마지막에는 0이 주어진다.</dd>
</dl>
</blockquote>
<blockquote>
<dl>
<dt>출력</dt>
<dd>각 테스트 케이스에 대해서, n보다 크고, 2n보다 작거나 같은 소수의 개수를 출력한다.</dd>
</dl>
</blockquote>
<hr />
<p>예제 입력 1</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>1
10
13
100
1000
10000
100000
0
</code></pre></div></div>
<p>예제 출력 1</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>1
4
3
21
135
1033
8392
</code></pre></div></div>
<hr />
<h3 id="my-solution-in-python-ok_hand">My Solution in Python :ok_hand:</h3>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">m</span> <span class="o">=</span> <span class="mi">246912</span>
<span class="n">s</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="n">m</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">m</span><span class="o">**</span><span class="mf">0.5</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span>
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="n">i</span><span class="p">,</span> <span class="n">m</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="n">i</span><span class="p">):</span>
<span class="k">if</span> <span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="p">]:</span><span class="n">s</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="bp">True</span><span class="p">:</span>
<span class="n">n</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="nb">input</span><span class="p">())</span>
<span class="k">if</span> <span class="n">n</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> <span class="k">break</span>
<span class="k">print</span><span class="p">(</span><span class="nb">sum</span><span class="p">(</span><span class="n">s</span><span class="p">[</span><span class="n">n</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span><span class="mi">2</span><span class="o">*</span><span class="n">n</span><span class="o">+</span><span class="mi">1</span><span class="p">]))</span>
</code></pre></div></div>
<blockquote>
<p>n부터 2n까지 존재하는 소수의 개수를 구해야 하므로, 2n이 가질 수 있는 최대값인 246912를 기준으로 코드를 작성합니다.<br />
중첩 for 문인 에라토스테네스의 체를 사용하여 1부터 2n까지의 모든 소수를 구한 다음, 입력 받은 n값에 따라 해당 범위 내의 소수의 개수를 sum() 함수로 출력하게 됩니다.</p>
</blockquote>
<hr />
<p>백준 온라인 저지 <a href="https://www.acmicpc.net/problem/4948">https://www.acmicpc.net/problem/4948</a></p>Jun Leeaisiunme@gmail.comBaekjoon Problem #4948 - 임의의 자연수 n과 2n 사이에 존재하는 소수의 개수를 구하는 문제.gitignore 설정 변경 후 git에 반영되지 않는 문제2018-09-21T00:00:00+09:002018-09-21T00:00:00+09:00https://aisiunme.github.io/git/2018/09/21/gitignore-update<h2 id="gitignore-설정-변경-후-git-업데이트-방법">.gitignore 설정 변경 후 git 업데이트 방법</h2>
<p>프로젝트가 진행됨에 따라 .gitignore 파일에 추가해야 할 폴더와 파일 등이 점차 늘어나게 됩니다.</p>
<p>하지만 .gitignore 파일에 정상적으로 추가하였다고 하더라도 이미 git에 push된 폴더나 파일들은 삭제되지 않습니다.</p>
<p>이럴 때는 해당 repository 폴더에서 git bash를 실행하여 다음과 같은 명령을 실행하면 됩니다. 이렇게 함으로써 .gitignore 파일의 내용을 git에 업데이트하여 이미 push된 폴더나 파일을 삭제할 수 있습니다.</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ git rm -r --cached .
$ git add .
$ git commit -m 'git cach removed!'
$ git push origin <brunch 이름>
</code></pre></div></div>
<p>push까지 완료해야 업데이트됩니다~ :two_hearts:</p>Jun Leeaisiunme@gmail.com.gitignore 설정 변경 후 git 업데이트 방법백준 알고리즘 문제 풀이 - 소수 구하기(1929)2018-09-20T00:00:00+09:002018-09-20T00:00:00+09:00https://aisiunme.github.io/algorithm/2018/09/20/baekjoon-find-prime-number-1929<h2 id="baekjoon-problem-1929---두-수-사이의-존재하는-소수를-에라토스테네스의-체를-사용하여-구하는-문제">Baekjoon Problem #1929 - 두 수 사이의 존재하는 소수를 에라토스테네스의 체를 사용하여 구하는 문제</h2>
<p>M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.</p>
<blockquote>
<dl>
<dt>입력</dt>
<dd>첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1≤M≤N≤1,000,000)</dd>
</dl>
</blockquote>
<blockquote>
<dl>
<dt>출력</dt>
<dd>한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.</dd>
</dl>
</blockquote>
<hr />
<p>예제 입력 1</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>3 16
</code></pre></div></div>
<p>예제 출력 1</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>3
5
7
11
13
</code></pre></div></div>
<hr />
<h3 id="my-solution-in-python-ok_hand">My Solution in Python :ok_hand:</h3>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">m</span><span class="p">,</span> <span class="n">n</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="nb">input</span><span class="p">().</span><span class="n">split</span><span class="p">())</span>
<span class="n">s</span> <span class="o">=</span> <span class="p">[</span><span class="bp">False</span><span class="p">,</span> <span class="bp">False</span><span class="p">]</span> <span class="o">+</span> <span class="p">[</span><span class="bp">True</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="n">n</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">n</span><span class="o">**</span><span class="mf">0.5</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span>
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="n">i</span><span class="p">,</span> <span class="n">n</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="n">i</span><span class="p">):</span>
<span class="k">if</span> <span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="p">]:</span>
<span class="n">s</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="bp">False</span>
<span class="p">[</span><span class="k">print</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="n">n</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> <span class="k">if</span> <span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="p">]]</span>
</code></pre></div></div>
<blockquote>
<p>위의 코드에서 변수 s에는 소수 여부를 불리언 값으로 저장합니다. 0과 1은 소수가 아니므로 False로 초기화하고 나머지는 우선 True로 초기화합니다.</p>
<p>소수를 구할 때는 첫 번째 for 문처럼 2부터 (√n)+1 까지만 소수 여부를 검사하면 됩니다.
또한, 두 번째 for 문처럼 검사한 수의 배수를 모두 False로 설정해 주면 소수만이 True 값을 가지게 됩니다.</p>
</blockquote>
<hr />
<p>백준 온라인 저지 <a href="https://www.acmicpc.net/problem/1929">https://www.acmicpc.net/problem/1929</a></p>Jun Leeaisiunme@gmail.comBaekjoon Problem #1929 - 두 수 사이의 존재하는 소수를 에라토스테네스의 체를 사용하여 구하는 문제백준 알고리즘 문제 풀이 - 소수(2581)2018-09-19T00:00:00+09:002018-09-19T00:00:00+09:00https://aisiunme.github.io/algorithm/2018/09/19/baekjoon-prime-number-2581<h2 id="baekjoon-problem-2581---두-수-사이의-존재하는-소수를-구하는-문제">Baekjoon Problem #2581 - 두 수 사이의 존재하는 소수를 구하는 문제</h2>
<p>자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최솟값을 찾는 프로그램을 작성하시오.</p>
<p>예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로, 이들 소수의 합은 620이고, 최솟값은 61이 된다.</p>
<blockquote>
<dl>
<dt>입력</dt>
<dd>입력의 첫째 줄에 M이, 둘째 줄에 N이 주어진다.</dd>
<dd>M과 N은 10,000이하의 자연수이며, M은 N보다 작거나 같다.</dd>
</dl>
</blockquote>
<blockquote>
<dl>
<dt>출력</dt>
<dd>M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다.</dd>
<dd>단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.</dd>
</dl>
</blockquote>
<hr />
<p>예제 입력 1</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>60
100
</code></pre></div></div>
<p>예제 출력 1</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>620
61
</code></pre></div></div>
<hr />
<p>예제 입력 2</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>64
65
</code></pre></div></div>
<p>예제 출력 2</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>-1
</code></pre></div></div>
<hr />
<h3 id="my-solution-in-python-ok_hand">My Solution in Python :ok_hand:</h3>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
<span class="k">if</span> <span class="n">n</span><span class="o">==</span><span class="mi">1</span><span class="p">:</span> <span class="k">return</span> <span class="bp">False</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
<span class="k">if</span> <span class="n">n</span><span class="o">%</span><span class="n">i</span><span class="o">==</span><span class="mi">0</span><span class="p">:</span> <span class="k">return</span> <span class="bp">False</span>
<span class="k">return</span> <span class="bp">True</span>
<span class="n">a</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="nb">input</span><span class="p">())</span>
<span class="n">b</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="nb">input</span><span class="p">())</span>
<span class="n">d</span><span class="o">=</span><span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> <span class="k">if</span> <span class="n">f</span><span class="p">(</span><span class="n">i</span><span class="p">)]</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">d</span><span class="p">)</span><span class="o">==</span><span class="mi">0</span><span class="p">:</span>
<span class="k">print</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">print</span><span class="p">(</span><span class="nb">sum</span><span class="p">(</span><span class="n">d</span><span class="p">))</span>
<span class="k">print</span><span class="p">(</span><span class="nb">min</span><span class="p">(</span><span class="n">d</span><span class="p">))</span>
</code></pre></div></div>
<blockquote>
<p>함수 f()는 전달받은 정수가 소수이면 True를 반환하고, 소수가 아니면 False를 반환하는 함수입니다.</p>
<p>이 함수의 성능을 높이기 위해서는 math 라이브러리에서 제곱근을 반환해 주는 sqrt() 함수를 사용하면 됩니다. 2부터 n까지가 아닌 sqrt(n)+1까지만 살펴보아도 해당 정수가 소수인지 아닌지를 판단할 수 있기 때문입니다.</p>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">math</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">math</span><span class="p">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">n</span><span class="p">))</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span>
<span class="k">if</span> <span class="n">n</span><span class="o">%</span><span class="n">i</span><span class="o">==</span><span class="mi">0</span><span class="p">:</span> <span class="k">return</span> <span class="bp">False</span>
</code></pre></div> </div>
<p>이때 sqrt() 함수는 실수를 반환하므로, range() 함수에 전달하기 위해서는 정수로 변환해 주어야 함에 유의해야 합니다.</p>
</blockquote>
<hr />
<p>백준 온라인 저지 <a href="https://www.acmicpc.net/problem/2581">https://www.acmicpc.net/problem/2581</a></p>Jun Leeaisiunme@gmail.comBaekjoon Problem #2581 - 두 수 사이의 존재하는 소수를 구하는 문제우분투(Ubuntu)에서 파이썬(python) pip 설치 불가2018-09-12T00:00:00+09:002018-09-12T00:00:00+09:00https://aisiunme.github.io/ubuntu/2018/09/12/troubleshooting-ubuntu-pip-install<h2 id="ubuntu에서-python-pip-설치-방법">Ubuntu에서 python pip 설치 방법</h2>
<p>지금까지 우분투에서 파이썬의 pip 패키지를 설치하려면 다음과 같이 입력하면 되었다.</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt-get install python3-pip
</code></pre></div></div>
<p>하지만 이번에는 pip 패키지를 설치하려니 다음과 같은 에러가 발생!! :anger:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>E: Unable to locate package python-pip
</code></pre></div></div>
<p>구글에서 검색해 보니 우분투 12.04 또는 그 이상의 버전에서는 다음과 같이 실행해야 pip을 설치할 수 있다고 함!</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt-get install python3-setuptools
sudo easy_install3 pip
</code></pre></div></div>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>jun@Jun-Laptop:~$ sudo apt-get install python3-setuptools
[sudo] password for jun:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following package was automatically installed and is no longer required:
libfreetype6
Use 'sudo apt autoremove' to remove it.
Suggested packages:
python-setuptools-doc
The following NEW packages will be installed:
python3-setuptools
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 88.0 kB of archives.
After this operation, 439 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu xenial/main amd64 python3-setuptools all 20.7.0-1 [88.0 kB]
Fetched 88.0 kB in 1s (59.9 kB/s)
Selecting previously unselected package python3-setuptools.
(Reading database ... 25568 files and directories currently installed.)
Preparing to unpack .../python3-setuptools_20.7.0-1_all.deb ...
Unpacking python3-setuptools (20.7.0-1) ...
Setting up python3-setuptools (20.7.0-1) ...
jun@Jun-Laptop:~$ sudo easy_install3 pip
Searching for pip
Reading https://pypi.python.org/simple/pip/
Best match: pip 18.0
Downloading https://files.pythonhosted.org/packages/69/81/52b68d0a4de760a2f1979b0931ba7889202f302072cc7a0d614211bc7579/pip-18.0.tar.gz#sha256=a0e11645ee37c90b40c46d607070c4fd583e2cd46231b1c06e389c5e814eed76
Processing pip-18.0.tar.gz
Writing /tmp/easy_install-dkzdqshg/pip-18.0/setup.cfg
Running pip-18.0/setup.py -q bdist_egg --dist-dir /tmp/easy_install-dkzdqshg/pip-18.0/egg-dist-tmp-z3m20w_f
/usr/lib/python3.5/distutils/dist.py:261: UserWarning: Unknown distribution option: 'python_requires'
creating /usr/local/lib/python3.5/dist-packages/pip-18.0-py3.5.egg
Extracting pip-18.0-py3.5.egg to /usr/local/lib/python3.5/dist-packages
Adding pip 18.0 to easy-install.pth file
Installing pip3 script to /usr/local/bin
Installing pip script to /usr/local/bin
Installing pip3.5 script to /usr/local/bin
Installed /usr/local/lib/python3.5/dist-packages/pip-18.0-py3.5.egg
Processing dependencies for pip
Finished processing dependencies for pip
jun@Jun-Laptop:~$ pip --version
pip 18.0 from /usr/local/lib/python3.5/dist-packages/pip-18.0-py3.5.egg/pip (python 3.5)
</code></pre></div></div>
<p>스무스하게 해결됨! :two_hearts:</p>Jun Leeaisiunme@gmail.comUbuntu에서 python pip 설치 방법