<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>FU11M00N</title>
    <link>https://nevertrustbrutus.tistory.com/</link>
    <description> 감사합니다.
</description>
    <language>ko</language>
    <pubDate>Wed, 8 Apr 2026 14:38:32 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>호IT</managingEditor>
    <image>
      <title>FU11M00N</title>
      <url>https://tistory1.daumcdn.net/tistory/3355113/attach/a6955a27b2e742c7b01ed40dd8c078a3</url>
      <link>https://nevertrustbrutus.tistory.com</link>
    </image>
    <item>
      <title>[LeetCode] Clone Graph - Javascript</title>
      <link>https://nevertrustbrutus.tistory.com/526</link>
      <description>&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;Clone&amp;nbsp;Graph&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;[주어지는 그래프 복제하기]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;689&quot; data-origin-height=&quot;482&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Whlwc/btst5ty158B/MvsTSJFeTvNOZZ6NHXnjZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Whlwc/btst5ty158B/MvsTSJFeTvNOZZ6NHXnjZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Whlwc/btst5ty158B/MvsTSJFeTvNOZZ6NHXnjZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWhlwc%2Fbtst5ty158B%2FMvsTSJFeTvNOZZ6NHXnjZ1%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;689&quot; height=&quot;482&quot; data-origin-width=&quot;689&quot; data-origin-height=&quot;482&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;&lt;b&gt;제약 조건&amp;nbsp;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1694699019917&quot; class=&quot;javascript&quot; style=&quot;color: #666666; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;The number of nodes in the graph is in the range [0, 100].
1 &amp;lt;= Node.val &amp;lt;= 100
Node.val is unique for each node.
There are no repeated edges and no self-loops in the graph.
The Graph is connected and all nodes can be visited starting from the given node.&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Example&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;710&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOj2K6/btst6nysEX6/4VYMl82tdzDWOKzWWW7KkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOj2K6/btst6nysEX6/4VYMl82tdzDWOKzWWW7KkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOj2K6/btst6nysEX6/4VYMl82tdzDWOKzWWW7KkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOj2K6%2Fbtst6nysEX6%2F4VYMl82tdzDWOKzWWW7KkK%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;700&quot; height=&quot;710&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;710&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;971&quot; data-origin-height=&quot;300&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/712RT/btst5t6SVAD/7scOU1PenKOaitdqaucZkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/712RT/btst5t6SVAD/7scOU1PenKOaitdqaucZkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/712RT/btst5t6SVAD/7scOU1PenKOaitdqaucZkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F712RT%2Fbtst5t6SVAD%2F7scOU1PenKOaitdqaucZkk%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;971&quot; height=&quot;300&quot; data-origin-width=&quot;971&quot; data-origin-height=&quot;300&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;559&quot; data-origin-height=&quot;116&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u35tJ/btst0zfjMu1/4g6Ia5uVUQpCEh7gWt2pD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u35tJ/btst0zfjMu1/4g6Ia5uVUQpCEh7gWt2pD1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u35tJ/btst0zfjMu1/4g6Ia5uVUQpCEh7gWt2pD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu35tJ%2Fbtst0zfjMu1%2F4g6Ia5uVUQpCEh7gWt2pD1%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;559&quot; height=&quot;116&quot; data-origin-width=&quot;559&quot; data-origin-height=&quot;116&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 접근 방식&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;node의 neighbors를 돌고 또 거기에 존재하는 neighbors가 존재하기에, 재귀 방식의 dfs로 문제 풀이가 가능했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;visited 객체를 생성해 순회하고 있는 노드가 방문한 노드인지 확인한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;node.val 값을 key로 지정해 주어지는 노드를 복제할 생각으로 코드를 작성했다.&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;주어지는&amp;nbsp;노드를&amp;nbsp;복제하고,&amp;nbsp;해당&amp;nbsp;노드의&amp;nbsp;neighbors들을&amp;nbsp;재귀&amp;nbsp;호출해&amp;nbsp;복제를&amp;nbsp;한다.&lt;br /&gt;만약 이미 visited 객체에 존재할 경우 리턴을 해 중복 순회가 일어나지 않도록 하고,&lt;br /&gt;아니라면 해당 노드를 복제하고 visited에 등록한다.&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;node가&amp;nbsp;없을&amp;nbsp;경우&amp;nbsp;예외&amp;nbsp;처리를&amp;nbsp;위해&amp;nbsp;node가&amp;nbsp;null이라면&amp;nbsp;그대로&amp;nbsp;node를&amp;nbsp;리턴하도록&amp;nbsp;한다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;sovle 코드&lt;/h3&gt;
&lt;pre id=&quot;code_1694699019924&quot; class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
 * // Definition for a Node.
 * function Node(val, neighbors) {
 *    this.val = val === undefined ? 0 : val;
 *    this.neighbors = neighbors === undefined ? [] : neighbors;
 * };
 */

/**
 * @param {Node} node
 * @return {Node}
 */
var cloneGraph = function(node) {
    
    var visited = {};
    
    let dfs = function(node) {
        if (!node){
            return node;
        }

        if (visited[node.val]!=null){
            return visited[node.val];
        } 
        
        let root = new Node(node.val);

        visited[node.val] = root;

        for (let n of node.neighbors) {
            root.neighbors.push(dfs(n));
        }

        return root;
    }
    
    return dfs(node);
};&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;</description>
      <category>알고리즘</category>
      <author>호IT</author>
      <guid isPermaLink="true">https://nevertrustbrutus.tistory.com/526</guid>
      <comments>https://nevertrustbrutus.tistory.com/526#entry526comment</comments>
      <pubDate>Thu, 14 Sep 2023 23:05:55 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode] Kth Largest Element in an Array - Javascript</title>
      <link>https://nevertrustbrutus.tistory.com/525</link>
      <description>&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Kth&amp;nbsp;Largest&amp;nbsp;Element&amp;nbsp;in&amp;nbsp;an&amp;nbsp;Array&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;[정렬을 하지 않고 k 번째로 큰 수 찾기]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;112&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8Luha/btstxnAJs4K/xWCT8zKIg69Ue7BokV2SoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8Luha/btstxnAJs4K/xWCT8zKIg69Ue7BokV2SoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8Luha/btstxnAJs4K/xWCT8zKIg69Ue7BokV2SoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8Luha%2FbtstxnAJs4K%2FxWCT8zKIg69Ue7BokV2SoK%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;594&quot; height=&quot;112&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;112&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;&lt;b&gt;제약 조건&amp;nbsp;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1694442855044&quot; class=&quot;javascript&quot; style=&quot;color: #666666; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1 &amp;lt;= k &amp;lt;= nums.length &amp;lt;= 10^5
-10^4 &amp;lt;= nums[i] &amp;lt;= 10^4&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Example&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1694442855045&quot; class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ex1) Input: nums = [3,2,1,5,6,4], k = 2
     Output: 5
 

ex2) Input: nums = [3,2,3,1,2,4,5,5,6], k = 4
     Output: 4&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 접근 방식&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;정렬을&amp;nbsp;하지&amp;nbsp;않고&amp;nbsp;k&amp;nbsp;번째로&amp;nbsp;큰&amp;nbsp;값을&amp;nbsp;구하는&amp;nbsp;문제이다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;해당 문제는 Heapify의 특성을 이용해 문제를 풀이할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Heapify 작업은 마지막 노드의 부모 노드를 루트로 하는 서브 트리를 힙 조건을 만족하도록 조정하는 것이다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이러한 특성을 이용해 서브 트리의 루트가 되는 노드를 하나씩 앞으로 이동하며 서브 트리를 힙로 하나씩 변경하는 행위를&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;bubble down이라고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;또한, 해당 구조의&amp;nbsp;배열에서 왼쪽 자식 노드를 찾고 싶다면 arr[2i+1]을 하면 되고, &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;오른쪽 자식 노드는 arr[2i+2]를 하면 자식을 찾을 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;코드 설명은 아래와 같다.&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;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;맨&amp;nbsp;처음&amp;nbsp;배열의&amp;nbsp;중간&amp;nbsp;인덱스를&amp;nbsp;mid에&amp;nbsp;저장한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;후에 bubbleDown 함수를 사용하며 배열을 정렬할 건데, 이때 시작점을 중간 인덱스로 시작하는 것이다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그 후 반복문으로 중간 인덱스부터 시작하여 배열을 힙 구조로 정렬한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(현재 배열은 아무런 정렬도 되어있지 않은 무작위 배열이다.)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;bubbleDown 함수 내에선, 주어지는 인덱스를 기준으로 힙 특성을 유지하도록 배열을 재정렬한다.&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;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;위의&amp;nbsp;특성을&amp;nbsp;이용해&amp;nbsp;왼쪽&amp;nbsp;자식과&amp;nbsp;오른쪽&amp;nbsp;자식을&amp;nbsp;비교하며&amp;nbsp;가장&amp;nbsp;큰&amp;nbsp;값을&amp;nbsp;가진&amp;nbsp;자식과&amp;nbsp;swap&amp;nbsp;함수를&amp;nbsp;호출해&amp;nbsp;교환을&amp;nbsp;하고,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;bubbleDown 함수를 재귀 호출해 반복한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이렇게 for 반복문을 나오게 되면, 가장 큰 k의 값을 구하기 위해 while(k--)을 통해 가장 큰 값을 구하는 작업을 하는데,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;swap(0, nums.length-1)를 통해 배열의 제일 처음 인덱스와 마지막 인덱스를 교환하면서 가장 큰 인덱스를 가진 배열로 이동시키고&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;해당&amp;nbsp;상태가&amp;nbsp;되었으면&amp;nbsp;result에&amp;nbsp;가장&amp;nbsp;큰&amp;nbsp;값을&amp;nbsp;저장한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그 후 bubbleDown(0)을 해주는 이유는 가장 큰 값을 가진 인덱스를 배열 맨 위로 오게 해서 다시 힙 구조를 유지하도록 해주는 것이다.&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;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;해당&amp;nbsp;문제를&amp;nbsp;풀이하기&amp;nbsp;위해,&amp;nbsp;혼자서&amp;nbsp;많은&amp;nbsp;시간을&amp;nbsp;고군분투하며&amp;nbsp;코드를&amp;nbsp;작성했었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;뭔가 글로 작성하기 애매한 트러블이 많이 발생 해 이상한곳에서 시간을 많이 쏟기도 했었다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;대략적인 힙 코드는 작성했지만 테스트케이스 전부 통과가 되지 않는 경우가 발생해 다른 풀이를 참고하며, &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;코드의 구조나 틀린 곳은 조금 수정하여 풀었다..&lt;/span&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;&lt;b&gt;solve 전체 코드&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1694442855052&quot; class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var findKthLargest = function (nums, k) {
   const mid = Math.floor(nums.length / 2);

   for (let i = mid; i &amp;gt;= 0; i--) {
      bubbleDown(i);
   }

   let result;

   while (k--) {
      swap(0, nums.length - 1);
      result = nums.pop();
      bubbleDown(0);
   }

   function bubbleDown(i) {
      const leftChild = 2 * i + 1;
      const rightChild = 2 * i + 2;
      let max = i;

      if (leftChild &amp;lt; nums.length &amp;amp;&amp;amp; nums[leftChild] &amp;gt; nums[max]) {
         max = leftChild;
      }
      if (rightChild &amp;lt; nums.length &amp;amp;&amp;amp; nums[rightChild] &amp;gt; nums[max]) {
         max = rightChild;
      }

      if (max !== i) {
         swap(i, max);
         bubbleDown(max);
      }
   }

   function swap(i, j) {
      [nums[i], nums[j]] = [nums[j], nums[i]];
   }

   return result;
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <author>호IT</author>
      <guid isPermaLink="true">https://nevertrustbrutus.tistory.com/525</guid>
      <comments>https://nevertrustbrutus.tistory.com/525#entry525comment</comments>
      <pubDate>Mon, 11 Sep 2023 23:33:57 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode] Implement Trie (Prefix Tree) - Javascript</title>
      <link>https://nevertrustbrutus.tistory.com/524</link>
      <description>&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Implement&amp;nbsp;Trie&amp;nbsp;(Prefix&amp;nbsp;Tree)&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;[Trie 자료구조]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;314&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmMDrs/btstHdpWyR6/91nOfyI3rpAaD7P1UcrMSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmMDrs/btstHdpWyR6/91nOfyI3rpAaD7P1UcrMSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmMDrs/btstHdpWyR6/91nOfyI3rpAaD7P1UcrMSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmMDrs%2FbtstHdpWyR6%2F91nOfyI3rpAaD7P1UcrMSK%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;658&quot; height=&quot;314&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;314&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;&lt;b&gt;제약 조건&amp;nbsp;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1694425734737&quot; class=&quot;javascript&quot; style=&quot;color: #666666; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1 &amp;lt;= word.length, prefix.length &amp;lt;= 2000
word and prefix consist only of lowercase English letters.
At most 3 * 10^4 calls in total will be made to insert, search, and startsWith.&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Example&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1694425734738&quot; class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ex1) Input
     [&quot;Trie&quot;, &quot;insert&quot;, &quot;search&quot;, &quot;search&quot;, &quot;startsWith&quot;, &quot;insert&quot;, &quot;search&quot;]
     [[], [&quot;apple&quot;], [&quot;apple&quot;], [&quot;app&quot;], [&quot;app&quot;], [&quot;app&quot;], [&quot;app&quot;]]
     Output
     [null, null, true, false, true, null, true

	Explanation
	Trie trie = new Trie();
	trie.insert(&quot;apple&quot;);
	trie.search(&quot;apple&quot;);   // return True
	trie.search(&quot;app&quot;);     // return False
	trie.startsWith(&quot;app&quot;); // return True
	trie.insert(&quot;app&quot;);
	trie.search(&quot;app&quot;);     // return True&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 접근 방식&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;트라이 자료구조는 문자열을 저장하고 탐색하기 위한 트리모양의 자료구조이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;보통 문자열 탐색에 많이 사용된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다만, 문자마다 노드를 만들기에 저장공간이 많이 사용된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;트라이 자료구조를 이용해 insert, search, startsWith를 구현해야한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;구현할때 아래와 같은 특성을 고려해 풀이를 해야한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;주어지는&amp;nbsp;예시를&amp;nbsp;봤을&amp;nbsp;때,&amp;nbsp;trie.insert를&amp;nbsp;통해&amp;nbsp;'apple'&amp;nbsp;문자열을&amp;nbsp;삽입하고,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;'apple' 문자열을 trie.search 했을 때 true가 리턴되며 'app'을 search 했을 땐 false가 리턴돼야 한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;또 'app'문자열을 trie.startWith 했을 땐 true를 리턴하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;각각의 메서드 기능들은 아래와 같은 개념을 생각하며 구현했다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #dddddd;&quot;&gt;insert&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;반복문을&amp;nbsp;사용해&amp;nbsp;각&amp;nbsp;노드를&amp;nbsp;탐색하면서,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;현재 노드가 존재하지는 지 확인하고 존재한다면 이어서 탐색을 하고,&amp;nbsp;존재하지 않으면 새로운 노드를 생성한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;탐색이 끝난 후 마지막에 있는 노드의 curr.isWord의 값을 true로 만들어 현재 문자열의 끝 지점이라는 것을 알려준다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;search&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;반복문을 사용해 각 노드를 탐색하면서,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;현재 트라이에 해당 문자가 있는지 탐색한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;만약 해당 문자가 존재하는 경우 계속 이어서 탐색하고 존재하지 않는다면 false를 리턴한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;반복문이 종료될 때 해당 문자가 마지막인지 알려주는 isWord를 리턴해 true를 리턴한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;startWith&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;반복문을&amp;nbsp;사용해&amp;nbsp;각&amp;nbsp;노드를&amp;nbsp;탐색하면서,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;현재&amp;nbsp;트라이에&amp;nbsp;해당&amp;nbsp;문자가&amp;nbsp;있는지&amp;nbsp;탐색한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;만약&amp;nbsp;해당&amp;nbsp;문자가&amp;nbsp;존재하는&amp;nbsp;경우&amp;nbsp;계속&amp;nbsp;이어서&amp;nbsp;탐색하고&amp;nbsp;존재하지&amp;nbsp;않는다면&amp;nbsp;false를&amp;nbsp;리턴한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;반복문이 종료될 때 false가 리턴되지 않았다면 해당 문자열이 존재한다는 의미이기에&amp;nbsp;true를 리턴한다.(search 방법과 리턴 형식만 다름.)&lt;/span&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;&lt;b&gt;solve 전체 코드&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1694425734745&quot; class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class TrieNode {
   constructor() {
      this.children = {};
      this.isWord = false;
   }
}

var Trie = function () {
   this.root = new TrieNode();
};

/**
 * @param {string} word
 * @return {void}
 */
Trie.prototype.insert = function (word) {
   let curr = this.root;
   for (let c of word) {
      if (curr.children[c] == null) {
         curr.children[c] = new TrieNode();
      }
      curr = curr.children[c];
   }

   curr.isWord = true;
};

/**
 * @param {string} word
 * @return {boolean}
 */
Trie.prototype.search = function (word) {
   let curr = this.root;
   for (let c of word) {
      if (curr.children[c] != null) {
         curr = curr.children[c];
      } else {
         return false;
      }
   }

   return curr.isWord;
};

/**
 * @param {string} prefix
 * @return {boolean}
 */
Trie.prototype.startsWith = function (prefix) {
   let curr = this.root;
   for (let c of prefix) {
      if (curr.children[c] != null) {
         curr = curr.children[c];
      } else {
         return false;
      }
   }

   return true;
};

/**
 * Your Trie object will be instantiated and called as such:
 * var obj = new Trie()
 * obj.insert(word)
 * var param_2 = obj.search(word)
 * var param_3 = obj.startsWith(prefix)
 */&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <author>호IT</author>
      <guid isPermaLink="true">https://nevertrustbrutus.tistory.com/524</guid>
      <comments>https://nevertrustbrutus.tistory.com/524#entry524comment</comments>
      <pubDate>Mon, 11 Sep 2023 20:16:03 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode] Average of Levels in Binary Tree - Javascript</title>
      <link>https://nevertrustbrutus.tistory.com/523</link>
      <description>&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;Average&amp;nbsp;of&amp;nbsp;Levels&amp;nbsp;in&amp;nbsp;Binary&amp;nbsp;Tree&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;[이진트리의 각 레벨에서의 평균 값 구하기]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;67&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGvVyg/btsts3Acsf2/dD83tQn2AesaUKkGyVNaC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGvVyg/btsts3Acsf2/dD83tQn2AesaUKkGyVNaC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGvVyg/btsts3Acsf2/dD83tQn2AesaUKkGyVNaC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGvVyg%2Fbtsts3Acsf2%2FdD83tQn2AesaUKkGyVNaC0%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;658&quot; height=&quot;67&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;67&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;&lt;b&gt;제약 조건&amp;nbsp;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1694105421675&quot; class=&quot;javascript&quot; style=&quot;color: #666666; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;The number of nodes in the tree is in the range [1, 10^4].
-2^31 &amp;lt;= Node.val &amp;lt;= 2^31 - 1&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Example&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;636&quot; data-origin-height=&quot;464&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blMUEU/btstggWb1FS/vpNUPdXrhlBU3cUqfWgV00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blMUEU/btstggWb1FS/vpNUPdXrhlBU3cUqfWgV00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blMUEU/btstggWb1FS/vpNUPdXrhlBU3cUqfWgV00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblMUEU%2FbtstggWb1FS%2FvpNUPdXrhlBU3cUqfWgV00%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;636&quot; height=&quot;464&quot; data-origin-width=&quot;636&quot; data-origin-height=&quot;464&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;366&quot; data-origin-height=&quot;416&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBwPFh/btstmFHnOiP/IjwrFZPsPathU50fNpvKF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBwPFh/btstmFHnOiP/IjwrFZPsPathU50fNpvKF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBwPFh/btstmFHnOiP/IjwrFZPsPathU50fNpvKF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBwPFh%2FbtstmFHnOiP%2FIjwrFZPsPathU50fNpvKF1%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;366&quot; height=&quot;416&quot; data-origin-width=&quot;366&quot; data-origin-height=&quot;416&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 접근 방식&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에 풀었던 방식처럼 재귀를 이용해서 풀면 될 것 같았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재귀 함수 내에서는 sms[level]에 값을 넣을 때 data.val의 합계를 넣는다&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;636&quot; data-origin-height=&quot;464&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blMUEU/btstggWb1FS/vpNUPdXrhlBU3cUqfWgV00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blMUEU/btstggWb1FS/vpNUPdXrhlBU3cUqfWgV00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blMUEU/btstggWb1FS/vpNUPdXrhlBU3cUqfWgV00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblMUEU%2FbtstggWb1FS%2FvpNUPdXrhlBU3cUqfWgV00%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;636&quot; height=&quot;464&quot; data-origin-width=&quot;636&quot; data-origin-height=&quot;464&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의&amp;nbsp;사진을&amp;nbsp;예시로&amp;nbsp;했을&amp;nbsp;때,&amp;nbsp;sum[3,29,22]가&amp;nbsp;들어가게&amp;nbsp;된다.&lt;br /&gt;sum 배열의 0부터 2까지의 레벨은 각각 트리의 레벨을 의미한다.&lt;br /&gt;&lt;br /&gt;cnt 배열에는 각 레벨의 노드의 개수가 들어간다.&lt;br /&gt;예시로&amp;nbsp;들자면&amp;nbsp;cnt[1,2,2]가&amp;nbsp;들어가게&amp;nbsp;된다.&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;연산을&amp;nbsp;하는&amp;nbsp;이유는&amp;nbsp;평균값을&amp;nbsp;구해야&amp;nbsp;하기에&amp;nbsp;노드의&amp;nbsp;개수를&amp;nbsp;저장하는&amp;nbsp;것이다.&lt;br /&gt;재귀 호출이 모두 끝난 후 마지막으로 aver 배열에 합계를 구한&lt;br /&gt;sum 배열과 노드의 개수가 들어간 cnt 변수를 나누기해 각 트리의 레벨의 평균값을 구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;solve 코드&lt;/h3&gt;
&lt;pre id=&quot;code_1694105421679&quot; class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var averageOfLevels = function(root) {
    const cnt = [];
    const sums = [];
    const aver = [];
    const recursive = (data, level) =&amp;gt; {
        if (!data){
            return null
        } 
        if (sums[level] == undefined) {
            sums[level] = 0
            cnt[level] = 0
        }
        sums[level] += data.val
        cnt[level] += 1

        recursive(data.left, level + 1)
        recursive(data.right, level + 1)
    }

    recursive(root, 0)

    for (let i=0; i&amp;lt;cnt.length; i++) {
        aver.push(sums[i]/cnt[i])
    }

    return aver;
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <author>호IT</author>
      <guid isPermaLink="true">https://nevertrustbrutus.tistory.com/523</guid>
      <comments>https://nevertrustbrutus.tistory.com/523#entry523comment</comments>
      <pubDate>Fri, 8 Sep 2023 02:22:25 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode] Binary Tree Right Side View - Javascript</title>
      <link>https://nevertrustbrutus.tistory.com/522</link>
      <description>&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;Binary&amp;nbsp;Tree&amp;nbsp;Right&amp;nbsp;Side&amp;nbsp;View&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;[오른쪽 시야에서 트리 보기]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;53&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eanYxP/btstmHkRqUh/U7FBwPvewx1dZqm41eza91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eanYxP/btstmHkRqUh/U7FBwPvewx1dZqm41eza91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eanYxP/btstmHkRqUh/U7FBwPvewx1dZqm41eza91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeanYxP%2FbtstmHkRqUh%2FU7FBwPvewx1dZqm41eza91%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;658&quot; height=&quot;53&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;53&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;&lt;b&gt;제약 조건&amp;nbsp;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1694103036069&quot; class=&quot;javascript&quot; style=&quot;color: #666666; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;The number of nodes in the tree is in the range [0, 100].
-100 &amp;lt;= Node.val &amp;lt;= 100&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Example&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;449&quot; data-origin-height=&quot;412&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RyuH4/btstmuy6fSx/293x8Os3NK8nXEtsHC2Y30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RyuH4/btstmuy6fSx/293x8Os3NK8nXEtsHC2Y30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RyuH4/btstmuy6fSx/293x8Os3NK8nXEtsHC2Y30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRyuH4%2Fbtstmuy6fSx%2F293x8Os3NK8nXEtsHC2Y30%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;449&quot; height=&quot;412&quot; data-origin-width=&quot;449&quot; data-origin-height=&quot;412&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1694103820738&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ex2) Input: root = [1,null,3]
     Output: [1,3]

ex3) Input: root = []
     Output: []&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;초기 문제 접근 방식&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기엔&amp;nbsp;문제&amp;nbsp;설명에&amp;nbsp;대해&amp;nbsp;이해가&amp;nbsp;잘&amp;nbsp;안가,&amp;nbsp;예시의&amp;nbsp;그림을&amp;nbsp;보고&amp;nbsp;대충&amp;nbsp;이해하고&amp;nbsp;풀었다.&lt;br /&gt;단순히 오른쪽 노드를 모두 출력하는 줄 알고 아래와 같이 문제를 풀었고, 실제로 처음 주어지는 테스트케이스 3개는 풀었지만,&lt;br /&gt;다른 테스트 케이스들은 풀지 못했다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;초기 접근 코드&lt;/h3&gt;
&lt;pre id=&quot;code_1694103064765&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var rightSideView = function(root) {
    const result = [];
    const queue = [];
    
    if (root === null) return result;
    
    queue.push(root);
    while(queue.length !== 0) {
        let size = queue.length;
        for (let i = 0; i &amp;lt; size; i++) {
            let n = queue.shift();
            if (i === size - 1) result.push(n.val);
            if (n.left !== null) queue.push(n.left);
            if (n.right !== null) queue.push(n.right);
        }
    }
    
    return result;
};&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1142&quot; data-origin-height=&quot;306&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HjN4Q/btstliZZrwQ/sbUUkKetEXBY8BQxGFndl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HjN4Q/btstliZZrwQ/sbUUkKetEXBY8BQxGFndl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HjN4Q/btstliZZrwQ/sbUUkKetEXBY8BQxGFndl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHjN4Q%2FbtstliZZrwQ%2FsbUUkKetEXBY8BQxGFndl1%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;1142&quot; height=&quot;306&quot; data-origin-width=&quot;1142&quot; data-origin-height=&quot;306&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;다시 생각 해보며&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;449&quot; data-origin-height=&quot;412&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RyuH4/btstmuy6fSx/293x8Os3NK8nXEtsHC2Y30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RyuH4/btstmuy6fSx/293x8Os3NK8nXEtsHC2Y30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RyuH4/btstmuy6fSx/293x8Os3NK8nXEtsHC2Y30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRyuH4%2Fbtstmuy6fSx%2F293x8Os3NK8nXEtsHC2Y30%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;449&quot; height=&quot;412&quot; data-origin-width=&quot;449&quot; data-origin-height=&quot;412&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실패한 테스트케이스들을 보며 문제를 다시 이해 할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 그림을 예시로, 만약 1,3,4 중 4가 없다고 가정 해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 리턴해야 할 값은 1,3,5가 된다. 4가 없어짐과 동시에 5가 보여지는것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 1,3,4 중 3이 사라지면 1,4,5가 보여야한다. 4의 노드가 3의 자리에 들어가기에 5노드가 보이기 때문이다.&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 data-ke-size=&quot;size16&quot;&gt;먼저 트리의 왼쪽에 있는 노드를 배열에 넣는다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&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;왼쪽&amp;nbsp;노드를&amp;nbsp;모두&amp;nbsp;재귀&amp;nbsp;호출했을&amp;nbsp;땐&lt;br /&gt;res 배열에 [1,2,5]가 들어가게 되고, 해당 노드가 존재하지 않을 때까지 순회했을 때,&lt;br /&gt;오른쪽 노드를 재귀 호출해서 right 값으로 덮어씌우고 없으면 해당 값 그대로 존재하게 한다.&lt;br /&gt;여기서 배열 3개의 인덱스는 각각의 레벨 0, 1, 2로 해석된다.&lt;br /&gt;즉 현재 트리는 3,4가 존재하기에 기존에 존재하던 2,5는 3,4,로 덮어 쓰기가 되어 [1,3,4]가 된다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;solve 코드&lt;/h3&gt;
&lt;pre id=&quot;code_1694103050874&quot; class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function rightSideView(root) {    
    const res = []
    
    function traverse(node, level) {
        if (node?.val === undefined){
            return null
        } 

        res[level] = node.val
        
        traverse(node.left, level + 1)
        traverse(node.right, level + 1)
    }
    
    traverse(root, 0)
    
    return res
};&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>호IT</author>
      <guid isPermaLink="true">https://nevertrustbrutus.tistory.com/522</guid>
      <comments>https://nevertrustbrutus.tistory.com/522#entry522comment</comments>
      <pubDate>Fri, 8 Sep 2023 01:48:46 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode] Kth Smallest Element in a BST - Javascript</title>
      <link>https://nevertrustbrutus.tistory.com/521</link>
      <description>&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Kth&amp;nbsp;Smallest&amp;nbsp;Element&amp;nbsp;in&amp;nbsp;a&amp;nbsp;BST&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;[이진 탐색 트리, k번째로 작은 수 찾기]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;663&quot; data-origin-height=&quot;61&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dcCTgn/btstk2Xk1C7/VJYOkMby1859EBjXgn34X0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dcCTgn/btstk2Xk1C7/VJYOkMby1859EBjXgn34X0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dcCTgn/btstk2Xk1C7/VJYOkMby1859EBjXgn34X0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdcCTgn%2Fbtstk2Xk1C7%2FVJYOkMby1859EBjXgn34X0%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;663&quot; height=&quot;61&quot; data-origin-width=&quot;663&quot; data-origin-height=&quot;61&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;&lt;b&gt;제약 조건&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1694099047318&quot; class=&quot;javascript&quot; style=&quot;color: #666666; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;The number of nodes in the tree is n.
1 &amp;lt;= k &amp;lt;= n &amp;lt;= 10^4
0 &amp;lt;= Node.val &amp;lt;= 10^4&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Example&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;357&quot; data-origin-height=&quot;399&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bev1cf/btstkpea6MH/VUDMIyF0KQSkBnggag9jqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bev1cf/btstkpea6MH/VUDMIyF0KQSkBnggag9jqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bev1cf/btstkpea6MH/VUDMIyF0KQSkBnggag9jqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbev1cf%2Fbtstkpea6MH%2FVUDMIyF0KQSkBnggag9jqK%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;357&quot; height=&quot;399&quot; data-origin-width=&quot;357&quot; data-origin-height=&quot;399&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;426&quot; data-origin-height=&quot;409&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crUshc/btstkwdjwoO/Pk0D3OKschosDMMWDZGQBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crUshc/btstkwdjwoO/Pk0D3OKschosDMMWDZGQBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crUshc/btstkwdjwoO/Pk0D3OKschosDMMWDZGQBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrUshc%2FbtstkwdjwoO%2FPk0D3OKschosDMMWDZGQBK%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;426&quot; height=&quot;409&quot; data-origin-width=&quot;426&quot; data-origin-height=&quot;409&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 접근 방식&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;주어지는&amp;nbsp;트리가&amp;nbsp;이진&amp;nbsp;탐색&amp;nbsp;트리이고,&amp;nbsp;k가&amp;nbsp;주어지면&amp;nbsp;k&amp;nbsp;번째로&amp;nbsp;작은&amp;nbsp;노드를&amp;nbsp;반환하면&amp;nbsp;되기에,&lt;br /&gt;중위 순회 방법으로 쉽게 풀 수 있다.&lt;br /&gt;&lt;br /&gt;중위&amp;nbsp;순회는&amp;nbsp;노드의&amp;nbsp;가장&amp;nbsp;왼쪽&amp;nbsp;-&amp;nbsp;루트&amp;nbsp;-&amp;nbsp;오른쪽&amp;nbsp;순으로&amp;nbsp;순회를&amp;nbsp;하는데,&lt;br /&gt;이진 트리 탐색이기에, 가장 작은 수는 왼쪽부터 있는 특성을 이용해 풀 수 있었다.&lt;br /&gt;먼저 재귀 함수를 만들어 root를 받아 data가 존재하지 않으면 리턴하는 제어문을 작성한다.&lt;br /&gt;&lt;br /&gt;이후&amp;nbsp;노드의&amp;nbsp;맨&amp;nbsp;왼쪽부터&amp;nbsp;접근이&amp;nbsp;가능하도록&amp;nbsp;recusive&amp;nbsp;함수를&amp;nbsp;재귀&amp;nbsp;호출한다.&lt;br /&gt;data.left가 존재할 때까지 재귀 호출을 하고 이후 index를 1씩 증가하며,&lt;br /&gt;k와 값이 같은지 비교하고 같을 때 현재 노드의 값을 smallest 변수에 값을 넣고 리턴한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;br /&gt;이후 data.right도 재귀 호출해 반복하여 값을 찾는다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;접근 코드&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1694099047319&quot; class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @param {number} k
 * @return {number}
 */
var kthSmallest = function (root, k) {
   let index = 0;
   let smallest;
   const recursive = data =&amp;gt; {
      if (!data) {
         return;
      }
      recursive(data.left);
      index++;
      if (index == k) {
         smallest = data.val;
         return;
      }
      recursive(data.right);
   };

   recursive(root);
   return smallest;
};&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <author>호IT</author>
      <guid isPermaLink="true">https://nevertrustbrutus.tistory.com/521</guid>
      <comments>https://nevertrustbrutus.tistory.com/521#entry521comment</comments>
      <pubDate>Fri, 8 Sep 2023 00:24:47 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode] Minimum Absolute Difference in BST - Javascript</title>
      <link>https://nevertrustbrutus.tistory.com/520</link>
      <description>&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;Minimum&amp;nbsp;Absolute&amp;nbsp;Difference&amp;nbsp;in&amp;nbsp;BST&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;[이진 탐색 트리, 가장 짧은 간격 찾기]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;663&quot; data-origin-height=&quot;61&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EnMND/btstgfopB5F/z5LZXv0DkeJVZOAiwswKAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EnMND/btstgfopB5F/z5LZXv0DkeJVZOAiwswKAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EnMND/btstgfopB5F/z5LZXv0DkeJVZOAiwswKAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEnMND%2FbtstgfopB5F%2Fz5LZXv0DkeJVZOAiwswKAK%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;663&quot; height=&quot;61&quot; data-origin-width=&quot;663&quot; data-origin-height=&quot;61&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;&lt;b&gt;제약 조건&amp;nbsp;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1694002557617&quot; class=&quot;javascript&quot; style=&quot;color: #666666; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;The number of nodes in the tree is in the range [2, 10^4].
0 &amp;lt;= Node.val &amp;lt;= 10^5&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Example&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;327&quot; data-origin-height=&quot;407&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OtHMA/btstffCi80i/z6q85NbsorGipwfTK0bTH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OtHMA/btstffCi80i/z6q85NbsorGipwfTK0bTH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OtHMA/btstffCi80i/z6q85NbsorGipwfTK0bTH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOtHMA%2FbtstffCi80i%2Fz6q85NbsorGipwfTK0bTH0%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;327&quot; height=&quot;407&quot; data-origin-width=&quot;327&quot; data-origin-height=&quot;407&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;362&quot; data-origin-height=&quot;419&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q5VaN/btstbeDXkFx/sRcwPody6nmcf6wbIGM8KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q5VaN/btstbeDXkFx/sRcwPody6nmcf6wbIGM8KK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q5VaN/btstbeDXkFx/sRcwPody6nmcf6wbIGM8KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq5VaN%2FbtstbeDXkFx%2FsRcwPody6nmcf6wbIGM8KK%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;362&quot; height=&quot;419&quot; data-origin-width=&quot;362&quot; data-origin-height=&quot;419&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;초기 문제 접근 방식&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;트리의&amp;nbsp;각각의&amp;nbsp;노드끼리&amp;nbsp;간격의&amp;nbsp;가장&amp;nbsp;작은&amp;nbsp;차이의&amp;nbsp;절댓값을&amp;nbsp;구하는&amp;nbsp;문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;초기엔 서로 인접한 노드끼리에서만 간격 차이를 구하는 것으로 이해하여,&lt;br /&gt;tmp 값에는 부모 노드의 값을 저장하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;tmp 값과 자식의 노드 왼쪽과 오른쪽을 빼기 연산을 하여 최솟값을 min 변수에 계속 저장하는 방식으로 코드를 작성했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;recusive라는 함수를 생성해 tree 데이터를 받아 해당 데이터가 없으면 리턴을 한다.&lt;br /&gt;그 후tmp 값과 data.val의 절댓값 차이를 구하고 min 값과 비교를 해 min에 저장한다.&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;data.left로 recusive 함수를 재귀 호출해 반복을 하고 data.left의 데이터가 null이면 데이터가 없다는 의미이기에,&lt;br /&gt;왼쪽 연산 노드의 최솟값을 모두 구한 후 오른쪽 트리의 노드를 모두 호출해 반복해 min 값을 구한다.&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;방식대로&amp;nbsp;풀이를&amp;nbsp;제출하면,&amp;nbsp;아래의&amp;nbsp;테스트&amp;nbsp;케이스에서&amp;nbsp;걸린다.&lt;br /&gt;각각의 트리에 노드가 인접한 노드끼리의 간격이 아닌, 모든 노드 중 가장 작은 간격을 구하는 것이었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1133&quot; data-origin-height=&quot;364&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cleH5I/btstggt6PXA/f8ivk5taA3ND1pjhmsMXOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cleH5I/btstggt6PXA/f8ivk5taA3ND1pjhmsMXOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cleH5I/btstggt6PXA/f8ivk5taA3ND1pjhmsMXOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcleH5I%2Fbtstggt6PXA%2Ff8ivk5taA3ND1pjhmsMXOk%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;1133&quot; height=&quot;364&quot; data-origin-width=&quot;1133&quot; data-origin-height=&quot;364&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;초기 접근 코드&lt;/h3&gt;
&lt;pre id=&quot;code_1694002557624&quot; class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number}
 */
var getMinimumDifference = function (root) {
   let min = Number.MAX_SAFE_INTEGER;
   let tmp = -Infinity;

   const recursive = data =&amp;gt; {
      if (!data) {
         return;
      }
      min = Math.min(min, Math.abs(tmp - data.val));
      tmp = data.val;
      recursive(data.left);
      recursive(data.right);
   };

   recursive(root);

   return min;
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;다시 생각 해보며&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드를 재작성하는데, 이전 코드와 큰 차이가 없었다.&lt;br /&gt;recusive(data.left) 코드 한 줄을 위로 올려, 가장 왼쪽부터 모든 노드를 순회하도록 중위 순회를 하는 것이다.&lt;br /&gt;이렇게 하면 이전 코드와 다르게 인접한 노드의 간격만 구하는 것이 아닌, 모든 노드의 간격의 최솟값을 구할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 오른쪽 노드도 재귀 호출해 반복하여 최솟값을 구한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;solve 코드&lt;/h3&gt;
&lt;pre id=&quot;code_1694005955145&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number}
 */
var getMinimumDifference = function (root) {
   let min = Number.MAX_SAFE_INTEGER;
   let tmp = -Infinity;

   const recursive = data =&amp;gt; {
      if (!data) {
         return;
      }
      recursive(data.left);
      min = Math.min(min, Math.abs(tmp - data.val));
      tmp = data.val;
      recursive(data.right);
   };

   recursive(root);

   return min;
};&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>호IT</author>
      <guid isPermaLink="true">https://nevertrustbrutus.tistory.com/520</guid>
      <comments>https://nevertrustbrutus.tistory.com/520#entry520comment</comments>
      <pubDate>Wed, 6 Sep 2023 22:47:48 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode] Find Minimum in Rotated Sorted Array - Javascript</title>
      <link>https://nevertrustbrutus.tistory.com/519</link>
      <description>&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;Find&amp;nbsp;Minimum&amp;nbsp;in&amp;nbsp;Rotated&amp;nbsp;Sorted&amp;nbsp;Array&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;[특정 값을 기준으로 뒤바뀌어 정렬이 되어 있는 배열의 target 찾기]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;767&quot; data-origin-height=&quot;262&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LpPK3/btss85FFA1Z/INeWv1UyvVCiNfoeVK6Dx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LpPK3/btss85FFA1Z/INeWv1UyvVCiNfoeVK6Dx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LpPK3/btss85FFA1Z/INeWv1UyvVCiNfoeVK6Dx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLpPK3%2Fbtss85FFA1Z%2FINeWv1UyvVCiNfoeVK6Dx1%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;767&quot; height=&quot;262&quot; data-origin-width=&quot;767&quot; data-origin-height=&quot;262&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;&lt;b&gt;제약 조건&amp;nbsp;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1693837087440&quot; class=&quot;javascript&quot; style=&quot;color: #666666; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;n == nums.length
1 &amp;lt;= n &amp;lt;= 5000
-5000 &amp;lt;= nums[i] &amp;lt;= 5000
All the integers of nums are unique.
nums is sorted and rotated between 1 and n times.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Example&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1693837087440&quot; class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ex1) Input: nums = [3,4,5,1,2]
     Output: 1
     Explanation: The original array was [1,2,3,4,5] rotated 3 times.

ex2) Input: nums = [4,5,6,7,0,1,2]
     Output: 0
     Explanation: The original array was [0,1,2,4,5,6,7] and it was rotated 4 times.


ex3) Input: nums = [11,13,15,17]
     Output: 11
     Explanation: The original array was [11,13,15,17] and it was rotated 4 times.&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 접근 방식&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정렬이 되어있지만, 특정 인덱스를 기준으로 돌아간 배열이 주어졌을 때, 최솟값을 구하는 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;만약 start가 end보다 작거나 같다면 해당 배열은 정렬이 되어있다는 의미로 while 문을 탈출해 nums[start]를 리턴해 정답을 풀이한다.&lt;/p&gt;
&lt;pre id=&quot;code_1693838067012&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;      if (nums[start] &amp;lt;= nums[end]) {
         break;
      }&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;nums[start]가&amp;nbsp;nums[mid]보다&amp;nbsp;작거나&amp;nbsp;같다면,&amp;nbsp;배열의&amp;nbsp;절반&amp;nbsp;중&amp;nbsp;왼쪽은&amp;nbsp;정렬이&amp;nbsp;되어있다고&amp;nbsp;봐도&amp;nbsp;된다.&lt;br /&gt;즉 해당 제어문이 true라면 start를 mid+1로 업데이트하고, 아니라면 end를 mid로 업데이트한다.&lt;br /&gt;해당 제어문을 반복하며 nums[stasrt]가 nums[end]보다 작거나 같을 때까지 즉 배열이 정렬되어 있을 때까지,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;start와 end의 값을 초기화한다.&lt;/p&gt;
&lt;pre id=&quot;code_1693838108306&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;      let mid = Math.floor((start + end) / 2);
      if (nums[start] &amp;lt;= nums[mid]) {
         start = mid + 1;
      } else {
         end = mid;
      }&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;sovle 코드&lt;/h3&gt;
&lt;pre id=&quot;code_1693837087442&quot; class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var findMin = function (nums) {
   let start = 0,
      end = nums.length - 1;
   while (start &amp;lt;= end) {
      if (nums[start] &amp;lt;= nums[end]) {
         break;
      }
      let mid = Math.floor((start + end) / 2);
      if (nums[start] &amp;lt;= nums[mid]) {
         start = mid + 1;
      } else {
         end = mid;
      }
   }
   return nums[start];
};&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>알고리즘</category>
      <author>호IT</author>
      <guid isPermaLink="true">https://nevertrustbrutus.tistory.com/519</guid>
      <comments>https://nevertrustbrutus.tistory.com/519#entry519comment</comments>
      <pubDate>Mon, 4 Sep 2023 23:38:52 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode] Search in Rotated Sorted Array - Javascript</title>
      <link>https://nevertrustbrutus.tistory.com/518</link>
      <description>&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;Search&amp;nbsp;in&amp;nbsp;Rotated&amp;nbsp;Sorted&amp;nbsp;Array&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;[특정 값을 기준으로 뒤바뀌어 정렬이 되어 있는 배열의 target 찾기]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;777&quot; data-origin-height=&quot;253&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dLyjBd/btss88biYlV/sDmNZ0Jvv4jW5F1algu9z0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dLyjBd/btss88biYlV/sDmNZ0Jvv4jW5F1algu9z0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dLyjBd/btss88biYlV/sDmNZ0Jvv4jW5F1algu9z0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdLyjBd%2Fbtss88biYlV%2FsDmNZ0Jvv4jW5F1algu9z0%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;777&quot; height=&quot;253&quot; data-origin-width=&quot;777&quot; data-origin-height=&quot;253&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;&lt;b&gt;제약 조건&amp;nbsp;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1693834832832&quot; class=&quot;bash&quot; style=&quot;color: #666666; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1 &amp;lt;= nums.length &amp;lt;= 5000
-10^4 &amp;lt;= nums[i] &amp;lt;= 10^4
All values of nums are unique.
nums is an ascending array that is possibly rotated.
-10^4 &amp;lt;= target &amp;lt;= 10^4&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Example&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1693834832833&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ex1) Input: nums = [4,5,6,7,0,1,2], target = 0
     Output: 4

ex2) Input: nums = [4,5,6,7,0,1,2], target = 3
     Output: -1

ex3) Input: nums = [1], target = 0
     Output: -1&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 접근 방식&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;You must write an algorithm with&lt;span&gt;&amp;nbsp;&lt;/span&gt;O(log n)&lt;span&gt;&amp;nbsp;&lt;/span&gt;runtime complexity.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 문제는 O(log n)으로 풀이 해야 하기에 이진 탐색이 필요하다고 생각했다.&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;num[start]가&amp;nbsp;nums[mid]보다&amp;nbsp;작다면&amp;nbsp;start부터&amp;nbsp;mid까지의&amp;nbsp;정렬이&amp;nbsp;정상적으로&amp;nbsp;되어있다는&amp;nbsp;의미이다.&lt;br /&gt;ex) [4,5,6,7,0,1,2]&lt;br /&gt;정렬이 제대로 되어 있는 상태에서 nums[start]가 target보다 작고 target이 nums[mid]보다 작으면&lt;br /&gt;target과 mid 사이의 결괏값이 있을 거라고 추측이 가능하다는 의미이기에 end를 mid-1로 업데이트한다.&lt;br /&gt;(배열의 절반 중 왼쪽을 선택한다는 의미.)&lt;br /&gt;아니라면 오른쪽을 선택한다는 의미로 start를 mid+1로 초기화한다.&lt;/p&gt;
&lt;pre id=&quot;code_1693836252686&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;       if (nums[start] &amp;lt;= nums[mid]) {
           if (nums[start] &amp;lt;= target &amp;amp;&amp;amp; target &amp;lt; nums[mid]) {
               end = mid - 1;
           } else {
               start = mid + 1;
           }
       } else {
           if (nums[mid] &amp;lt; target &amp;amp;&amp;amp; target &amp;lt;= nums[end]) {
               start = mid + 1;
           } else {
               end = mid - 1;
           }
       }&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;sovle 코드&lt;/h3&gt;
&lt;pre id=&quot;code_1693834832840&quot; class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var search = function(nums, target) {
   let start = 0, end = nums.length - 1;

   while (start &amp;lt;= end) {
       let mid = Math.floor((start + end) / 2);

       if (nums[mid] === target) {
           return mid;
       }

       if (nums[start] &amp;lt;= nums[mid]) {
           if (nums[start] &amp;lt;= target &amp;amp;&amp;amp; target &amp;lt; nums[mid]) {
               end = mid - 1;
           } else {
               start = mid + 1;
           }
       } else {
           if (nums[mid] &amp;lt; target &amp;amp;&amp;amp; target &amp;lt;= nums[end]) {
               start = mid + 1;
           } else {
               end = mid - 1;
           }
       }
   }

   return -1;
};&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>알고리즘</category>
      <author>호IT</author>
      <guid isPermaLink="true">https://nevertrustbrutus.tistory.com/518</guid>
      <comments>https://nevertrustbrutus.tistory.com/518#entry518comment</comments>
      <pubDate>Mon, 4 Sep 2023 23:11:56 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode] Merge Sorted Array - Javascript</title>
      <link>https://nevertrustbrutus.tistory.com/517</link>
      <description>&lt;h4 style=&quot;background-color: #ffffff; color: #5c5c5c; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Find&amp;nbsp;Peak&amp;nbsp;Element&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;[양옆의 요소와 비교해 큰 수 인지 확인]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;770&quot; data-origin-height=&quot;209&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3NyCT/btss3YG28Tl/RIh6Ba2NMrsJ4Laa6UKho1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3NyCT/btss3YG28Tl/RIh6Ba2NMrsJ4Laa6UKho1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3NyCT/btss3YG28Tl/RIh6Ba2NMrsJ4Laa6UKho1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3NyCT%2Fbtss3YG28Tl%2FRIh6Ba2NMrsJ4Laa6UKho1%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;770&quot; height=&quot;209&quot; data-origin-width=&quot;770&quot; data-origin-height=&quot;209&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #5c5c5c; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;&lt;b&gt;제약 조건&amp;nbsp;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1693832340388&quot; class=&quot;javascript&quot; style=&quot;background-color: #f6f7f8; color: #666666; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1 &amp;lt;= nums.length &amp;lt;= 1000
-2^31 &amp;lt;= nums[i] &amp;lt;= 2^31 - 1
nums[i] != nums[i + 1] for all valid i.&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #5c5c5c; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Example&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1693832340388&quot; class=&quot;bash&quot; style=&quot;background-color: #f6f7f8; color: #555555; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ex1) Input: nums = [1,2,3,1]
     Output: 2
     Explanation: 3 is a peak element and your function should return the index number 2.

ex2) Input: nums = [1,2,1,3,5,6,4]
     Output: 5
     Explanation: Your function can return either index number 1 where the peak element is 2, or index number 5 where the peak element is 6.&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #5c5c5c; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;&lt;b&gt;문제 접근 방식&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;문제&amp;nbsp;설명에&amp;nbsp;Y&quot;ou&amp;nbsp;may&amp;nbsp;imagine&amp;nbsp;that&amp;nbsp;nums[-1]&amp;nbsp;=&amp;nbsp;nums[n]&amp;nbsp;=&amp;nbsp;-&amp;infin;&quot;라는&amp;nbsp;설명이&amp;nbsp;있다.&lt;br /&gt;즉 nums 배열의 -1 인덱스와 n 인덱스는 가장 최솟값을 가진다고 되어 있다는 의미이다.&lt;br /&gt;이 점을 생각해 해당 문제를 이진 탐색으로 풀 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;960&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dU2RHF/btssT8qljAP/0ClHyrykgnI3VqfeNpfbk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dU2RHF/btssT8qljAP/0ClHyrykgnI3VqfeNpfbk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dU2RHF/btssT8qljAP/0ClHyrykgnI3VqfeNpfbk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdU2RHF%2FbtssT8qljAP%2F0ClHyrykgnI3VqfeNpfbk0%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;1280&quot; height=&quot;960&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;960&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;맨 처음 while 반복문으로 start가 end보다 커질 때 까지 반복한다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;mid는 배열의 중간의 값으로 초기화 되도록&lt;br /&gt;mid = Math.floor((start + end) / 2); 연산을 수행한다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;그 후 mid의 이전 인덱스와 이후 인덱스를 비교해 mid가 양옆 요소보다 큰지 확인하고 크다면 해당 인덱스를 리턴한다.&lt;br /&gt;만약 아니라면&amp;nbsp;mid의&amp;nbsp;요소&amp;nbsp;값이&amp;nbsp;left&amp;nbsp;보다&amp;nbsp;크다면&amp;nbsp;end를&amp;nbsp;mid-1로&amp;nbsp;값을&amp;nbsp;업데이트하고,&amp;nbsp;작다면&amp;nbsp;start를&amp;nbsp;mid+1&amp;nbsp;값으로&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;업데이트를 하여 절반을 날려버린다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이런&amp;nbsp;방식으로&amp;nbsp;접근하면&amp;nbsp;왼쪽이나&amp;nbsp;오른쪽의&amp;nbsp;절반&amp;nbsp;중&amp;nbsp;한쪽에&amp;nbsp;요소가&amp;nbsp;양옆보다&amp;nbsp;큰&amp;nbsp;수가&amp;nbsp;없어&amp;nbsp;다른&amp;nbsp;한쪽을&amp;nbsp;버려버리면&amp;nbsp;안&amp;nbsp;될&amp;nbsp;것&amp;nbsp;같지만,&lt;br /&gt;이렇게 해도 되는 이유는 nums[-1]과 nums[n] 인덱스는 -Infinity 값을 가지기 때문에 배열의 맨 끝까지 가게 되면 어차피 최솟값과 요소의 값을 비교하기에 무조건 양옆보다 큰 요소가 나온다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #5c5c5c; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;solve 전체 코드&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1693832340395&quot; class=&quot;bash&quot; style=&quot;background-color: #f6f7f8; color: #555555; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
 * @param {number[]} nums
 * @return {number}
 */
var findPeakElement = function(nums) {
    let start = 0, end = nums.length - 1
    let mid = 0;
    
    while (start &amp;lt;= end) {
        mid = Math.floor((start + end) / 2);
        
        const val = nums[mid];
        const left = nums[mid - 1] || -Infinity
        const right = nums[mid + 1] || -Infinity
        
        if (val &amp;gt; left &amp;amp;&amp;amp; val &amp;gt; right) return mid;
        if (left &amp;gt; val) {
            end = mid - 1
        } else {
            start = mid + 1
        }
    }

    return 0;
};&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <author>호IT</author>
      <guid isPermaLink="true">https://nevertrustbrutus.tistory.com/517</guid>
      <comments>https://nevertrustbrutus.tistory.com/517#entry517comment</comments>
      <pubDate>Mon, 4 Sep 2023 22:28:30 +0900</pubDate>
    </item>
  </channel>
</rss>