<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://socotra567118.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://socotra567118.github.io/" rel="alternate" type="text/html" /><updated>2025-03-27T18:40:37+09:00</updated><id>https://socotra567118.github.io/feed.xml</id><title type="html">Site Title</title><subtitle>An amazing website.</subtitle><author><name>Your Name</name></author><entry><title type="html">Git에서 Commit하지 않을 파일 설정하기</title><link href="https://socotra567118.github.io/git/plist-commit/" rel="alternate" type="text/html" title="Git에서 Commit하지 않을 파일 설정하기" /><published>2025-03-27T00:00:00+09:00</published><updated>2025-03-27T00:00:00+09:00</updated><id>https://socotra567118.github.io/git/plist-commit</id><content type="html" xml:base="https://socotra567118.github.io/git/plist-commit/"><![CDATA[<h2 id="특정-파일-제외하기">특정 파일 제외하기</h2>

<p><code class="language-plaintext highlighter-rouge">Config</code> 폴더의 <code class="language-plaintext highlighter-rouge">Secret.plist</code>의 파일을 <code class="language-plaintext highlighter-rouge">Git</code> 추적에서 제거하는 경우</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">echo</span> <span class="s2">"Config/Secret.plist"</span> <span class="o">&gt;&gt;</span> .gitignore
git add .gitignore
</code></pre></div></div>

<h4 id="이미-git이-추적-중인-경우">이미 <code class="language-plaintext highlighter-rouge">Git</code>이 추적 중인 경우</h4>

<p>아래 명령어로 <code class="language-plaintext highlighter-rouge">Git</code> 추적에서 제외한다.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git <span class="nb">rm</span> <span class="nt">--cached</span> Config/Secret.plist
</code></pre></div></div>]]></content><author><name>Your Name</name></author><category term="Git" /><category term="Git" /><summary type="html"><![CDATA[특정 파일 제외하기]]></summary></entry><entry><title type="html">LeetCode Two Sum - Python</title><link href="https://socotra567118.github.io/algorithm/two-sum/" rel="alternate" type="text/html" title="LeetCode Two Sum - Python" /><published>2025-02-22T00:00:00+09:00</published><updated>2025-02-22T00:00:00+09:00</updated><id>https://socotra567118.github.io/algorithm/two-sum</id><content type="html" xml:base="https://socotra567118.github.io/algorithm/two-sum/"><![CDATA[<p><a href="https://leetcode.com/problems/two-sum">LeetCode Two Sum</a></p>

<p>Given an array of integers <code class="language-plaintext highlighter-rouge">nums</code> and an integer <code class="language-plaintext highlighter-rouge">target</code>, return indices of the two numbers such that they add up to <code class="language-plaintext highlighter-rouge">target</code>.</p>

<p>You may assume that each input would have exactly one solution, and you may not use the same element twice.</p>

<p>You can return the answer in any order.</p>

<h1 id="constraints">Constraints</h1>

<ul>
  <li>2 &lt;= nums.length &lt;= $10^4$</li>
  <li>$-10^9$ &lt;= nums[i] &lt;= $10^9$</li>
  <li>$-10^9$ &lt;= target &lt;= $10^9$</li>
  <li>Only one valid answer exists.</li>
</ul>

<h1 id="approach">Approach</h1>

<ol>
  <li>주어진 <code class="language-plaintext highlighter-rouge">nums</code> 배열에서 숫자를 하나씩 꺼낸다.</li>
  <li><code class="language-plaintext highlighter-rouge">target</code>에서 <code class="language-plaintext highlighter-rouge">nums</code> 배열에서 꺼낸 숫자를 빼서 얼마를 더해야 <code class="language-plaintext highlighter-rouge">target</code>이 될지 확인한다.</li>
  <li><code class="language-plaintext highlighter-rouge">nums</code>에서 꺼낸 숫자의 인덱스 값 이후에 찾아야 할 숫자가 있는지 확인한다.</li>
  <li>있다면 <code class="language-plaintext highlighter-rouge">nums</code>에서 꺼낸 숫자의 인덱스와 찾은 숫자의 인덱스를 반환한다.</li>
  <li>없다면 2 ~ 3을 반복한다.</li>
</ol>

<h1 id="complexity">Complexity</h1>

<ul>
  <li>Time complexity:</li>
  <li>바깥 <code class="language-plaintext highlighter-rouge">for 문</code>에서 $O(n)$</li>
  <li><code class="language-plaintext highlighter-rouge">nums[index + 1]</code> 탐색에서 $O(n)$</li>
  <li>
    <p>따라서, 최악의 경우 시간 복잡도는 $O(n^2)$</p>
  </li>
  <li>Space complexity:</li>
  <li>$n$이 커지면 할당된 메모리도 커지는 변수는 없으므로 공간 복잡도는 $O(1)$</li>
</ul>

<h1 id="code">Code</h1>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">twoSum</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">target</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]:</span>
        <span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">num</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">nums</span><span class="p">):</span>
            <span class="n">finding_number</span> <span class="o">=</span> <span class="n">target</span> <span class="o">-</span> <span class="n">num</span>

            <span class="k">if</span> <span class="n">finding_number</span> <span class="ow">in</span> <span class="n">nums</span><span class="p">[</span><span class="n">index</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:]:</span>
                <span class="k">return</span> <span class="p">[</span><span class="n">index</span><span class="p">,</span> <span class="n">nums</span><span class="p">.</span><span class="n">index</span><span class="p">(</span><span class="n">finding_number</span><span class="p">,</span> <span class="n">index</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)]</span>
</code></pre></div></div>

<h1 id="개선할-점">개선할 점</h1>

<ul>
  <li>해시맵을 사용하면 공간복잡도는 $O(n)$으로 늘어나지만 시간복잡도를 $O(n)$으로 줄일 수 있다.</li>
</ul>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">twoSum</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">target</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]:</span>
        <span class="n">num_map</span> <span class="o">=</span> <span class="p">{}</span>

        <span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">num</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">nums</span><span class="p">):</span>
            <span class="n">finding_number</span> <span class="o">=</span> <span class="n">target</span> <span class="o">-</span> <span class="n">num</span>

            <span class="k">if</span> <span class="n">finding_number</span> <span class="ow">in</span> <span class="n">num_map</span><span class="p">:</span>
                <span class="k">return</span> <span class="p">[</span><span class="n">num_map</span><span class="p">[</span><span class="n">finding_number</span><span class="p">],</span> <span class="n">index</span><span class="p">]</span>

            <span class="n">num_map</span><span class="p">[</span><span class="n">num</span><span class="p">]</span> <span class="o">=</span> <span class="n">index</span>
</code></pre></div></div>]]></content><author><name>Your Name</name></author><category term="Algorithm" /><category term="Python" /><category term="LeetCode" /><summary type="html"><![CDATA[LeetCode Two Sum]]></summary></entry><entry><title type="html">프로그래머스 86491번 최소직사각형 - Python</title><link href="https://socotra567118.github.io/algorithm/programmers-86491/" rel="alternate" type="text/html" title="프로그래머스 86491번 최소직사각형 - Python" /><published>2025-02-18T00:00:00+09:00</published><updated>2025-02-18T00:00:00+09:00</updated><id>https://socotra567118.github.io/algorithm/programmers-86491</id><content type="html" xml:base="https://socotra567118.github.io/algorithm/programmers-86491/"><![CDATA[<h2 id="문제-설명">문제 설명</h2>
<p><a href="https://school.programmers.co.kr/learn/courses/30/lessons/86491">프로그래머스 86491번 최소직사각형</a></p>

<p>명함 지갑을 만드는 회사에서 지갑의 크기를 정하려고 합니다. 다양한 모양과 크기의 명함들을 모두 수납할 수 있으면서, 작아서 들고 다니기 편한 지갑을 만들어야 합니다. 이러한 요건을 만족하는 지갑을 만들기 위해 디자인팀은 모든 명함의 가로 길이와 세로 길이를 조사했습니다.</p>

<p>아래 표는 4가지 명함의 가로 길이와 세로 길이를 나타냅니다.</p>

<table>
  <thead>
    <tr>
      <th style="text-align: center">명함 번호</th>
      <th style="text-align: center">가로 길이</th>
      <th style="text-align: center">세로 길이</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">1</td>
      <td style="text-align: center">60</td>
      <td style="text-align: center">50</td>
    </tr>
    <tr>
      <td style="text-align: center">2</td>
      <td style="text-align: center">30</td>
      <td style="text-align: center">70</td>
    </tr>
    <tr>
      <td style="text-align: center">3</td>
      <td style="text-align: center">60</td>
      <td style="text-align: center">30</td>
    </tr>
    <tr>
      <td style="text-align: center">4</td>
      <td style="text-align: center">80</td>
      <td style="text-align: center">40</td>
    </tr>
  </tbody>
</table>

<p>가장 긴 가로 길이와 세로 길이가 각각 80, 70이기 때문에 80(가로) x 70(세로) 크기의 지갑을 만들면 모든 명함들을 수납할 수 있습니다. 하지만 2번 명함을 가로로 눕혀 수납한다면 80(가로) x 50(세로) 크기의 지갑으로 모든 명함들을 수납할 수 있습니다. 이때의 지갑 크기는 4000(=80 x 50)입니다.</p>

<p>모든 명함의 가로 길이와 세로 길이를 나타내는 2차원 배열 sizes가 매개변수로 주어집니다. 모든 명함을 수납할 수 있는 가장 작은 지갑을 만들 때, 지갑의 크기를 return 하도록 solution 함수를 완성해주세요.</p>

<h2 id="제한-사항">제한 사항</h2>

<ul>
  <li>sizes의 길이는 1 이상 10,000 이하입니다.
    <ul>
      <li>sizes의 원소는 [w, h] 형식입니다.</li>
      <li>w는 명함의 가로 길이를 나타냅니다.</li>
      <li>h는 명함의 세로 길이를 나타냅니다.</li>
      <li>w와 h는 1 이상 1,000 이하인 자연수입니다.</li>
    </ul>
  </li>
</ul>

<h2 id="입출력-예시">입출력 예시</h2>

<table>
  <thead>
    <tr>
      <th style="text-align: center">sizes</th>
      <th style="text-align: center">result</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">[[60, 50], [30, 70], [60, 30], [80, 40]]</td>
      <td style="text-align: center">4000</td>
    </tr>
    <tr>
      <td style="text-align: center">[[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]]</td>
      <td style="text-align: center">120</td>
    </tr>
    <tr>
      <td style="text-align: center">[[14, 4], [19, 6], [6, 16], [18, 7], [7, 11]]</td>
      <td style="text-align: center">133</td>
    </tr>
  </tbody>
</table>

<h3 id="입출력-예-설명-1">입출력 예 설명 1</h3>

<ul>
  <li>위의 예시와 같습니다.</li>
</ul>

<h3 id="입출력-예-설명-2">입출력 예 설명 2</h3>

<ul>
  <li>명함들을 적절히 회전시켜 겹쳤을 때, 3번째 명함(가로: 8, 세로: 15)이 다른 모든 명함보다 크기가 큽니다. 따라서 지갑의 크기는 3번째 명함의 크기와 같으며, 120(=8 x 15)을 return 합니다.</li>
</ul>

<h3 id="입출력-예-설명-3">입출력 예 설명 3</h3>

<ul>
  <li>명함들을 적절히 회전시켜 겹쳤을 때, 모든 명함을 포함하는 가장 작은 지갑의 크기는 133(=19 x 7)입니다.</li>
</ul>

<h2 id="코드-구현">코드 구현</h2>

<h3 id="python">Python</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">solution</span><span class="p">(</span><span class="n">sizes</span><span class="p">:</span> <span class="p">[[</span><span class="nb">int</span><span class="p">]]):</span>
    <span class="n">width</span> <span class="o">=</span> <span class="p">[]</span>
    <span class="n">height</span> <span class="o">=</span> <span class="p">[]</span>

    <span class="k">for</span> <span class="n">size</span> <span class="ow">in</span> <span class="n">sizes</span><span class="p">:</span>
        <span class="n">size</span><span class="p">.</span><span class="n">sort</span><span class="p">()</span>
        <span class="n">width</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="n">size</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
        <span class="n">height</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="n">size</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>

    <span class="k">return</span> <span class="nb">max</span><span class="p">(</span><span class="n">width</span><span class="p">)</span> <span class="o">*</span> <span class="nb">max</span><span class="p">(</span><span class="n">height</span><span class="p">)</span>
</code></pre></div></div>

<h3 id="시간-복잡도---python">시간 복잡도 - Python</h3>

<ul>
  <li>반복문을 실행하는데 시간 복잡도는 $O(n)$이다.</li>
  <li>너비와 높이의 최댓값을 찾는데 시간 복잡도는 $O(n)$이다.</li>
  <li>따라서, 시간 복잡도는 $O(n)$이다.</li>
</ul>]]></content><author><name>Your Name</name></author><category term="Algorithm" /><category term="Python" /><category term="Programmers" /><summary type="html"><![CDATA[문제 설명 프로그래머스 86491번 최소직사각형]]></summary></entry><entry><title type="html">프로그래머스 12906번 같은 숫자는 싫어 - Python</title><link href="https://socotra567118.github.io/algorithm/programmers-12906/" rel="alternate" type="text/html" title="프로그래머스 12906번 같은 숫자는 싫어 - Python" /><published>2025-02-10T00:00:00+09:00</published><updated>2025-02-10T00:00:00+09:00</updated><id>https://socotra567118.github.io/algorithm/programmers-12906</id><content type="html" xml:base="https://socotra567118.github.io/algorithm/programmers-12906/"><![CDATA[<h2 id="문제-설명">문제 설명</h2>
<p><a href="https://school.programmers.co.kr/learn/courses/30/lessons/12906">프로그래머스 12906번 같은 숫자는 싫어</a></p>

<p>배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,</p>

<ul>
  <li>arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다.</li>
  <li>arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다.</li>
</ul>

<p>배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.</p>

<h2 id="제한-사항">제한 사항</h2>

<ul>
  <li>배열 arr의 크기 : 1,000,000 이하의 자연수</li>
  <li>배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수</li>
</ul>

<h2 id="입출력-예시">입출력 예시</h2>

<table>
  <thead>
    <tr>
      <th style="text-align: center">arr</th>
      <th style="text-align: center">answer</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">[1,1,3,3,0,1,1]</td>
      <td style="text-align: center">[1,3,0,1]</td>
    </tr>
    <tr>
      <td style="text-align: center">[4,4,4,3,3]</td>
      <td style="text-align: center">[4,3]</td>
    </tr>
  </tbody>
</table>

<h3 id="입출력-예-설명-1-2">입출력 예 설명 1, 2</h3>

<ul>
  <li>문제의 예시와 같습니다.</li>
</ul>

<h2 id="코드-구현">코드 구현</h2>

<h3 id="python">Python</h3>

<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">def</span> <span class="nf">solution</span><span class="p">(</span><span class="n">progresses</span><span class="p">,</span> <span class="n">speeds</span><span class="p">):</span>
    <span class="n">need_days_collection</span> <span class="o">=</span> <span class="p">[]</span>
    <span class="n">release_num</span> <span class="o">=</span> <span class="p">[]</span>
    <span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>

    <span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">progress</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">progresses</span><span class="p">):</span>
        <span class="n">need_days</span> <span class="o">=</span> <span class="n">math</span><span class="p">.</span><span class="n">ceil</span><span class="p">((</span><span class="mi">100</span> <span class="o">-</span> <span class="n">progress</span><span class="p">)</span> <span class="o">/</span> <span class="n">speeds</span><span class="p">[</span><span class="n">index</span><span class="p">])</span>

        <span class="k">if</span> <span class="ow">not</span> <span class="n">need_days_collection</span><span class="p">:</span>
            <span class="n">need_days_collection</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="n">need_days</span><span class="p">)</span>
            <span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
        <span class="k">elif</span> <span class="n">need_days_collection</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">&gt;=</span> <span class="n">need_days</span><span class="p">:</span>
            <span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="n">need_days_collection</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="n">need_days</span><span class="p">)</span>
            <span class="n">release_num</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
            <span class="n">count</span> <span class="o">=</span> <span class="mi">1</span>

    <span class="n">release_num</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>

    <span class="k">return</span> <span class="n">release_num</span>
</code></pre></div></div>

<h3 id="시간-복잡도---python">시간 복잡도 - Python</h3>

<ul>
  <li>반복문을 실행하는데 시간 복잡도는 $O(n)$이다.</li>
  <li>따라서, 시간 복잡도는 $O(n)$이다.</li>
</ul>]]></content><author><name>Your Name</name></author><category term="Algorithm" /><category term="Python" /><category term="Programmers" /><summary type="html"><![CDATA[문제 설명 프로그래머스 12906번 같은 숫자는 싫어]]></summary></entry><entry><title type="html">프로그래머스 12945번 피보나치 수 - Python</title><link href="https://socotra567118.github.io/algorithm/programmers-12945/" rel="alternate" type="text/html" title="프로그래머스 12945번 피보나치 수 - Python" /><published>2025-02-10T00:00:00+09:00</published><updated>2025-02-10T00:00:00+09:00</updated><id>https://socotra567118.github.io/algorithm/programmers-12945</id><content type="html" xml:base="https://socotra567118.github.io/algorithm/programmers-12945/"><![CDATA[<h2 id="문제-설명">문제 설명</h2>
<p><a href="https://school.programmers.co.kr/learn/courses/30/lessons/12945">프로그래머스 12945번 피보나치 수</a></p>

<p>피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다.
예를들어</p>

<ul>
  <li>F(2) = F(0) + F(1) = 0 + 1 = 1</li>
  <li>F(3) = F(1) + F(2) = 1 + 1 = 2</li>
  <li>F(4) = F(2) + F(3) = 1 + 2 = 3</li>
  <li>F(5) = F(3) + F(4) = 2 + 3 = 5</li>
</ul>

<p>와 같이 이어집니다.</p>

<p>2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요.</p>

<h2 id="제한-사항">제한 사항</h2>

<ul>
  <li>n은 2 이상 100,000 이하인 자연수입니다.</li>
</ul>

<h2 id="입출력-예시">입출력 예시</h2>

<table>
  <thead>
    <tr>
      <th style="text-align: center">n</th>
      <th style="text-align: center">return</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">3</td>
      <td style="text-align: center">2</td>
    </tr>
    <tr>
      <td style="text-align: center">5</td>
      <td style="text-align: center">5</td>
    </tr>
  </tbody>
</table>

<h3 id="입출력-예-설명-1-2">입출력 예 설명 1, 2</h3>

<ul>
  <li>피보나치수는 0번째부터 0, 1, 1, 2, 3, 5, … 와 같이 이어집니다.</li>
</ul>

<h2 id="코드-구현">코드 구현</h2>

<h3 id="python">Python</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">solution</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
    <span class="n">answer</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</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="n">n</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
        <span class="n">answer</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="n">answer</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">2</span><span class="p">]</span> <span class="o">+</span> <span class="n">answer</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">])</span>

    <span class="k">return</span> <span class="n">answer</span><span class="p">[</span><span class="n">n</span><span class="p">]</span> <span class="o">%</span> <span class="mi">1234567</span>
</code></pre></div></div>

<h3 id="시간-복잡도---python">시간 복잡도 - Python</h3>

<ul>
  <li>반복문을 실행하는데 시간 복잡도는 $O(n)$이다.</li>
  <li>따라서, 시간 복잡도는 $O(n)$이다.</li>
</ul>

<h3 id="개선할-점---python">개선할 점 - Python</h3>

<ul>
  <li>배열 대신에 변수를 사용하면 시간 복잡도는 그대로 이지만 공간 복잡도를 매우 작게 할 수 있다.</li>
</ul>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">solution</span><span class="p">(</span><span class="n">n</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">0</span><span class="p">,</span> <span class="mi">1</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="o">+</span> <span class="mi">1</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="n">b</span><span class="p">,</span> <span class="n">a</span> <span class="o">+</span> <span class="n">b</span>

    <span class="k">return</span> <span class="n">b</span> <span class="o">%</span> <span class="mi">1234567</span>
</code></pre></div></div>]]></content><author><name>Your Name</name></author><category term="Algorithm" /><category term="Python" /><category term="Programmers" /><summary type="html"><![CDATA[문제 설명 프로그래머스 12945번 피보나치 수]]></summary></entry><entry><title type="html">프로그래머스 12973번 짝지어 제거하기 - Python</title><link href="https://socotra567118.github.io/algorithm/programmers-12973/" rel="alternate" type="text/html" title="프로그래머스 12973번 짝지어 제거하기 - Python" /><published>2025-02-10T00:00:00+09:00</published><updated>2025-02-10T00:00:00+09:00</updated><id>https://socotra567118.github.io/algorithm/programmers-12973</id><content type="html" xml:base="https://socotra567118.github.io/algorithm/programmers-12973/"><![CDATA[<h2 id="문제-설명">문제 설명</h2>
<p><a href="https://school.programmers.co.kr/learn/courses/30/lessons/12973">프로그래머스 12973번 짝지어 제거하기</a></p>

<p>짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다.</p>

<p>예를 들어, 문자열 S = <code class="language-plaintext highlighter-rouge">baabaa</code> 라면</p>

<p>b aa baa → bb aa → aa →</p>

<p>의 순서로 문자열을 모두 제거할 수 있으므로 1을 반환합니다.</p>

<h2 id="제한-사항">제한 사항</h2>

<ul>
  <li>문자열의 길이 : 1,000,000이하의 자연수</li>
  <li>문자열은 모두 소문자로 이루어져 있습니다.</li>
</ul>

<h2 id="입출력-예시">입출력 예시</h2>

<table>
  <thead>
    <tr>
      <th style="text-align: center">s</th>
      <th style="text-align: center">result</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">baabaa</td>
      <td style="text-align: center">1</td>
    </tr>
    <tr>
      <td style="text-align: center">cdcd</td>
      <td style="text-align: center">0</td>
    </tr>
  </tbody>
</table>

<h3 id="입출력-예-설명-1">입출력 예 설명 1</h3>

<ul>
  <li>위의 예시와 같습니다.</li>
</ul>

<h3 id="입출력-예-설명-2">입출력 예 설명 2</h3>

<ul>
  <li>문자열이 남아있지만 짝지어 제거할 수 있는 문자열이 더 이상 존재하지 않기 때문에 0을 반환합니다.</li>
</ul>

<h2 id="코드-구현">코드 구현</h2>

<h3 id="python">Python</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">solution</span><span class="p">(</span><span class="n">s</span><span class="p">):</span>
    <span class="n">stack</span> <span class="o">=</span> <span class="p">[]</span>

    <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">s</span><span class="p">:</span>
        <span class="k">if</span> <span class="n">stack</span> <span class="ow">and</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="o">==</span> <span class="n">char</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">char</span><span class="p">)</span>

    <span class="k">return</span> <span class="mi">1</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">stack</span> <span class="k">else</span> <span class="mi">0</span>
</code></pre></div></div>

<h3 id="시간-복잡도---python">시간 복잡도 - Python</h3>

<ul>
  <li>반복문을 실행하는데 시간 복잡도는 $O(n)$이다.</li>
  <li>따라서, 시간 복잡도는 $O(n)$이다.</li>
</ul>]]></content><author><name>Your Name</name></author><category term="Algorithm" /><category term="Python" /><category term="Programmers" /><summary type="html"><![CDATA[문제 설명 프로그래머스 12973번 짝지어 제거하기]]></summary></entry><entry><title type="html">프로그래머스 12909번 올바른 괄호 - Python</title><link href="https://socotra567118.github.io/algorithm/programmers-12909/" rel="alternate" type="text/html" title="프로그래머스 12909번 올바른 괄호 - Python" /><published>2025-02-08T00:00:00+09:00</published><updated>2025-02-08T00:00:00+09:00</updated><id>https://socotra567118.github.io/algorithm/programmers-12909</id><content type="html" xml:base="https://socotra567118.github.io/algorithm/programmers-12909/"><![CDATA[<h2 id="문제-설명">문제 설명</h2>
<p><a href="https://school.programmers.co.kr/learn/courses/30/lessons/12909">프로그래머스 12909번 올바른 괄호</a></p>

<p>괄호가 바르게 짝지어졌다는 것은 ‘(‘ 문자로 열렸으면 반드시 짝지어서 ‘)’ 문자로 닫혀야 한다는 뜻입니다. 예를 들어</p>

<ul>
  <li>”()()” 또는 “(())()” 는 올바른 괄호입니다.</li>
  <li>”)()(“ 또는 “(()(“ 는 올바르지 않은 괄호입니다.</li>
</ul>

<p>’(‘ 또는 ‘)’ 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.</p>

<h2 id="제한-사항">제한 사항</h2>

<ul>
  <li>문자열 s의 길이 : 100,000 이하의 자연수</li>
  <li>문자열 s는 ‘(‘ 또는 ‘)’ 로만 이루어져 있습니다.</li>
</ul>

<h2 id="입출력-예시">입출력 예시</h2>

<table>
  <thead>
    <tr>
      <th style="text-align: center">s</th>
      <th style="text-align: center">answer</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">”()()”</td>
      <td style="text-align: center">true</td>
    </tr>
    <tr>
      <td style="text-align: center">”(())()”</td>
      <td style="text-align: center">true</td>
    </tr>
    <tr>
      <td style="text-align: center">”)()(“</td>
      <td style="text-align: center">false</td>
    </tr>
    <tr>
      <td style="text-align: center">”(()(“</td>
      <td style="text-align: center">false</td>
    </tr>
  </tbody>
</table>

<h3 id="입출력-예-설명-1-2-3-4">입출력 예 설명 1, 2, 3, 4</h3>

<p>문제의 예시와 같습니다.</p>

<h2 id="코드-구현">코드 구현</h2>

<h3 id="python">Python</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">solution</span><span class="p">(</span><span class="n">s</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
    <span class="n">stack</span> <span class="o">=</span> <span class="p">[]</span>

    <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">s</span><span class="p">:</span>
        <span class="k">if</span> <span class="n">char</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">char</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="k">return</span> <span class="bp">False</span>

    <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">stack</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span>
</code></pre></div></div>

<h3 id="시간-복잡도---python">시간 복잡도 - Python</h3>

<ul>
  <li>문자열을 순회하는데에 필요한 시간 복잡도는 <code class="language-plaintext highlighter-rouge">O(n)</code>이다.</li>
  <li><code class="language-plaintext highlighter-rouge">.append()</code>, <code class="language-plaintext highlighter-rouge">.pop()</code> 연산에 필요한 시간 복잡도는 <code class="language-plaintext highlighter-rouge">O(1)</code>이다.</li>
  <li>따라서, 시간 복잡도는 <code class="language-plaintext highlighter-rouge">O(n)</code>이다.</li>
</ul>]]></content><author><name>Your Name</name></author><category term="Algorithm" /><category term="Python" /><category term="Programmers" /><summary type="html"><![CDATA[문제 설명 프로그래머스 12909번 올바른 괄호]]></summary></entry><entry><title type="html">프로그래머스 12911번 숫자의 표현 - Python</title><link href="https://socotra567118.github.io/algorithm/programmers-12911/" rel="alternate" type="text/html" title="프로그래머스 12911번 숫자의 표현 - Python" /><published>2025-02-08T00:00:00+09:00</published><updated>2025-02-08T00:00:00+09:00</updated><id>https://socotra567118.github.io/algorithm/programmers-12911</id><content type="html" xml:base="https://socotra567118.github.io/algorithm/programmers-12911/"><![CDATA[<h2 id="문제-설명">문제 설명</h2>
<p><a href="https://school.programmers.co.kr/learn/courses/30/lessons/12911">프로그래머스 12911번 숫자의 표현</a></p>

<p>자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.</p>

<ul>
  <li>조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.</li>
  <li>조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.</li>
  <li>조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.</li>
</ul>

<p>예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.</p>

<p>자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.</p>

<h2 id="제한-사항">제한 사항</h2>

<ul>
  <li>n은 1,000,000 이하의 자연수 입니다.</li>
</ul>

<h2 id="입출력-예시">입출력 예시</h2>

<table>
  <thead>
    <tr>
      <th style="text-align: center">n</th>
      <th style="text-align: center">result</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">78</td>
      <td style="text-align: center">83</td>
    </tr>
    <tr>
      <td style="text-align: center">15</td>
      <td style="text-align: center">23</td>
    </tr>
  </tbody>
</table>

<h3 id="입출력-예-설명-1">입출력 예 설명 1</h3>

<p>문제의 예시와 같습니다.</p>

<h3 id="입출력-예-설명-2">입출력 예 설명 2</h3>

<p>15(1111)의 다음 큰 숫자는 23(10111)입니다.</p>

<h2 id="코드-구현">코드 구현</h2>

<h3 id="python">Python</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">solution</span><span class="p">(</span><span class="n">n</span><span class="p">:</span> <span class="nb">int</span><span class="p">):</span>
    <span class="n">answer</span> <span class="o">=</span> <span class="n">n</span> <span class="o">+</span> <span class="mi">1</span>

    <span class="k">while</span> <span class="nb">bin</span><span class="p">(</span><span class="n">n</span><span class="p">)[</span><span class="mi">2</span><span class="p">:].</span><span class="n">count</span><span class="p">(</span><span class="s">"1"</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">bin</span><span class="p">(</span><span class="n">answer</span><span class="p">)[</span><span class="mi">2</span><span class="p">:].</span><span class="n">count</span><span class="p">(</span><span class="s">"1"</span><span class="p">):</span>
        <span class="n">answer</span> <span class="o">+=</span> <span class="mi">1</span>

    <span class="k">return</span> <span class="n">answer</span>
</code></pre></div></div>

<h3 id="시간-복잡도---python">시간 복잡도 - Python</h3>

<ul>
  <li>2진수 변환에서 시간 복잡도는 $O(\log n)$이다.</li>
  <li><code class="language-plaintext highlighter-rouge">while 문</code>에서 시간 복잡도는 $O(n)$이다.</li>
  <li>따라서, 시간 복잡도는 최악의 경우 $O(n \log n)$이다.</li>
</ul>]]></content><author><name>Your Name</name></author><category term="Algorithm" /><category term="Python" /><category term="Programmers" /><summary type="html"><![CDATA[문제 설명 프로그래머스 12911번 숫자의 표현]]></summary></entry><entry><title type="html">프로그래머스 12924번 숫자의 표현 - Python</title><link href="https://socotra567118.github.io/algorithm/programmers-12924/" rel="alternate" type="text/html" title="프로그래머스 12924번 숫자의 표현 - Python" /><published>2025-02-08T00:00:00+09:00</published><updated>2025-02-08T00:00:00+09:00</updated><id>https://socotra567118.github.io/algorithm/programmers-12924</id><content type="html" xml:base="https://socotra567118.github.io/algorithm/programmers-12924/"><![CDATA[<h2 id="문제-설명">문제 설명</h2>
<p><a href="https://school.programmers.co.kr/learn/courses/30/lessons/12924">프로그래머스 12924번 숫자의 표현</a></p>

<p>Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다.</p>

<ul>
  <li>1 + 2 + 3 + 4 + 5 = 15</li>
  <li>4 + 5 + 6 = 15</li>
  <li>7 + 8 = 15</li>
  <li>15 = 15</li>
</ul>

<p>자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요.</p>

<h2 id="제한-사항">제한 사항</h2>

<ul>
  <li>n은 10,000 이하의 자연수 입니다.</li>
</ul>

<h2 id="입출력-예시">입출력 예시</h2>

<table>
  <thead>
    <tr>
      <th style="text-align: center">n</th>
      <th style="text-align: center">result</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">15</td>
      <td style="text-align: center">4</td>
    </tr>
  </tbody>
</table>

<h3 id="입출력-예-설명-1">입출력 예 설명 1</h3>

<p>문제의 예시와 같습니다.</p>

<h2 id="코드-구현">코드 구현</h2>

<h3 id="python">Python</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">solution</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
    <span class="n">answer</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">range</span><span class="p">(</span><span class="mi">1</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">add_num</span> <span class="o">=</span> <span class="n">i</span>
        <span class="nb">sum</span> <span class="o">=</span> <span class="mi">0</span>
        
        <span class="k">while</span> <span class="nb">sum</span> <span class="o">&lt;</span> <span class="n">n</span><span class="p">:</span>
            <span class="nb">sum</span> <span class="o">+=</span> <span class="n">add_num</span>
            <span class="n">add_num</span> <span class="o">+=</span> <span class="mi">1</span>
        
        <span class="k">if</span> <span class="nb">sum</span> <span class="o">==</span> <span class="n">n</span><span class="p">:</span>
            <span class="n">answer</span> <span class="o">+=</span> <span class="mi">1</span>

    <span class="k">return</span> <span class="n">answer</span>
</code></pre></div></div>

<h3 id="시간-복잡도---python">시간 복잡도 - Python</h3>

<ul>
  <li>바깥 <code class="language-plaintext highlighter-rouge">for 문</code>에서 시간 복잡도는 $O(n)$이다.</li>
  <li>내부 <code class="language-plaintext highlighter-rouge">while 문</code>에서 시간 복잡도는 $O(n)$이다.</li>
  <li>따라서, 시간 복잡도는 최악의 경우 $O(n^2)$이다.</li>
</ul>]]></content><author><name>Your Name</name></author><category term="Algorithm" /><category term="Python" /><category term="Programmers" /><summary type="html"><![CDATA[문제 설명 프로그래머스 12924번 숫자의 표현]]></summary></entry><entry><title type="html">프로그래머스 70129번 이진 변환 반복하기 - Python</title><link href="https://socotra567118.github.io/algorithm/programmers-70129/" rel="alternate" type="text/html" title="프로그래머스 70129번 이진 변환 반복하기 - Python" /><published>2025-02-08T00:00:00+09:00</published><updated>2025-02-08T00:00:00+09:00</updated><id>https://socotra567118.github.io/algorithm/programmers-70129</id><content type="html" xml:base="https://socotra567118.github.io/algorithm/programmers-70129/"><![CDATA[<h2 id="문제-설명">문제 설명</h2>
<p><a href="https://school.programmers.co.kr/learn/courses/30/lessons/70129">프로그래머스 70129번 이진 변환 반복하기</a></p>

<p>0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다.</p>

<ol>
  <li>x의 모든 0을 제거합니다.</li>
  <li>x의 길이를 c라고 하면, x를 “c를 2진법으로 표현한 문자열”로 바꿉니다.</li>
</ol>

<p>예를 들어, <code class="language-plaintext highlighter-rouge">x = "0111010"</code>이라면, x에 이진 변환을 가하면 <code class="language-plaintext highlighter-rouge">x = "0111010" -&gt; "1111" -&gt; "100"</code> 이 됩니다.</p>

<p>0과 1로 이루어진 문자열 s가 매개변수로 주어집니다. s가 “1”이 될 때까지 계속해서 s에 이진 변환을 가했을 때, 이진 변환의 횟수와 변환 과정에서 제거된 모든 0의 개수를 각각 배열에 담아 return 하도록 solution 함수를 완성해주세요.</p>

<h2 id="제한-사항">제한 사항</h2>

<ul>
  <li>s의 길이는 1 이상 150,000 이하입니다.</li>
  <li>s에는 ‘1’이 최소 하나 이상 포함되어 있습니다.</li>
</ul>

<h2 id="입출력-예시">입출력 예시</h2>

<table>
  <thead>
    <tr>
      <th style="text-align: center">s</th>
      <th style="text-align: center">result</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">“110010101001”</td>
      <td style="text-align: center">[3,8]</td>
    </tr>
    <tr>
      <td style="text-align: center">“01110”</td>
      <td style="text-align: center">[3,3]</td>
    </tr>
    <tr>
      <td style="text-align: center">“1111111”</td>
      <td style="text-align: center">[4,1]</td>
    </tr>
  </tbody>
</table>

<h3 id="입출력-예-설명-1">입출력 예 설명 1</h3>

<ul>
  <li>“110010101001”이 “1”이 될 때까지 이진 변환을 가하는 과정은 다음과 같습니다.</li>
</ul>

<table>
  <thead>
    <tr>
      <th style="text-align: center">회차</th>
      <th style="text-align: center">이진 변환 이전</th>
      <th style="text-align: center">제거할 0의 개수</th>
      <th style="text-align: center">0 제거 후 길이</th>
      <th style="text-align: center">이진 변환 결과</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">1</td>
      <td style="text-align: center">“110010101001”</td>
      <td style="text-align: center">6</td>
      <td style="text-align: center">6</td>
      <td style="text-align: center">“110”</td>
    </tr>
    <tr>
      <td style="text-align: center">2</td>
      <td style="text-align: center">“110”</td>
      <td style="text-align: center">1</td>
      <td style="text-align: center">2</td>
      <td style="text-align: center">“10”</td>
    </tr>
    <tr>
      <td style="text-align: center">3</td>
      <td style="text-align: center">“10”</td>
      <td style="text-align: center">1</td>
      <td style="text-align: center">1</td>
      <td style="text-align: center">“1”</td>
    </tr>
  </tbody>
</table>

<ul>
  <li>3번의 이진 변환을 하는 동안 8개의 0을 제거했으므로, <code class="language-plaintext highlighter-rouge">[3,8]</code>을 return 해야 합니다.</li>
</ul>

<h3 id="입출력-예-설명-2">입출력 예 설명 2</h3>

<ul>
  <li>“01110”이 “1”이 될 때까지 이진 변환을 가하는 과정은 다음과 같습니다.</li>
</ul>

<table>
  <thead>
    <tr>
      <th style="text-align: center">회차</th>
      <th style="text-align: center">이진 변환 이전</th>
      <th style="text-align: center">제거할 0의 개수</th>
      <th style="text-align: center">0 제거 후 길이</th>
      <th style="text-align: center">이진 변환 결과</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">1</td>
      <td style="text-align: center">“01110”</td>
      <td style="text-align: center">2</td>
      <td style="text-align: center">3</td>
      <td style="text-align: center">“11”</td>
    </tr>
    <tr>
      <td style="text-align: center">2</td>
      <td style="text-align: center">“11”</td>
      <td style="text-align: center">0</td>
      <td style="text-align: center">2</td>
      <td style="text-align: center">“10”</td>
    </tr>
    <tr>
      <td style="text-align: center">3</td>
      <td style="text-align: center">“10”</td>
      <td style="text-align: center">1</td>
      <td style="text-align: center">1</td>
      <td style="text-align: center">“1”</td>
    </tr>
  </tbody>
</table>

<ul>
  <li>3번의 이진 변환을 하는 동안 8개의 0을 제거했으므로, <code class="language-plaintext highlighter-rouge">[3,8]</code>을 return 해야 합니다.</li>
</ul>

<h3 id="입출력-예-설명-3">입출력 예 설명 3</h3>

<ul>
  <li>“1111111”이 “1”이 될 때까지 이진 변환을 가하는 과정은 다음과 같습니다.</li>
</ul>

<table>
  <thead>
    <tr>
      <th style="text-align: center">회차</th>
      <th style="text-align: center">이진 변환 이전</th>
      <th style="text-align: center">제거할 0의 개수</th>
      <th style="text-align: center">0 제거 후 길이</th>
      <th style="text-align: center">이진 변환 결과</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">1</td>
      <td style="text-align: center">“1111111”</td>
      <td style="text-align: center">0</td>
      <td style="text-align: center">7</td>
      <td style="text-align: center">“111”</td>
    </tr>
    <tr>
      <td style="text-align: center">2</td>
      <td style="text-align: center">“111”</td>
      <td style="text-align: center">0</td>
      <td style="text-align: center">3</td>
      <td style="text-align: center">“11”</td>
    </tr>
    <tr>
      <td style="text-align: center">3</td>
      <td style="text-align: center">“11”</td>
      <td style="text-align: center">0</td>
      <td style="text-align: center">2</td>
      <td style="text-align: center">“10”</td>
    </tr>
    <tr>
      <td style="text-align: center">4</td>
      <td style="text-align: center">“10”</td>
      <td style="text-align: center">1</td>
      <td style="text-align: center">1</td>
      <td style="text-align: center">“1”</td>
    </tr>
  </tbody>
</table>

<ul>
  <li>4번의 이진 변환을 하는 동안 8개의 0을 제거했으므로, <code class="language-plaintext highlighter-rouge">[3,8]</code>을 return 해야 합니다.</li>
</ul>

<h2 id="코드-구현">코드 구현</h2>

<h3 id="python">Python</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">solution</span><span class="p">(</span><span class="n">s</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
    <span class="n">count_time</span> <span class="o">=</span> <span class="mi">0</span>
    <span class="n">count_zero</span> <span class="o">=</span> <span class="mi">0</span>

    <span class="k">while</span> <span class="n">s</span> <span class="o">!=</span> <span class="s">"1"</span><span class="p">:</span>
        <span class="n">count_time</span> <span class="o">+=</span> <span class="mi">1</span>
        <span class="n">before</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
        <span class="n">temp</span> <span class="o">=</span> <span class="p">[]</span>

        <span class="k">for</span> <span class="n">num</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">s</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">num</span> <span class="o">==</span> <span class="s">"1"</span><span class="p">:</span>
                <span class="n">temp</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="n">num</span><span class="p">)</span>

        <span class="n">after</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">temp</span><span class="p">)</span>
        <span class="n">count_zero</span> <span class="o">+=</span> <span class="n">before</span> <span class="o">-</span> <span class="n">after</span>

        <span class="n">s</span> <span class="o">=</span> <span class="nb">bin</span><span class="p">(</span><span class="n">after</span><span class="p">)[</span><span class="mi">2</span><span class="p">:]</span>

    <span class="k">return</span> <span class="p">[</span><span class="n">count_time</span><span class="p">,</span> <span class="n">count_zero</span><span class="p">]</span>
</code></pre></div></div>

<h3 id="시간-복잡도---python">시간 복잡도 - Python</h3>

<ul>
  <li>0을 제거하는데 시간 복잡도는 $O(n)$이다.</li>
  <li>2진수로 변환하는데 시간 복잡도는 $O(\log n)$이다.</li>
  <li>이진 변환 과정에서 전체 반복하는데 시간 복잡도는 $O(\log n)$이다.</li>
  <li>따라서, 시간 복잡도는 $O(n \log n)$이다.</li>
</ul>

<h3 id="개선할-점---python">개선할 점 - Python</h3>

<ul>
  <li>문자열을 리스트로 변환하지 않고 직접 처리하면 더 좋은 성능을 얻을 수 있다.</li>
</ul>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">solution</span><span class="p">(</span><span class="n">s</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
    <span class="n">count_time</span> <span class="o">=</span> <span class="mi">0</span>
    <span class="n">count_zero</span> <span class="o">=</span> <span class="mi">0</span>

    <span class="k">while</span> <span class="n">s</span> <span class="o">!=</span> <span class="s">"1"</span><span class="p">:</span>
        <span class="n">count_time</span> <span class="o">+=</span> <span class="mi">1</span>

        <span class="n">count_one</span> <span class="o">=</span> <span class="n">s</span><span class="p">.</span><span class="n">count</span><span class="p">(</span><span class="s">"1"</span><span class="p">)</span>
        <span class="n">count_zero</span> <span class="o">+=</span> <span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="o">-</span> <span class="n">count_one</span>

        <span class="n">s</span> <span class="o">=</span> <span class="nb">bin</span><span class="p">(</span><span class="n">count_one</span><span class="p">)[</span><span class="mi">2</span><span class="p">:]</span>

    <span class="k">return</span> <span class="p">[</span><span class="n">count_time</span><span class="p">,</span> <span class="n">count_zero</span><span class="p">]</span>
</code></pre></div></div>]]></content><author><name>Your Name</name></author><category term="Algorithm" /><category term="Python" /><category term="Programmers" /><summary type="html"><![CDATA[문제 설명 프로그래머스 70129번 이진 변환 반복하기]]></summary></entry></feed>