<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>private static void life()</title>
    <link>https://staticvoidlife.tistory.com/</link>
    <description>배운거 정리하는 곳</description>
    <language>ko</language>
    <pubDate>Mon, 10 Aug 2026 12:06:57 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>lee308812</managingEditor>
    <image>
      <title>private static void life()</title>
      <url>https://tistory1.daumcdn.net/tistory/2935034/attach/6d5cbf466a324c9385bd36d17815a0c4</url>
      <link>https://staticvoidlife.tistory.com</link>
    </image>
    <item>
      <title>MySQL - WSL2 Ubuntu 세팅</title>
      <link>https://staticvoidlife.tistory.com/424</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1. sudo&amp;nbsp;apt&amp;nbsp;update&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. sudo&amp;nbsp;apt&amp;nbsp;install&amp;nbsp;mysql-server&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. sudo mysql_secure_installation&lt;/p&gt;
&lt;pre id=&quot;code_1659619536427&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: n
Please set the password for root here.

New password:

Re-enter new password:
 ... Failed! Error: SET PASSWORD has no significance for user 'root'@'localhost' as the authentication method used doesn't store authentication data in the MySQL server. Please consider using ALTER USER instead if you want to change authentication parameters.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. sudo mysql - 종료 후, mysql 재실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '&lt;span style=&quot;color: #ee2323;&quot;&gt;mynewpassword&lt;/span&gt;';&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;완료&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHp4bJ/btrISALJ6p5/Z7nFd7IigaDivvk6tzaO6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHp4bJ/btrISALJ6p5/Z7nFd7IigaDivvk6tzaO6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHp4bJ/btrISALJ6p5/Z7nFd7IigaDivvk6tzaO6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHp4bJ%2FbtrISALJ6p5%2FZ7nFd7IigaDivvk6tzaO6k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;979&quot; height=&quot;512&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 서비스 시작 : sudo service mysql start 후 (ps -ef | grep mysqld로 확인)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 실행 : sudo mysql -uroot -p&lt;/p&gt;
&lt;pre id=&quot;code_1659684001457&quot; class=&quot;routeros&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;lee308812@DESKTOP-OMFP9TN:~$ sudo service mysql start
 * Starting MySQL database server mysqld                                                                                                                                                                                                     su: warning: cannot change directory to /nonexistent: No such file or directory
                                                                                                                                                                                                                                      [ OK ]
lee308812@DESKTOP-OMFP9TN:~$ sudo mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.30-0ubuntu0.20.04.2 (Ubuntu)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming/MySQL</category>
      <author>lee308812</author>
      <guid isPermaLink="true">https://staticvoidlife.tistory.com/424</guid>
      <comments>https://staticvoidlife.tistory.com/424#entry424comment</comments>
      <pubDate>Thu, 4 Aug 2022 22:27:40 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 문자열 압축</title>
      <link>https://staticvoidlife.tistory.com/361</link>
      <description>&lt;ul id=&quot;tab&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문자열 압축&lt;/li&gt;
&lt;/ul&gt;
&lt;div data-challengeable-id=&quot;4573&quot; data-challengeable-type=&quot;algorithm&quot; data-algorithm-type=&quot;standard&quot; data-language=&quot;cpp&quot; data-user-id=&quot;389106&quot; data-interface-type=&quot;function&quot; data-challenge-web-evaluation-code=&quot;&quot;&gt;
&lt;div id=&quot;tour2&quot;&gt;문제 설명
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 처리 전문가가 되고 싶은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&quot;어피치&quot;&lt;/b&gt;는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자열에서 같은 값이 연속해서 나타나는 것을 그 문자의 개수와 반복되는 값으로 표현하여 더 짧은 문자열로 줄여서 표현하는 알고리즘을 공부하고 있습니다.&lt;br /&gt;간단한 예로 &quot;aabbaccc&quot;의 경우 &quot;2a2ba3c&quot;(문자가 반복되지 않아 한번만 나타난 경우 1은 생략함)와 같이 표현할 수 있는데, 이러한 방식은 반복되는 문자가 적은 경우 압축률이 낮다는 단점이 있습니다. 예를 들면, &quot;abcabcdede&quot;와 같은 문자열은 전혀 압축되지 않습니다. &quot;어피치&quot;는 이러한 단점을 해결하기 위해 문자열을 1개 이상의 단위로 잘라서 압축하여 더 짧은 문자열로 표현할 수 있는지 방법을 찾아보려고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, &quot;ababcdcdababcdcd&quot;의 경우 문자를 1개 단위로 자르면 전혀 압축되지 않지만, 2개 단위로 잘라서 압축한다면 &quot;2ab2cd2ab2cd&quot;로 표현할 수 있습니다. 다른 방법으로 8개 단위로 잘라서 압축한다면 &quot;2ababcdcd&quot;로 표현할 수 있으며, 이때가 가장 짧게 압축하여 표현할 수 있는 방법입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 예로, &quot;abcabcdede&quot;와 같은 경우, 문자를 2개 단위로 잘라서 압축하면 &quot;abcabc2de&quot;가 되지만, 3개 단위로 자른다면 &quot;2abcdede&quot;가 되어 3개 단위가 가장 짧은 압축 방법이 됩니다. 이때 3개 단위로 자르고 마지막에 남는 문자열은 그대로 붙여주면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;압축할 문자열 s가 매개변수로 주어질 때, 위에 설명한 방법으로 1개 이상 단위로 문자열을 잘라 압축하여 표현한 문자열 중 가장 짧은 것의 길이를 return 하도록 solution 함수를 완성해주세요.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;제한사항&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;s의 길이는 1 이상 1,000 이하입니다.&lt;/li&gt;
&lt;li&gt;s는 알파벳 소문자로만 이루어져 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;입출력 예&lt;/td&gt;
&lt;td&gt;result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&quot;aabbaccc&quot;&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&quot;ababcdcdababcdcd&quot;&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&quot;abcabcdede&quot;&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&quot;abcabcabcabcdededededede&quot;&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&quot;xababcdcdababcdcd&quot;&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;입출력 예에 대한 설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입출력 예 #1&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열을 1개 단위로 잘라 압축했을 때 가장 짧습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입출력 예 #2&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열을 8개 단위로 잘라 압축했을 때 가장 짧습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입출력 예 #3&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열을 3개 단위로 잘라 압축했을 때 가장 짧습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입출력 예 #4&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열을 2개 단위로 자르면 &quot;abcabcabcabc6de&quot; 가 됩니다.&lt;br /&gt;문자열을 3개 단위로 자르면 &quot;4abcdededededede&quot; 가 됩니다.&lt;br /&gt;문자열을 4개 단위로 자르면 &quot;abcabcabcabc3dede&quot; 가 됩니다.&lt;br /&gt;문자열을 6개 단위로 자를 경우 &quot;2abcabc2dedede&quot;가 되며, 이때의 길이가 14로 가장 짧습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입출력 예 #5&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열은 제일 앞부터 정해진 길이만큼 잘라야 합니다.&lt;br /&gt;따라서 주어진 문자열을 x / ababcdcd / ababcdcd 로 자르는 것은 불가능 합니다.&lt;br /&gt;이 경우 어떻게 문자열을 잘라도 압축되지 않으므로 가장 짧은 길이는 17이 됩니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[ 내코드 ]&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1641728095635&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;string&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;iostream&amp;gt;

using namespace std;

int solution(string s) {
    const size_t len = s.size();
    const size_t halfLen = s.size() / 2;
    int answer = len;

    for (int i = 1; i &amp;lt;= halfLen; i++)
    {
        int localAnswer = 0;

        int baseStartIdx = 0;
        int count = 1;

        for (int j = i; j &amp;lt; len; j += i)
        {
            if (s.substr(baseStartIdx, i) != s.substr(j, i))
            {
                if (count &amp;gt; 1) localAnswer += to_string(count).length();
                count = 1;

                localAnswer += s.substr(j, i).length();
                baseStartIdx = j;
            }
            else
            {
                count++;
            }
        }

        if (count &amp;gt; 1) localAnswer += to_string(count).length();
        localAnswer += i;

        if (answer &amp;gt; localAnswer) answer = localAnswer;
    }

    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm/문제풀이</category>
      <author>lee308812</author>
      <guid isPermaLink="true">https://staticvoidlife.tistory.com/361</guid>
      <comments>https://staticvoidlife.tistory.com/361#entry361comment</comments>
      <pubDate>Sun, 9 Jan 2022 20:35:52 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 로또의 최고 순위와 최저 순위</title>
      <link>https://staticvoidlife.tistory.com/356</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;입출력 예&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 80px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;lottos&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;win_nums&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;[44, 1, 0, 0, 31, 25]&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;[31, 10, 45, 1, 6, 19]&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;[3, 5]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;[0, 0, 0, 0, 0, 0]&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;[38, 19, 20, 40, 15, 25]&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;[1, 6]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;[45, 4, 35, 20, 3, 9]&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;[20, 9, 3, 45, 4, 35]&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;[1, 1]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0은 알 수 없는 번호일 때, 나올 수 있는 최고 순위/최저 순위를 출력하는 코드 작성하기.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;순위&lt;/td&gt;
&lt;td&gt;당첨 내용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;6개 번호가 모두 일치&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;5개 번호가 일치&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;4개 번호가 일치&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;3개 번호가 일치&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;2개 번호가 일치&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6(낙첨)&lt;/td&gt;
&lt;td&gt;그 외&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre id=&quot;code_1641039575491&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;string&amp;gt;
#include &amp;lt;vector&amp;gt;

using namespace std;

vector&amp;lt;int&amp;gt; solution(vector&amp;lt;int&amp;gt; lottos, vector&amp;lt;int&amp;gt; win_nums) {
    vector&amp;lt;int&amp;gt; answer;
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[ 풀이 ]&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 만약 lottos에 있는 한 번호가 win_nums에 존재하는 번호라면, 그 번호는 무조건 모두 일치하는 번호이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 0일 경우, 번호를 일치하게 만들거나 일치하지 않게 만드는 것이 모두 가능하다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1641039553451&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;string&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;algorithm&amp;gt;

using namespace std;

vector&amp;lt;int&amp;gt; solution(vector&amp;lt;int&amp;gt; lottos, vector&amp;lt;int&amp;gt; win_nums) {
    vector&amp;lt;int&amp;gt; answer(2, 0);
    
    for(int item : lottos)
    {
        if(item == 0)
            answer[0]++;
        else
        {
            if(std::find(win_nums.begin(), win_nums.end(), item) != win_nums.end())
            {
                answer[0]++;
                answer[1]++;
            }
        }
    }
    
    for(int&amp;amp; item : answer)
    {
        item = (lottos.size() - item) + 1;
        if(item &amp;gt; 6) item = 6;
    }
    
    return answer;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm/문제풀이</category>
      <author>lee308812</author>
      <guid isPermaLink="true">https://staticvoidlife.tistory.com/356</guid>
      <comments>https://staticvoidlife.tistory.com/356#entry356comment</comments>
      <pubDate>Sat, 1 Jan 2022 21:20:07 +0900</pubDate>
    </item>
    <item>
      <title>[Leetcode] Binary Tree Inorder Traversal</title>
      <link>https://staticvoidlife.tistory.com/283</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[ 정답 - 반복 버전 ]&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 초기 상태&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;331&quot; data-origin-height=&quot;322&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dS8rTx/btq8TQb9vMp/5Yb85VCvfSnSUl9GmrVHe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dS8rTx/btq8TQb9vMp/5Yb85VCvfSnSUl9GmrVHe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dS8rTx/btq8TQb9vMp/5Yb85VCvfSnSUl9GmrVHe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdS8rTx%2Fbtq8TQb9vMp%2F5Yb85VCvfSnSUl9GmrVHe1%2Fimg.png&quot; data-origin-width=&quot;331&quot; data-origin-height=&quot;322&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 현재 ptr을 포함하여, 더이상 내려갈 수 없을 때까지 왼쪽으로 내려가며 그 위치를 스택에 쌓는다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;468&quot; data-origin-height=&quot;349&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boizfA/btq8ZrPW3lx/0m4EfVzuJffux8qvBVnv7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boizfA/btq8ZrPW3lx/0m4EfVzuJffux8qvBVnv7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boizfA/btq8ZrPW3lx/0m4EfVzuJffux8qvBVnv7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboizfA%2Fbtq8ZrPW3lx%2F0m4EfVzuJffux8qvBVnv7K%2Fimg.png&quot; data-origin-width=&quot;468&quot; data-origin-height=&quot;349&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) Stack에서 하나를 꺼내고 정답 vector에 넣는다. 현재 ptr은 Stack에서 마지막에 꺼내진 4를 가리키고 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;479&quot; data-origin-height=&quot;402&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGoxfv/btq8ZI404zT/32IWJR7tWHOld3KpCoKehK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGoxfv/btq8ZI404zT/32IWJR7tWHOld3KpCoKehK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGoxfv/btq8ZI404zT/32IWJR7tWHOld3KpCoKehK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGoxfv%2Fbtq8ZI404zT%2F32IWJR7tWHOld3KpCoKehK%2Fimg.png&quot; data-origin-width=&quot;479&quot; data-origin-height=&quot;402&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) ptr을 현재 가리키고있는 ptr의 우측으로 이동한다. (여기서는 4의 우측 자손이 없으므로 ptr == nullptr일 것이다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5) 2),3) 4) 동작을 반복한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;( 반복 동작 - [Stack이 비어있지 않다 or 현재가 nullptr이 아니다]의 조건을 만족하는 동안 )&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 ptr == nullptr이므로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- [2) 왼쪽으로 더이상 내려갈 수 없을때까지 왼쪽으로 간다]는 수행되지 않을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- [3) 스택에서 하나 꺼내고 정답 vector에 넣는다]가 수행되어 Stack에서 2가 꺼내짐과 동시에 ptr은 2를 가리킬 것이다. 그리고 정답 vector에 2가 들어가게 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;466&quot; data-origin-height=&quot;398&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Kgp19/btq8Z0K4vsT/jZ7nNsK1FxPRsC1GHBIDQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Kgp19/btq8Z0K4vsT/jZ7nNsK1FxPRsC1GHBIDQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Kgp19/btq8Z0K4vsT/jZ7nNsK1FxPRsC1GHBIDQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKgp19%2Fbtq8Z0K4vsT%2FjZ7nNsK1FxPRsC1GHBIDQK%2Fimg.png&quot; data-origin-width=&quot;466&quot; data-origin-height=&quot;398&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- [4) ptr을 현재 가리키고 있는 ptr의 우측으로 이동한다]에 의해 5로 이동할 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[ 연습용 코드 ]&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1625575782419&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#define _CRT_SECURE_NO_WARNINGS

#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;stack&amp;gt;
#include &amp;lt;algorithm&amp;gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;set&amp;gt;

using namespace std;

struct TreeNode
{
	int val;
	TreeNode* left = nullptr;
	TreeNode* right = nullptr;

	TreeNode() : val(0) {}
	TreeNode(int x) : val(x) {}
	TreeNode(int x, TreeNode* left, TreeNode* right) : val(x), left(left), right(right) { }
};

class Solution {
public:
	vector&amp;lt;int&amp;gt; inorderTraversal(TreeNode* root)
	{
	}
};

int main()
{
	TreeNode n4(4, nullptr, nullptr);
	TreeNode n5(5, nullptr, nullptr);
	TreeNode n6(6, nullptr, nullptr);

	TreeNode n2(2, &amp;amp;n4, &amp;amp;n5);
	TreeNode n3(3, &amp;amp;n6, nullptr);

	TreeNode n1(1, &amp;amp;n2, &amp;amp;n3);

	Solution s;
	vector&amp;lt;int&amp;gt; result = s.inorderTraversal(&amp;amp;n1); // [4 2 5 1 6 3]

	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[ 정답 - 반복 버전 ]&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1625573061836&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/*
struct TreeNode
{
	int val;
	TreeNode* left = nullptr;
	TreeNode* right = nullptr;

	TreeNode() : val(0) {}
	TreeNode(int x) : val(x) {}
	TreeNode(int x, TreeNode* left, TreeNode* right) : val(x), left(left), right(right) { }
};
*/

class Solution {
public:
	vector&amp;lt;int&amp;gt; inorderTraversal(TreeNode* root)
	{
		stack&amp;lt;TreeNode*&amp;gt; s;
		vector&amp;lt;int&amp;gt; result;

		TreeNode* now = root;

		while (s.empty() == false || now != nullptr)
		{
			while (now != nullptr)
			{
				s.push(now);
				now = now-&amp;gt;left;
			}

			now = s.top();
			s.pop();
			result.push_back(now-&amp;gt;val);

			now = now-&amp;gt;right;
		}

		return result;
	}
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[ 정답 - 재귀버전 ]&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1625574516688&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/*
struct TreeNode
{
	int val;
	TreeNode* left = nullptr;
	TreeNode* right = nullptr;

	TreeNode() : val(0) {}
	TreeNode(int x) : val(x) {}
	TreeNode(int x, TreeNode* left, TreeNode* right) : val(x), left(left), right(right) { }
};
*/

class Solution {
public:
    vector&amp;lt;int&amp;gt; result;
    
    vector&amp;lt;int&amp;gt; inorderTraversal(TreeNode* root)
    {
        Inorder(root);
        
        return result;
    }
    
    void Inorder(TreeNode* root)
    {
        if(root == nullptr)
            return;
        
        Inorder(root-&amp;gt;left);
        result.push_back(root-&amp;gt;val);
        Inorder(root-&amp;gt;right);
    }
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm/Data Structure</category>
      <author>lee308812</author>
      <guid isPermaLink="true">https://staticvoidlife.tistory.com/283</guid>
      <comments>https://staticvoidlife.tistory.com/283#entry283comment</comments>
      <pubDate>Tue, 6 Jul 2021 21:23:55 +0900</pubDate>
    </item>
    <item>
      <title>[Leetcode] Binary Tree Preorder Traversal</title>
      <link>https://staticvoidlife.tistory.com/281</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[ 연습용 코드 ]&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1625576000427&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#define _CRT_SECURE_NO_WARNINGS

#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;stack&amp;gt;
#include &amp;lt;algorithm&amp;gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;set&amp;gt;

using namespace std;

struct TreeNode
{
	int val;
	TreeNode* left = nullptr;
	TreeNode* right = nullptr;

	TreeNode() : val(0) {}
	TreeNode(int x) : val(x) {}
	TreeNode(int x, TreeNode* left, TreeNode* right) : val(x), left(left), right(right) { }
};

class Solution {
public:
    vector&amp;lt;int&amp;gt; preorderTraversal(TreeNode* root)
    {
    }
};

int main()
{
	
	TreeNode n3(3, nullptr, nullptr);
	TreeNode n4(4, nullptr, nullptr);

	TreeNode n2(2, &amp;amp;n3, &amp;amp;n4);
	TreeNode n5(5, nullptr, nullptr);

	TreeNode n1(1, &amp;amp;n2, &amp;amp;n5);

	Solution s;
	vector&amp;lt;int&amp;gt; result = s.preorderTraversal(&amp;amp;n1); // [1 2 3 4 5]

	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[ Pre-order : 재귀버전 ]&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1625488050092&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
public:
	vector&amp;lt;int&amp;gt; result;

	vector&amp;lt;int&amp;gt; preorderTraversal(TreeNode* root)
	{
		if (root == nullptr)
			return result;

		result.push_back(root-&amp;gt;val);
		preorderTraversal(root-&amp;gt;left);
		preorderTraversal(root-&amp;gt;right);

		return result;
	}
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[ Pre-order : 반복문 버전 ]&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1625489012756&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;
class Solution {
public:
	vector&amp;lt;int&amp;gt; preorderTraversal(TreeNode* root)
	{
		stack&amp;lt;TreeNode*&amp;gt; s;
		vector&amp;lt;int&amp;gt; result;

		if (root == nullptr)
			return result;

		s.push(root);
		TreeNode* now = nullptr;

		while (s.empty() == false)
		{
			now = s.top();
			s.pop();

			result.push_back(now-&amp;gt;val);

			// LIFO 이므로 right를 먼저 넣는다.
			if (now-&amp;gt;right) s.push(now-&amp;gt;right);
			if (now-&amp;gt;left) s.push(now-&amp;gt;left);
		}

		return result;
	}
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm/Data Structure</category>
      <author>lee308812</author>
      <guid isPermaLink="true">https://staticvoidlife.tistory.com/281</guid>
      <comments>https://staticvoidlife.tistory.com/281#entry281comment</comments>
      <pubDate>Mon, 5 Jul 2021 21:44:53 +0900</pubDate>
    </item>
    <item>
      <title>[Leetcode] Find All Numbers Disappeared in an Array ★★★★★</title>
      <link>https://staticvoidlife.tistory.com/276</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Given an array&lt;span&gt;&amp;nbsp;&lt;/span&gt;nums&lt;span&gt;&amp;nbsp;&lt;/span&gt;of&lt;span&gt;&amp;nbsp;&lt;/span&gt;n&lt;span&gt;&amp;nbsp;&lt;/span&gt;integers where&lt;span&gt;&amp;nbsp;&lt;/span&gt;nums[i]&lt;span&gt;&amp;nbsp;&lt;/span&gt;is in the range&lt;span&gt;&amp;nbsp;&lt;/span&gt;[1, n], return&lt;span&gt;&amp;nbsp;&lt;/span&gt;an array of all the integers in the range&lt;span&gt;&amp;nbsp;&lt;/span&gt;[1, n]&lt;span&gt;&amp;nbsp;&lt;/span&gt;that do not appear in&lt;span&gt;&amp;nbsp;&lt;/span&gt;nums.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Example 1:&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Input:&lt;/b&gt; nums = [4,3,2,7,8,2,3,1]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Output:&lt;/b&gt; [5,6]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Example 2:&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Input:&lt;/b&gt; nums = [1,1]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Output:&lt;/b&gt; [2]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Constraints:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;n == nums.length&lt;/li&gt;
&lt;li&gt;1 &amp;lt;= n &amp;lt;= 105&lt;/li&gt;
&lt;li&gt;1 &amp;lt;= nums[i] &amp;lt;= n&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Follow up:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Could you do it without extra space and in&lt;span&gt;&amp;nbsp;&lt;/span&gt;O(n)&lt;span&gt;&amp;nbsp;&lt;/span&gt;runtime? You may assume the returned list does not count as extra space.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Hash기반의 unordered_set도 생각했으나 추가 메모리 공간의 정의 없이 O(n) 안에 해결하는 Solution이 아니므로 패스했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 도저히 어떻게 해야할지 몰라서 검색을 했는데, 추가 배열을 정의하지 않기 위해 nums의 각 원소값에 해당하는 index의 절대값-1 (최소값인 1이면 index 0에 매핑하기 위해서) 을 음수로 표기하는 방법으로 해결한 풀이가 있었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 입력은 1 이상만 들어오므로 가능한 방법인 것 같다. 매우 생소한 방법이었으므로 여러번 복습해두자.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[ 참고 코드 ]&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1624798740175&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
public:
    vector&amp;lt;int&amp;gt; findDisappearedNumbers(vector&amp;lt;int&amp;gt;&amp;amp; nums)
	{
		vector&amp;lt;int&amp;gt; resultVec;

		for (auto i = 0; i &amp;lt; nums.size(); i++)
		{
			int m = abs(nums[i]) - 1;
			nums[m] = -abs(nums[m]);
		}

		for (auto i = 0; i &amp;lt; nums.size(); i++)
		{
			if (nums[i] &amp;gt; 0)
				resultVec.push_back(i + 1);
		}

		return resultVec;
    }
};&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm/문제풀이</category>
      <author>lee308812</author>
      <guid isPermaLink="true">https://staticvoidlife.tistory.com/276</guid>
      <comments>https://staticvoidlife.tistory.com/276#entry276comment</comments>
      <pubDate>Sun, 27 Jun 2021 21:59:08 +0900</pubDate>
    </item>
    <item>
      <title>[Leetcode] Third Maximum Number</title>
      <link>https://staticvoidlife.tistory.com/275</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Given integer array&lt;span&gt;&amp;nbsp;&lt;/span&gt;nums, return&lt;span&gt;&amp;nbsp;&lt;/span&gt;the third maximum number in this array. If the third maximum does not exist, return the maximum number.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Example 1:&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Input:&lt;/b&gt; nums = [3,2,1]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Output:&lt;/b&gt; 1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Explanation:&lt;/b&gt; The third maximum is 1.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Example 2:&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Input:&lt;/b&gt; nums = [1,2]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Output:&lt;/b&gt; 2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Explanation:&lt;/b&gt; The third maximum does not exist, so the maximum (2) is returned instead.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Example 3:&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Input:&lt;/b&gt; nums = [2,2,3,1]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Output:&lt;/b&gt; 1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Explanation:&lt;/b&gt; Note that the third maximum here means the third maximum distinct number. Both numbers with value 2 are both considered as second maximum.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Constraints:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1 &amp;lt;= nums.length &amp;lt;= 104&lt;/li&gt;
&lt;li&gt;-231&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lt;= nums[i] &amp;lt;= 231&lt;span&gt;&amp;nbsp;&lt;/span&gt;- 1&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Follow up:&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Can you find an&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;O(n)&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;solution?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[ 내 코드 ]&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- O(n)으로 풀려고 많은 고민을 했는데, 결국 std::set를 이용해서 O(nlogn)으로 풀었다..&lt;/p&gt;
&lt;pre id=&quot;code_1624789702936&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
public:
    int thirdMax(vector&amp;lt;int&amp;gt;&amp;amp; nums)
    {
        set&amp;lt;int&amp;gt; s;
        for(int num : nums)
        {
            s.insert(num);
        }

        int maxVal = numeric_limits&amp;lt;int&amp;gt;::min();
        int cnt = 0;
        for(auto it = s.rbegin(); it != s.rend(); ++it)
        {
            cnt++;
            maxVal = std::max(maxVal, *it);
            if(cnt == 3) return *it;
        }

        return maxVal;
    }
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수행속도 상위 코드는 그냥 정렬로 풀어져 있었고,&lt;/p&gt;
&lt;pre id=&quot;code_1624789835751&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
public:
    int thirdMax(vector&amp;lt;int&amp;gt;&amp;amp; nums) {
        int saveIndex = 0;
        int times = 0;
        sort(nums.begin(), nums.end(), std::greater&amp;lt;int&amp;gt;());
        for (int i = 0; i &amp;lt; nums.size() - 1; i++){
            if (nums[i] != nums[i + 1]){
                times++;
                }
            if (times == 2){
                saveIndex = i + 1;
                break;
                }
        }
        return nums[saveIndex];
    }
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수행속도 최상위 코드는 봤는데, 그냥 쌩구현으로 풀었다.&lt;/p&gt;
&lt;pre id=&quot;code_1624789808583&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
public:
    int thirdMax(vector&amp;lt;int&amp;gt;&amp;amp; nums) {
        long first = LONG_MIN, second = LONG_MIN, third = LONG_MIN;
        
        for(auto const&amp;amp; x: nums){
            if(x != first &amp;amp;&amp;amp; x!= second &amp;amp;&amp;amp; x!= third){
                if(x &amp;gt; second){
                    if(x &amp;gt; first)
                        third = second, second = first, first = x;
                    else
                        third = second, second = x;
                }
                else{
                    if(x &amp;gt; third)
                        third = x;
                }
            }
        }
        
        if(third != LONG_MIN) return third;
        else return max(first, second);
    }
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm/문제풀이</category>
      <author>lee308812</author>
      <guid isPermaLink="true">https://staticvoidlife.tistory.com/275</guid>
      <comments>https://staticvoidlife.tistory.com/275#entry275comment</comments>
      <pubDate>Sun, 27 Jun 2021 19:31:06 +0900</pubDate>
    </item>
    <item>
      <title>[Leetcode] Replace Elements with Greatest Element on Right Side</title>
      <link>https://staticvoidlife.tistory.com/273</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Given an array&lt;span&gt;&amp;nbsp;&lt;/span&gt;arr,&amp;nbsp;replace every element in that array with the greatest element among the elements to its&amp;nbsp;right, and replace the last element with&lt;span&gt;&amp;nbsp;&lt;/span&gt;-1.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;After doing so, return the array.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Example 1:&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Input:&lt;/b&gt; arr = [17,18,5,4,6,1]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Output:&lt;/b&gt; [18,6,6,6,1,-1]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Explanation:&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- index 0 --&amp;gt; the greatest element to the right of index 0 is index 1 (18).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- index 1 --&amp;gt; the greatest element to the right of index 1 is index 4 (6).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- index 2 --&amp;gt; the greatest element to the right of index 2 is index 4 (6).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- index 3 --&amp;gt; the greatest element to the right of index 3 is index 4 (6).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- index 4 --&amp;gt; the greatest element to the right of index 4 is index 5 (1).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- index 5 --&amp;gt; there are no elements to the right of index 5, so we put -1.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Example 2:&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Input:&lt;/b&gt; arr = [400]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Output:&lt;/b&gt; [-1]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Explanation:&lt;/b&gt; There are no elements to the right of index 0.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Constraints:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1 &amp;lt;= arr.length &amp;lt;= 104&lt;/li&gt;
&lt;li&gt;1 &amp;lt;= arr[i] &amp;lt;= 105&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[ 내 코드 ]&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1624698529635&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
public:
    vector&amp;lt;int&amp;gt; replaceElements(vector&amp;lt;int&amp;gt;&amp;amp; arr)
    {
		size_t size = arr.size();
		int localMax = -1;

		for (int i = size - 1; i &amp;gt;= 0; i--)
		{
			int tmpValue = arr[i];
			arr[i] = localMax;

			localMax = std::max(localMax, tmpValue);
		}

		return arr;
    }
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 따로 max 함수를 구현해도 되지만, &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;std::max&lt;/b&gt;&lt;/span&gt;를 쓰면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 오른쪽부터 계산하면 O(N)으로 폴 수 있다. 배열 관련 문제가 나오면 반대 순서로 탐색하는 방법도 생각해 볼 수 있도록 해야 할 듯.&lt;/p&gt;</description>
      <category>Algorithm/문제풀이</category>
      <author>lee308812</author>
      <guid isPermaLink="true">https://staticvoidlife.tistory.com/273</guid>
      <comments>https://staticvoidlife.tistory.com/273#entry273comment</comments>
      <pubDate>Sat, 26 Jun 2021 18:10:47 +0900</pubDate>
    </item>
    <item>
      <title>[Leetcode] Check If N and Its Double Exist ★★</title>
      <link>https://staticvoidlife.tistory.com/271</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Given an array&lt;span&gt;&amp;nbsp;&lt;/span&gt;arr&lt;span&gt;&amp;nbsp;&lt;/span&gt;of integers, check if there exists two integers&lt;span&gt;&amp;nbsp;&lt;/span&gt;N&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;M&lt;span&gt;&amp;nbsp;&lt;/span&gt;such that&lt;span&gt;&amp;nbsp;&lt;/span&gt;N&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the double of&lt;span&gt;&amp;nbsp;&lt;/span&gt;M&lt;span&gt;&amp;nbsp;&lt;/span&gt;( i.e.&lt;span&gt;&amp;nbsp;&lt;/span&gt;N = 2 * M).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;More formally check if there exists&amp;nbsp;two indices&lt;span&gt;&amp;nbsp;&lt;/span&gt;i&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;j&lt;span&gt;&amp;nbsp;&lt;/span&gt;such that :&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;i != j&lt;/li&gt;
&lt;li&gt;0 &amp;lt;= i, j &amp;lt; arr.length&lt;/li&gt;
&lt;li&gt;arr[i] == 2 * arr[j]&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Example 1:&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Input:&lt;/b&gt; arr = [10,2,5,3]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Output:&lt;/b&gt; true&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Explanation:&lt;/b&gt; N = 10 is the double of M = 5,that is, 10 = 2 * 5.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Example 2:&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Input:&lt;/b&gt; arr = [7,1,14,11]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Output:&lt;/b&gt; true&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Explanation:&lt;/b&gt; N = 14 is the double of M = 7,that is, 14 = 2 * 7.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Example 3:&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Input:&lt;/b&gt; arr = [3,1,7,11]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Output:&lt;/b&gt; false&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Explanation:&lt;/b&gt; In this case does not exist N and M, such that N = 2 * M.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Constraints:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2 &amp;lt;= arr.length &amp;lt;= 500&lt;/li&gt;
&lt;li&gt;-10^3 &amp;lt;= arr[i] &amp;lt;= 10^3&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1624691122065&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
public:
    bool checkIfExist(vector&amp;lt;int&amp;gt;&amp;amp; arr)
    {
        size_t size = arr.size();

        unordered_set&amp;lt;int&amp;gt; s;

        for (size_t i = 0; i &amp;lt; size; i++)
        {
            int num = arr[i] * 2;

            if (s.find(num) != s.end())
                return true;

            if (arr[i] % 2 == 0)
            {
                if (s.find(arr[i] / 2) != s.end())
                    return true;
            }

            s.insert(arr[i]);
        }

        return false;
    }
};&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;unordered_set&lt;/span&gt; : set과 달리 정렬되지 않고, Hash 함수 기반의 set&lt;/b&gt;&lt;/h4&gt;</description>
      <category>Algorithm/문제풀이</category>
      <author>lee308812</author>
      <guid isPermaLink="true">https://staticvoidlife.tistory.com/271</guid>
      <comments>https://staticvoidlife.tistory.com/271#entry271comment</comments>
      <pubDate>Sat, 26 Jun 2021 16:07:45 +0900</pubDate>
    </item>
    <item>
      <title>[Leetcode] Duplicate Zeros</title>
      <link>https://staticvoidlife.tistory.com/270</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Given a fixed length&amp;nbsp;array&lt;span&gt;&amp;nbsp;&lt;/span&gt;arr&lt;span&gt;&amp;nbsp;&lt;/span&gt;of integers, duplicate each occurrence of zero, shifting the remaining elements to the right.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Note that elements beyond the length of the original array are not written.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Do the above modifications to the input array&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;in place&lt;/b&gt;, do not return anything from your function.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Example 1:&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Input: &lt;/b&gt;&lt;span&gt;[1,0,2,3,0,4,5,0]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Output: &lt;/b&gt;null&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Explanation: &lt;/b&gt;After calling your function, the &lt;b&gt;input&lt;/b&gt; array is modified to: &lt;span&gt;[1,0,0,2,3,0,0,4]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Example 2:&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Input: &lt;/b&gt;&lt;span&gt;[1,2,3]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Output: &lt;/b&gt;null&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Explanation: &lt;/b&gt;After calling your function, the &lt;b&gt;input&lt;/b&gt; array is modified to: &lt;span&gt;[1,2,3]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Note:&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1 &amp;lt;= arr.length &amp;lt;= 10000&lt;/li&gt;
&lt;li&gt;0 &amp;lt;= arr[i] &amp;lt;= 9&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[ 내 코드 ]&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1624690765794&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
public:
	void duplicateZeros(vector&amp;lt;int&amp;gt;&amp;amp; arr)
	{
		size_t size = arr.size();

		for (int i = 0; i &amp;lt; size - 1; i++)
		{
			if (arr[i] == 0)
			{
				for (int j = size - 2; j &amp;gt;= i; j--)
				{
					arr[j + 1] = arr[j];
				}

				i++;
			}			
		}
	}
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 똑같은 값이 삽입되어야 하는데, &lt;u&gt;&lt;b&gt;뒤에서부터 밀어야 함에 유의&lt;/b&gt;&lt;/u&gt;해야 한다.&lt;/p&gt;</description>
      <category>Algorithm/문제풀이</category>
      <author>lee308812</author>
      <guid isPermaLink="true">https://staticvoidlife.tistory.com/270</guid>
      <comments>https://staticvoidlife.tistory.com/270#entry270comment</comments>
      <pubDate>Sat, 26 Jun 2021 16:00:10 +0900</pubDate>
    </item>
  </channel>
</rss>