<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>EPguy</title>
    <link>https://epguy.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Wed, 26 Aug 2026 07:46:32 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>EPguy</managingEditor>
    <image>
      <title>EPguy</title>
      <url>https://tistory1.daumcdn.net/tistory/5905495/attach/2733a7dcd98d4a73bdae187a679977e6</url>
      <link>https://epguy.tistory.com</link>
    </image>
    <item>
      <title>[디자인] 앱 UI에 사용할 사진이나 일러스트 같은 이미지 무료로 구하기</title>
      <link>https://epguy.tistory.com/44</link>
      <description>&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Undraw&lt;/b&gt;: 다양한 무료 일러스트를 제공하며, 원하는 색상으로 변경할 수 있어 UI 디자인에 적합합니다. &lt;a href=&quot;https://undraw.co/&quot;&gt;&lt;span&gt;Undraw&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Icons8&lt;/b&gt;: 무료 아이콘, 벡터 및 일러스트를 제공하는 사이트로, 앱 디자인에 적합한 자원을 찾을 수 있습니다. &lt;a&gt;&lt;span&gt;Icons8&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DrawKit&lt;/b&gt;: 무료 벡터 일러스트 및 애니메이션 리소스를 제공하는 사이트입니다. 다양한 스타일의 일러스트를 쉽게 찾을 수 있습니다. &lt;a href=&quot;https://www.drawkit.com/&quot;&gt;&lt;span&gt;DrawKit&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Humaaans&lt;/b&gt;: 사람 캐릭터를 자유롭게 조합하여 만들 수 있는 벡터 일러스트 사이트입니다. 앱 디자인에 적합한 이미지들을 직접 만들 수 있습니다. &lt;a href=&quot;https://www.humaaans.com/&quot;&gt;&lt;span&gt;Humaaans&lt;/span&gt;&lt;/a&gt;&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발/기타</category>
      <author>EPguy</author>
      <guid isPermaLink="true">https://epguy.tistory.com/44</guid>
      <comments>https://epguy.tistory.com/44#entry44comment</comments>
      <pubDate>Fri, 20 Sep 2024 15:46:56 +0900</pubDate>
    </item>
    <item>
      <title>[FCM] FCM V1 으로 마이그레이션</title>
      <link>https://epguy.tistory.com/43</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;기존 FCM API deprecated 되어서 v1으로 마이그레이션 함.&lt;/p&gt;
&lt;pre id=&quot;code_1726030704331&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  // 데이터 + 메세지
  public int sendMessage(String token, String title, String body, HashMap&amp;lt;String, String&amp;gt; data) throws IOException {
      String message = makeMessage(token, title, body, data);
      return sendMessageToFCM(message);
  }
    
  private String makeMessage(String token, String title, String body, HashMap&amp;lt;String, String&amp;gt; data) throws JsonProcessingException {
        ObjectMapper om = new ObjectMapper();
        FcmMessageDto fcmMessageDto = FcmMessageDto.builder()
                .message(FcmRequestDto.builder()
                        .token(token)
                        .data(data)
                        .notification(FcmRequestDto.Notification.builder()
                                .title(title)
                                .body(body)
                                .build())
                        .build())
                .build();
        return om.writeValueAsString(fcmMessageDto);
    }

    private int sendMessageToFCM(String message) throws IOException {
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.getMessageConverters().add(0, new StringHttpMessageConverter(StandardCharsets.UTF_8));

        String accessToken = getAccessToken();
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.set(&quot;Authorization&quot;, &quot;Bearer &quot; + accessToken);

        System.out.print(&quot;Access Token: &quot; + accessToken);
        HttpEntity&amp;lt;String&amp;gt; entity = new HttpEntity&amp;lt;&amp;gt;(message, headers);

        String API_URL = &quot;https://fcm.googleapis.com/v1/projects/project/messages:send&quot;;
        ResponseEntity&amp;lt;String&amp;gt; response = restTemplate.exchange(API_URL, HttpMethod.POST, entity, String.class);

        // 푸시 알림 결과 출력
        System.out.println(&quot;Response Status Code: &quot; + response.getStatusCode());
        System.out.println(&quot;Response Body: &quot; + response.getBody());

        return response.getStatusCode() == HttpStatus.OK ? 1 : 0;
    }
    
    private String getAccessToken() throws IOException {
        GoogleCredentials googleCredentials = GoogleCredentials
                .fromStream(new ClassPathResource(firebaseKeyPath).getInputStream())
                .createScoped(List.of(&quot;https://www.googleapis.com/auth/cloud-platform&quot;));

        googleCredentials.refreshIfExpired();
        return googleCredentials.getAccessToken().getTokenValue();
    }&lt;/code&gt;&lt;/pre&gt;</description>
      <category>개발/Java</category>
      <author>EPguy</author>
      <guid isPermaLink="true">https://epguy.tistory.com/43</guid>
      <comments>https://epguy.tistory.com/43#entry43comment</comments>
      <pubDate>Wed, 11 Sep 2024 14:00:19 +0900</pubDate>
    </item>
    <item>
      <title>RSA 알고리즘과 AES 알고리즘을 혼합하여 사용하는 이유</title>
      <link>https://epguy.tistory.com/42</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;RSA는 암복호화에 사용되는 키가 서로 다르다는 장점이 있지만, 대칭키 알고리즘에 비해 암호화 속도가 느리다는 단점이 있다. 때문에 다량의 데이터를 암호화 하거나, 매 통신마다 RSA 암호화를 해버리면 속도 저하를 초래할 수 있게된다.&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;따라서 실제 데이터를 암복호화 할 때는 AES 알고리즘을 사용하게 되는데, 암복호화의 사용되는 키가 똑같다는 단점을 보완하기 위해 RSA의 공개키로 AES 대칭키를 암호화하여 사용한다.&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;1. 서버는 RSA 알고리즘을 사용하여 개인키와 공개키를 생성한다.&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. 클라이언트는 대칭키를 생성하고, 받은 공개키로 대칭키를 암호화한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 클라이언트는 암호화된 대칭키를 서버에 전송하여 키 합의를 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 클라이언트는 대칭키로 전송할 데이터를 암호화하여 서버에 보낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 서버는 개인키를 사용하여 대칭키를 복호화 한후 해당 키로 데이터를 복호화한다.&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;RSA와 AES 알고리즘을 혼합하는 것은 서로의 단점을 보완하기 위함이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구현이 어려울 순 있지만 보안과 성능을 확보할 수 있다는 장점이 있다.&lt;/p&gt;</description>
      <category>개발/기타</category>
      <author>EPguy</author>
      <guid isPermaLink="true">https://epguy.tistory.com/42</guid>
      <comments>https://epguy.tistory.com/42#entry42comment</comments>
      <pubDate>Fri, 24 May 2024 13:06:37 +0900</pubDate>
    </item>
    <item>
      <title>[RTK Query] 다른 createApi 객체의 태그를 무효화 하는 방법</title>
      <link>https://epguy.tistory.com/41</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;다른 계정으로 로그인 시 기존 데이터를 무효화 시켜야 하는 경우가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;dispatch(api.utils.invalidateTags(...))&amp;nbsp;&lt;/b&gt;를 사용하여 쉽게 특정 api 태그를 무효화 시킬 수있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1f1f1f; color: #cccccc;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;dispatch&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;memberApi&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;util&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;invalidateTags&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;([&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'Member'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;]));&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;dispatch&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;attendanceScheduleApi&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;util&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;invalidateTags&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;([&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'AttendanceSchedule'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;]),&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; );&lt;/span&gt;&lt;/div&gt;
&lt;/div&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>개발/React-Native</category>
      <author>EPguy</author>
      <guid isPermaLink="true">https://epguy.tistory.com/41</guid>
      <comments>https://epguy.tistory.com/41#entry41comment</comments>
      <pubDate>Wed, 27 Mar 2024 16:17:48 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode] 452. Minimum Number of Arrows to Burst Balloons</title>
      <link>https://epguy.tistory.com/40</link>
      <description>&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&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;문제&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote style=&quot;background-color: #ffffff; color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;There are some spherical balloons taped onto a flat wall that represents the XY-plane. The balloons are represented as a 2D integer array points where points[i] = [xstart, xend] denotes a balloon whose horizontal diameter stretches between xstart and xend. You do not know the exact y-coordinates of the balloons. Arrows can be shot up directly vertically (in the positive y-direction) from different points along the x-axis. A balloon with xstart and xend is burst by an arrow shot at x if xstart &amp;lt;= x &amp;lt;= xend. There is no limit to the number of arrows that can be shot. A shot arrow keeps traveling up infinitely, bursting any balloons in its path. Given the array points, return the minimum number of arrows that must be shot to burst all balloons.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;좌표평면에 풍선이 존재하며 풍선들의 xStart, xEnd좌표가 저장되어있는 points 2차원 배열이 주어집니다.&lt;br /&gt;아래에서 위로 화살을 쏴서 풍선을 터트릴 때, 풍선을 모두 터뜨릴 수 있는 화살의 최소 개수를 구하시오.&lt;/blockquote&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&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;예시&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1710810081425&quot; class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;Input: points = [[10,16],[2,8],[1,6],[7,12]]
Output: 2
Explanation: The balloons can be burst by 2 arrows:
- Shoot an arrow at x = 6, bursting the balloons [2,8] and [1,6].
- Shoot an arrow at x = 11, bursting the balloons [10,16] and [7,12].

Input: points = [[1,2],[3,4],[5,6],[7,8]]
Output: 4
Explanation: One arrow needs to be shot for each balloon for a total of 4 arrows.

Input: points = [[1,2],[2,3],[3,4],[4,5]]
Output: 2
Explanation: The balloons can be burst by 2 arrows:
- Shoot an arrow at x = 2, bursting the balloons [1,2] and [2,3].
- Shoot an arrow at x = 4, bursting the balloons [3,4] and [4,5].&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&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;풀이&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;/p&gt;
&lt;pre class=&quot;json&quot; style=&quot;background-color: #f0f0f0; color: #000000; text-align: start;&quot;&gt;&lt;code&gt;[[10,16],[2,8],[1,6],[7,12]]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;350&quot; data-origin-height=&quot;223&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEgVkW/btsFU6kJ0ya/cQ6YwK0jIRyYwIfJGPh5qk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEgVkW/btsFU6kJ0ya/cQ6YwK0jIRyYwIfJGPh5qk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEgVkW/btsFU6kJ0ya/cQ6YwK0jIRyYwIfJGPh5qk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEgVkW%2FbtsFU6kJ0ya%2FcQ6YwK0jIRyYwIfJGPh5qk%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;350&quot; height=&quot;223&quot; data-origin-width=&quot;350&quot; data-origin-height=&quot;223&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[1,6]&lt;/b&gt;과 &lt;b&gt;[2,8]&amp;nbsp;&lt;/b&gt;은 화살 하나로 동시에 터뜨릴 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좌표를 보시면 첫번째 풍선의&lt;b&gt; end좌표&lt;/b&gt;인 &lt;b&gt;6&lt;/b&gt;이 두번째 풍선의&lt;b&gt; start좌표&lt;/b&gt;인&lt;b&gt; 2&lt;/b&gt;보다 크죠?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, &lt;b&gt;end좌표&lt;/b&gt;가 다른풍선의 &lt;b&gt;start좌표&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 그리디 알고리즘을 사용하려면 우선 &lt;b&gt;정렬&lt;/b&gt;을 해야합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;end 좌표를 작은 순서대로 정렬을 해줘야 배열을 순회하며 순차적으로 해결하기 쉽기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&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;코드&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1710811156328&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution(object):
    def findMinArrowShots(self, points):
        arrow = 1
        points = sorted(points, key = lambda x:x[1])
        last = points[0][1]
        for i in range(1, len(points)):
            if(last &amp;lt; points[i][0]):
                arrow += 1
                last = points[i][1]


        return arrow&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;비교 기준이 되는 end 좌표를 저장하고 있는 last변수를 사용하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배열을 순회하며 end좌표가 start 좌표보다 작은경우, 동시에 터뜨릴 수 없기 때문에 화살 개수를 추가해줍니다.&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&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;복잡도&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시간 복잡도:&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;i&gt;O(nlogn)&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;공간 복잡도:&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;i&gt;O(1)&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘/LeetCode</category>
      <category>greedy</category>
      <author>EPguy</author>
      <guid isPermaLink="true">https://epguy.tistory.com/40</guid>
      <comments>https://epguy.tistory.com/40#entry40comment</comments>
      <pubDate>Tue, 19 Mar 2024 10:24:24 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode] 525. Contiguous Array</title>
      <link>https://epguy.tistory.com/39</link>
      <description>&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&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;문제&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote style=&quot;background-color: #ffffff; color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;Given a binary array nums, return the maximum length of a contiguous subarray with an equal number of 0 and 1.&lt;br /&gt;&lt;br /&gt;이진배열이 주어질 때, 연속적으로 0과 1의 개수가 똑같은 배열의 최대 길이를 반환하면 됩니다.&lt;/blockquote&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&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;예시&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1710723713815&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Input: nums = [0,1]
Output: 2
Explanation: [0, 1] is the longest contiguous subarray with an equal number of 0 and 1.

Input: nums = [0,1,0]
Output: 2
Explanation: [0, 1] (or [1, 0]) is a longest contiguous subarray with equal number of 0 and 1.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&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;풀이&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배열을 순차적으로 순회하며 0이면 -1, 1이면 +1을 해주는 count 변수를 만들어줍니다.&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;507&quot; data-origin-height=&quot;159&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t8MI3/btsFRrbOn2B/wIEeYAk0iexSwKfIrEwSJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t8MI3/btsFRrbOn2B/wIEeYAk0iexSwKfIrEwSJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t8MI3/btsFRrbOn2B/wIEeYAk0iexSwKfIrEwSJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft8MI3%2FbtsFRrbOn2B%2FwIEeYAk0iexSwKfIrEwSJK%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;507&quot; height=&quot;159&quot; data-origin-width=&quot;507&quot; data-origin-height=&quot;159&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;count가 같다는건 두 인덱스 사이의 0과 1의 개수가 일치한다는걸 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;박스로 표시된 배열의 0과 1의 개수를 한번 세어보세요.&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 floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;554&quot; data-origin-height=&quot;231&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/70d0g/btsFQPEAzOg/bifkqhxej6oNhnmUjQ4GJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/70d0g/btsFQPEAzOg/bifkqhxej6oNhnmUjQ4GJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/70d0g/btsFQPEAzOg/bifkqhxej6oNhnmUjQ4GJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F70d0g%2FbtsFQPEAzOg%2Fbifkqhxej6oNhnmUjQ4GJK%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;554&quot; height=&quot;231&quot; data-origin-width=&quot;554&quot; data-origin-height=&quot;231&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;&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;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;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;빨간색 네모 배열의 길이를 구하려면, 마지막 인덱스인 4,&amp;nbsp; 첫번째 인덱스인 0을 뺀 &lt;b&gt;4 - 0 = 4&lt;/b&gt; 가 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;529&quot; data-origin-height=&quot;260&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EINlj/btsFQSnqWhd/vUQusokkxgMlFRylp30kO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EINlj/btsFQSnqWhd/vUQusokkxgMlFRylp30kO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EINlj/btsFQSnqWhd/vUQusokkxgMlFRylp30kO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEINlj%2FbtsFQSnqWhd%2FvUQusokkxgMlFRylp30kO0%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;529&quot; height=&quot;260&quot; data-origin-width=&quot;529&quot; data-origin-height=&quot;260&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;각 요소의 count에 값을 저장시켜야 겠죠?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 때,&lt;b&gt; 해시맵&lt;/b&gt;을 사용하면됩니다. key값에는 count, value에는 인덱스를 저장시킵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 때 저장시키면서 key가 중복되는 경우 0과 1의 개수가 일치한다는 거니까 두 배열 사이의 길이를 구해서 최대길이인지 계산도 하면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1710724751830&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dec[1] = 0
dec[0] = 1
dec[1] = 2
dec[2] = 3
dec[1] = 4&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;하지만 여기서 주의할 점이 있는데, 배열의 요소가 2개인 경우 문제가 생기게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 그림을 보시면, 0과 1의 개수가 똑같지만 count의 값이 다릅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 경우 위 방법을 그대로 진행하면 문제가 생기게 되겠죠?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;151&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eBPAmq/btsFRbG4RVo/AEKqfVVW22lYeYNBdzMm1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eBPAmq/btsFRbG4RVo/AEKqfVVW22lYeYNBdzMm1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eBPAmq/btsFRbG4RVo/AEKqfVVW22lYeYNBdzMm1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeBPAmq%2FbtsFRbG4RVo%2FAEKqfVVW22lYeYNBdzMm1K%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;402&quot; height=&quot;151&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;151&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;이 문제를 해결하려면 맨 앞에 가상의 값을 임의로 추가하면 해결할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;470&quot; data-origin-height=&quot;219&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLwJ9z/btsFTfWgJmN/vkl21qYj8skmlwjNN0WLz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLwJ9z/btsFTfWgJmN/vkl21qYj8skmlwjNN0WLz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLwJ9z/btsFTfWgJmN/vkl21qYj8skmlwjNN0WLz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLwJ9z%2FbtsFTfWgJmN%2Fvkl21qYj8skmlwjNN0WLz0%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;470&quot; height=&quot;219&quot; data-origin-width=&quot;470&quot; data-origin-height=&quot;219&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;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&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;코드&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1710725569304&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution(object):
    def findMaxLength(self, nums):
        dic = {}
        count = answer = 0
        dic[0] = -1
        for i in range(len(nums)):
            count += 1 if(nums[i]) else -1
            if(count in dic):
                answer = max(answer, i - dic[count])
            else:
                dic[count] = i
        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;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&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;복잡도&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시간 복잡도:&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;i&gt;O(n)&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;공간 복잡도:&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;i&gt;O(n)&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>알고리즘/LeetCode</category>
      <author>EPguy</author>
      <guid isPermaLink="true">https://epguy.tistory.com/39</guid>
      <comments>https://epguy.tistory.com/39#entry39comment</comments>
      <pubDate>Mon, 18 Mar 2024 10:33:22 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode] 791. Custom Sort String</title>
      <link>https://epguy.tistory.com/38</link>
      <description>&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&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;문제&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote style=&quot;background-color: #ffffff; color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;You&amp;nbsp;are&amp;nbsp;given&amp;nbsp;two&amp;nbsp;strings&amp;nbsp;order&amp;nbsp;and&amp;nbsp;s.&amp;nbsp;All&amp;nbsp;the&amp;nbsp;characters&amp;nbsp;of&amp;nbsp;order&amp;nbsp;are&amp;nbsp;unique&amp;nbsp;and&amp;nbsp;were&amp;nbsp;sorted&amp;nbsp;in&amp;nbsp;some&amp;nbsp;custom&amp;nbsp;order&amp;nbsp;previously.&amp;nbsp;Permute&amp;nbsp;the&amp;nbsp;characters&amp;nbsp;of&amp;nbsp;s&amp;nbsp;so&amp;nbsp;that&amp;nbsp;they&amp;nbsp;match&amp;nbsp;the&amp;nbsp;order&amp;nbsp;that&amp;nbsp;order&amp;nbsp;was&amp;nbsp;sorted.&amp;nbsp;More&amp;nbsp;specifically,&amp;nbsp;if&amp;nbsp;a&amp;nbsp;character&amp;nbsp;x&amp;nbsp;occurs&amp;nbsp;before&amp;nbsp;a&amp;nbsp;character&amp;nbsp;y&amp;nbsp;in&amp;nbsp;order,&amp;nbsp;then&amp;nbsp;x&amp;nbsp;should&amp;nbsp;occur&amp;nbsp;before&amp;nbsp;y&amp;nbsp;in&amp;nbsp;the&amp;nbsp;permuted&amp;nbsp;string.&amp;nbsp;Return&amp;nbsp;any&amp;nbsp;permutation&amp;nbsp;of&amp;nbsp;s&amp;nbsp;that&amp;nbsp;satisfies&amp;nbsp;this&amp;nbsp;property.&lt;br /&gt;&lt;br /&gt;두&amp;nbsp;개의&amp;nbsp;문자열,&amp;nbsp;'order'와&amp;nbsp;'s'가&amp;nbsp;주어집니다.&amp;nbsp;'order'의&amp;nbsp;모든&amp;nbsp;문자는&amp;nbsp;고유하며&amp;nbsp;이전에&amp;nbsp;어떤&amp;nbsp;사용자&amp;nbsp;정의&amp;nbsp;순서로&amp;nbsp;정렬되었습니다.&amp;nbsp;'s'의&amp;nbsp;문자를&amp;nbsp;순서대로&amp;nbsp;재배열하여&amp;nbsp;'order'가&amp;nbsp;정렬된&amp;nbsp;순서와&amp;nbsp;일치하도록&amp;nbsp;합니다.&amp;nbsp;구체적으로,&amp;nbsp;'order'에서&amp;nbsp;문자&amp;nbsp;x가&amp;nbsp;문자&amp;nbsp;y보다&amp;nbsp;앞에&amp;nbsp;오면,&amp;nbsp;재배열된&amp;nbsp;문자열에서도&amp;nbsp;x가&amp;nbsp;y보다&amp;nbsp;앞에&amp;nbsp;와야&amp;nbsp;합니다.&amp;nbsp;이&amp;nbsp;조건을&amp;nbsp;만족하는&amp;nbsp;'s'의&amp;nbsp;어떤&amp;nbsp;순열이든&amp;nbsp;반환하세요.&lt;/blockquote&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;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&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;풀이&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #000000; 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;1. Hashmap&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;알고리즘&lt;/b&gt;&lt;/span&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. s의 각 문자를 순회하며, char_count 해시맵에 해당 문자의 출현 횟수를 저장합니다.&lt;/span&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2. order의 각 문자를 순회하며 해당 문자가 char_count 해시맵에 존재하는 경우 출현횟수 만큼 answer에 추가하고 char_count에서 해당 문자를 삭제시킵니다.&lt;/span&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3. 나머지 char_count에 있는 문자를 answer에 추가합니다.&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1710120497673&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution(object):
    def customSortString(self, order, s):
        answer = &quot;&quot;
        char_count = {}
        for char in s:
            char_count[char] = char_count.get(char, 0) + 1
        
        for order_ch in order:
            if(order_ch in char_count):
                answer += order_ch * char_count[order_ch]
                del char_count[order_ch]

        for char in char_count:
            answer += char * char_count[char]

        return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p 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;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;복잡도&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시간 복잡도:&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;i&gt;O(n + m)&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;공간 복잡도:&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;i&gt;O(n)&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>알고리즘/LeetCode</category>
      <author>EPguy</author>
      <guid isPermaLink="true">https://epguy.tistory.com/38</guid>
      <comments>https://epguy.tistory.com/38#entry38comment</comments>
      <pubDate>Mon, 11 Mar 2024 10:28:45 +0900</pubDate>
    </item>
    <item>
      <title>[알고리즘] 이진탐색 (Binary Search)</title>
      <link>https://epguy.tistory.com/37</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;이진 탐색&lt;/b&gt;은 &lt;b&gt;정렬된 배열&lt;/b&gt;에서만 사용할 수 있으며 &lt;b&gt;검색 간격&lt;/b&gt;을 반복적으로&amp;nbsp;&lt;b&gt;반으로 나누어&lt;/b&gt; 가면서 탐색하는&amp;nbsp;&lt;b&gt;탐색 알고리즘&lt;/b&gt; 중 하나입니다.&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; text-align: start;&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;동작방식&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. 배열의 중간 인덱스인 &lt;b&gt;mid&lt;/b&gt;, 탐색할 배열의 맨 왼쪽 인덱스인 &lt;b&gt;left&lt;/b&gt;, 맨 오른쪽인 &lt;b&gt;right&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2. 중간 인덱스는 &lt;b&gt;(left + right) / 2&lt;/b&gt; 로 계산합니다, 이 때 정수가 돼야함으로 &lt;b&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3. 배열의 mid번째 요소와 탐색 할 숫자를 비교합니다.&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;4. 탐색할 숫자가 &lt;b&gt;더 크면&lt;/b&gt;, &lt;b&gt;left&lt;/b&gt;를 &lt;b&gt;mid + 1&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;5. 탐색할 숫자가 &lt;b&gt;더 작으면&lt;/b&gt;, &lt;b&gt;right&lt;/b&gt;를 &lt;b&gt;mid - 1&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;6. 탐색 범위를 초과하기 전까지 반복합니다.&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;7. &lt;b&gt;left가 right보다 크면&lt;/b&gt; 탐색할 범위를 초과한 것이므로 &lt;b&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시간 복잡도: &lt;i&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #273239; text-align: left;&quot;&gt;O(log N).&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&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; text-align: start;&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;코드&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1709974906233&quot; class=&quot;python&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;def binary_search(target_number):
    sorted_array = [1,2,3,4,5,6]

    left = 0
    right = len(sorted_array) - 1
    while(right &amp;gt;= left):
        mid = (left + right) // 2
        if(target_number == sorted_array[mid]):
            return target_number
        elif(target_number &amp;lt; sorted_array[mid]):
            right = mid - 1
        else:
            left = mid + 1
    return -1

print(binary_search(2))
print(binary_search(7))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘/알고리즘 연구소</category>
      <author>EPguy</author>
      <guid isPermaLink="true">https://epguy.tistory.com/37</guid>
      <comments>https://epguy.tistory.com/37#entry37comment</comments>
      <pubDate>Sat, 9 Mar 2024 18:02:34 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode] 3005. Count Elements With Maximum Frequency</title>
      <link>https://epguy.tistory.com/36</link>
      <description>&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&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;문제&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote style=&quot;background-color: #ffffff; color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;You are given an array nums consisting of positive integers.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Return the total frequencies of elements in nums such that those elements all have the maximum frequency.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;The&amp;nbsp;frequency&amp;nbsp;of&amp;nbsp;an&amp;nbsp;element&amp;nbsp;is&amp;nbsp;the&amp;nbsp;number&amp;nbsp;of&amp;nbsp;occurrences&amp;nbsp;of&amp;nbsp;that&amp;nbsp;element&amp;nbsp;in&amp;nbsp;the&amp;nbsp;array.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;양의 정수로 이루어진 배열 nums가 주어집니다. 해당 배열의 원소들 중에서 가장 빈도수가 높은 원소들의 총 빈도수를 반환해야 합니다. 여기서 원소의 빈도수란 해당 원소가 배열에서 등장하는 횟수를 의미합니다.&lt;/span&gt;&lt;/blockquote&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;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&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;풀이&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #000000; 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;1. Count&amp;nbsp;Frequency&amp;nbsp;and&amp;nbsp;Max&amp;nbsp;Frequency&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;알고리즘&lt;/b&gt;&lt;/span&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. 배열을 순회하면서 각 원소들의 빈도수를 구합니다.&lt;/span&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2. 배열을 순회하며 가장 높은 빈도수를 계산합니다.&lt;/span&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3. 다시 배열을 순회하며 가장 높은 빈도수의 총 빈도수를 계산합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1709872104957&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def maxFrequencyElements(self, nums):
        frequencies = {}
        for i in range(len(nums)):
            if(nums[i] in frequencies):
                frequencies[nums[i]] = frequencies[nums[i]] + 1
            else:
                frequencies[nums[i]] = 1
        
        maxFrequency = 0
        for frequency in frequencies.values():
                maxFrequency = max(maxFrequency, frequency)

        result = 0
        for frequency in frequencies.values():
            if(frequency == maxFrequency):
                result += frequency

        return result&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;복잡도&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시간 복잡도:&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;i&gt;O(n)&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;공간 복잡도:&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;i&gt;O(n)&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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: #000000; 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;2. One-Pass&amp;nbsp;Sum&amp;nbsp;Max&amp;nbsp;Frequencies&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;알고리즘&lt;/b&gt;&lt;/span&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;&quot;&gt;1번 알고리즘이랑 유사하지만 반복문 하나로 끝낼 수 있는 방법입니다.&lt;/span&gt;&lt;/span&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;차이점은 원소의 빈도수, 최대빈도수, 총빈도수를 같이 계산한다는 차이가 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1709872164409&quot; class=&quot;python&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;def maxFrequencyElements(self, nums):
        frequencies = {}
        result = 0
        maxFrequency = 0
        for i in range(len(nums)):
            frequencies[nums[i]] = frequencies.get(nums[i], 0) + 1

            frequency = frequencies.get(nums[i])
            if(frequency &amp;gt; maxFrequency):
                result = frequency
                maxFrequency = frequency
            elif(frequency == maxFrequency):
                result += frequency
        return result&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;복잡도&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시간 복잡도:&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;i&gt;O(n)&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;공간 복잡도:&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;i&gt;O(n)&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;&lt;/p&gt;</description>
      <category>알고리즘/LeetCode</category>
      <author>EPguy</author>
      <guid isPermaLink="true">https://epguy.tistory.com/36</guid>
      <comments>https://epguy.tistory.com/36#entry36comment</comments>
      <pubDate>Fri, 8 Mar 2024 13:49:46 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode] 876. Middle of the Linked List</title>
      <link>https://epguy.tistory.com/35</link>
      <description>&lt;h3 style=&quot;color: #000000; text-align: start;&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;문제&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Given the head of a singly linked list, return the middle node of the linked list.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;If there are two middle nodes, return&amp;nbsp;the second middle&amp;nbsp;node.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;singly linked list가 주어졌을 때 linked list의 가운데 노드를 반환하세요.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;만약 두개의 중간 노드가 있을경우 두번째 노드를 반환하세요.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&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;풀이&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; 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;1. Counting element&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;Linked List의 노드 개수를 구한 다음, 가운데 인덱스의 Node를 찾는 방법입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1709861277619&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution(object):
    def middleNode(self, head):
        node = head
        size = 0
        while(node.next != None):
            node = node.next
            size += 1
        
        mid = int(size / 2)
        if(size % 2 != 0):
            mid += 1

        count = 0
        while(count &amp;lt; mid):
            head = head.next
            count += 1

        return head&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;복잡도&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시간 복잡도:&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;i&gt;O(n) + O(n/2)&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;공간 복잡도:&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;i&gt;O(1)&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; 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;2. Slow and Fast pointer&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;두칸식 순회하는 Fast와 한칸씩 순회하는 Slow를 사용하는 방법입니다.&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Fast가 순회를 다 끝냈으면 Slow의 위치는 중간이라는 점을 이해하시면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1709861311399&quot; class=&quot;python&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;class Solution(object):
    def middleNode(self, head):
        slow = head
        fast = head
        while(fast != None and fast.next != None):
            slow = slow.next
            fast = fast.next.next

        return slow&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;복잡도&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시간 복잡도:&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;i&gt;O(n)&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;공간 복잡도:&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;i&gt;O(1)&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>알고리즘/LeetCode</category>
      <author>EPguy</author>
      <guid isPermaLink="true">https://epguy.tistory.com/35</guid>
      <comments>https://epguy.tistory.com/35#entry35comment</comments>
      <pubDate>Fri, 8 Mar 2024 10:31:24 +0900</pubDate>
    </item>
  </channel>
</rss>