<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>on my way</title>
    <link>https://wing-beat.tistory.com/</link>
    <description>IT 공부를 합니다 </description>
    <language>ko</language>
    <pubDate>Wed, 20 May 2026 12:30:24 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>wingbeat</managingEditor>
    <item>
      <title>[프로그래머스 코딩테스트 연습] 하노이의 탑 (Python3)</title>
      <link>https://wing-beat.tistory.com/220</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12946#&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/12946#&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1739196833809&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12946#&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bXefaV/hyYf1d2zSb/BN4PNow9vFeezIqyeCRkh1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/p0kVF/hyYf3waBs1/csbpMQOIllfzo5XyHgMHUK/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12946#&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12946#&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bXefaV/hyYf1d2zSb/BN4PNow9vFeezIqyeCRkh1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/p0kVF/hyYf3waBs1/csbpMQOIllfzo5XyHgMHUK/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMGCD7/btsMd4awqUT/HBeq1dnQhMNPPVbnieJDd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMGCD7/btsMd4awqUT/HBeq1dnQhMNPPVbnieJDd1/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;2260&quot; data-origin-height=&quot;1196&quot; data-filename=&quot;Screenshot 2025-02-10 at 11.14.18 PM.png&quot; style=&quot;width: 72.0091%; margin-right: 10px;&quot; data-widthpercent=&quot;72.86&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMGCD7/btsMd4awqUT/HBeq1dnQhMNPPVbnieJDd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMGCD7%2FbtsMd4awqUT%2FHBeq1dnQhMNPPVbnieJDd1%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;2260&quot; height=&quot;1196&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L6xXj/btsMeMAeTVz/xQvY4zwnBujFA2msiS98QK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L6xXj/btsMeMAeTVz/xQvY4zwnBujFA2msiS98QK/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;842&quot; data-origin-height=&quot;1196&quot; data-filename=&quot;Screenshot 2025-02-10 at 11.14.24 PM.png&quot; style=&quot;width: 26.8282%;&quot; data-widthpercent=&quot;27.14&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L6xXj/btsMeMAeTVz/xQvY4zwnBujFA2msiS98QK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL6xXj%2FbtsMeMAeTVz%2FxQvY4zwnBujFA2msiS98QK%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;842&quot; height=&quot;1196&quot;/&gt;&lt;/span&gt;&lt;/div&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 data-ke-size=&quot;size16&quot;&gt;1. start의 N-1개의 원반을 보조 기둥으로 옮긴다 (aux)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 가장 큰 원반을 end로 옮긴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 보조의 N-1개의 원반을 end로 옮긴다.&lt;/p&gt;
&lt;pre id=&quot;code_1739197199069&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def move(n, start, end, aux, answer):
    if n==1: 
        answer.append([start, end])
        return
    move(n-1, start, aux, end, answer) # n-1개 원반을 보조로 이동
    answer.append([start,end]) # 가장 큰 원반을 목적지로
    move(n-1, aux, end, start, answer) # 보조의 n-1개 원반을 목적지로
def solution(n):
    answer = []
    move(n, 1, 3, 2, answer)
    return answer&lt;/code&gt;&lt;/pre&gt;</description>
      <category>algorithm/Python</category>
      <author>wingbeat</author>
      <guid isPermaLink="true">https://wing-beat.tistory.com/220</guid>
      <comments>https://wing-beat.tistory.com/220#entry220comment</comments>
      <pubDate>Mon, 10 Feb 2025 23:20:06 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스 코딩테스트 연습] 다리를 지나는 트럭 (Python3)</title>
      <link>https://wing-beat.tistory.com/219</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42583&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/42583&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1738144608225&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42583&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/8H56P/hyX7QxxKU7/7jIQWDLBBWNQLbPsQJeIb1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/b8t3Ie/hyX7Us9AkG/kKpFb9CEdEJXBul53VkgD1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42583&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42583&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/8H56P/hyX7QxxKU7/7jIQWDLBBWNQLbPsQJeIb1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/b8t3Ie/hyX7Us9AkG/kKpFb9CEdEJXBul53VkgD1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-01-29 at 6.57.10 PM.png&quot; data-origin-width=&quot;2446&quot; data-origin-height=&quot;1676&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFOktb/btsL2331dvb/dKv3sumd6GATjsLQKJD78K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFOktb/btsL2331dvb/dKv3sumd6GATjsLQKJD78K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFOktb/btsL2331dvb/dKv3sumd6GATjsLQKJD78K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFOktb%2FbtsL2331dvb%2FdKv3sumd6GATjsLQKJD78K%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;2446&quot; height=&quot;1676&quot; data-filename=&quot;Screenshot 2025-01-29 at 6.57.10 PM.png&quot; data-origin-width=&quot;2446&quot; data-origin-height=&quot;1676&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-01-29 at 6.57.18 PM.png&quot; data-origin-width=&quot;1062&quot; data-origin-height=&quot;396&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qUIZR/btsL2kSDcNP/iQ219qKtUBnbqaWDbmFAP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qUIZR/btsL2kSDcNP/iQ219qKtUBnbqaWDbmFAP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qUIZR/btsL2kSDcNP/iQ219qKtUBnbqaWDbmFAP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqUIZR%2FbtsL2kSDcNP%2FiQ219qKtUBnbqaWDbmFAP0%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;1062&quot; height=&quot;396&quot; data-filename=&quot;Screenshot 2025-01-29 at 6.57.18 PM.png&quot; data-origin-width=&quot;1062&quot; data-origin-height=&quot;396&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1738144658694&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 1트 (돌아가긴 하나 비효율)
from collections import deque
def solution(bridge_length, weight, truck_weights):
    i, cnt, flag = 0, 0, True
    time, queue = deque(), deque()
    while True:
        cnt += 1
        time = deque([t+1 for t in time])
        if time and time[0] &amp;gt;= bridge_length:
            queue.popleft()
            time.popleft()
        if flag and len(queue) &amp;lt; bridge_length:
            w = truck_weights[i]
            if sum(queue) + w &amp;lt;= weight:
                queue.append(w)
                time.append(0)
                i+=1
                if i==len(truck_weights): flag=False
        if not flag and not queue: break
    return cnt&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;⚡️ 나의 1트 코드의 문제점&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;sum(queue) 사용으로 매번 다리 위의 총 무게 계산 (O(N))&lt;/b&gt; &amp;rarr; &lt;b&gt;비효율적&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;sum(queue)는 &lt;b&gt;매번 리스트의 모든 요소를 더하는 연산&lt;/b&gt;이므로, &lt;b&gt;시간 복잡도가 O(N)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;트럭이 많을수록 성능 저하 발생&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;time 리스트를 매번 새로 생성 (O(N))&lt;/b&gt; &amp;rarr; &lt;b&gt;비효율적&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;time = deque([t+1 for t in time]) &amp;rarr; 리스트 전체를 다시 만들면서 메모리 낭비&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;불필요한 조건문 (flag 체크)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;flag = False는 사실 필요 없음 &amp;rarr; i == len(truck_weights)일 때 break 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1738144857489&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 리팩토링
from collections import deque
def solution(bridge_length, weight, truck_weights):
    bridge = deque([0] * bridge_length)
    total_weight, time = 0, 0
    for w in truck_weights:
        while True:
            time += 1
            total_weight -= bridge.popleft()
            if total_weight + w &amp;lt;= weight:
                bridge.append(w)
                total_weight += w
                break
            bridge.append(0)
    return time + bridge_length&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;⚡️ 리팩토링 코드의 개선점&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;sum(queue) 대신 total_weight 변수를 사용&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;O(N) &amp;rarr; O(1)로 최적화&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;total_weight를 유지하면서 &lt;b&gt;매번 더하지 않고 빼고 더하는 방식&lt;/b&gt;으로 &lt;b&gt;시간 절약&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;매번 리스트 재생성 없이 popleft() 사용하여 시간 업데이트&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;time 리스트를 따로 만들지 않고 &lt;b&gt;그냥 time 변수를 직접 증가시키는 방식&lt;/b&gt;으로 최적화&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;while True를 사용해 한 번에 트럭을 올릴 수 있는 시점까지 반복&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;불필요한 flag 제거&lt;/b&gt; &amp;rarr; i == len(truck_weights) 체크 없이 간결해짐&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;마지막 트럭이 다리를 건너는 시간 추가 (time + bridge_length)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;트럭이 다리를 다 건너는 마지막 시간을 따로 처리하여 &lt;b&gt;명확한 종료 조건 적용&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>algorithm/Python</category>
      <author>wingbeat</author>
      <guid isPermaLink="true">https://wing-beat.tistory.com/219</guid>
      <comments>https://wing-beat.tistory.com/219#entry219comment</comments>
      <pubDate>Wed, 29 Jan 2025 20:37:51 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스 코딩테스트 연습] 기능개발 (Python3)</title>
      <link>https://wing-beat.tistory.com/218</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42586&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/42586&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-01-21 at 4.01.21 AM.png&quot; data-origin-width=&quot;1648&quot; data-origin-height=&quot;1320&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Paw3H/btsLT5gPkpp/ESU8cDFRD6IPwzLOdZPAeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Paw3H/btsLT5gPkpp/ESU8cDFRD6IPwzLOdZPAeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Paw3H/btsLT5gPkpp/ESU8cDFRD6IPwzLOdZPAeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPaw3H%2FbtsLT5gPkpp%2FESU8cDFRD6IPwzLOdZPAeK%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;1648&quot; height=&quot;1320&quot; data-filename=&quot;Screenshot 2025-01-21 at 4.01.21 AM.png&quot; data-origin-width=&quot;1648&quot; data-origin-height=&quot;1320&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-01-21 at 4.01.32 AM.png&quot; data-origin-width=&quot;1638&quot; data-origin-height=&quot;734&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oxJ9I/btsLUso5exc/Z9CzoIeKQkMV80YOwSkVEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oxJ9I/btsLUso5exc/Z9CzoIeKQkMV80YOwSkVEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oxJ9I/btsLUso5exc/Z9CzoIeKQkMV80YOwSkVEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoxJ9I%2FbtsLUso5exc%2FZ9CzoIeKQkMV80YOwSkVEK%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;1638&quot; height=&quot;734&quot; data-filename=&quot;Screenshot 2025-01-21 at 4.01.32 AM.png&quot; data-origin-width=&quot;1638&quot; data-origin-height=&quot;734&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1737399775026&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import math
def solution(progresses, speeds):
    days = [math.ceil((100-p)/s) for p, s in zip(progresses, speeds)]
    answer = []
    cur, func = 0, 0
    for i, d in enumerate(days):
        if cur &amp;lt; d:
            if i: answer.append(func)
            cur, func = d, 1
        else: func += 1
    answer.append(func)
    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;소요일 배열을 기준으로 같이 배포될 수 있을지를 순회한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cur는 기준배포일, func은 기능 수를 카운트하는 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기준 배포일보다 큰 값이 나오면 새 그룹이므로 그 전까지 answer에 기능의 수를 넣고 기준배포일과 기능수 초기화 (cur, func = d, 1)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1737400161564&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Queue로 풀이
from collections import deque
import math
def solution(progresses, speeds):
    days = deque([math.ceil((100-p)/s) for p, s in zip(progresses, speeds)])
    answer = []
    while days:
        cur, func = days.popleft(), 1
        while days and days[0] &amp;lt;= cur:
            days.popleft()
            func += 1
        answer.append(func)
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Queue로 풀면, 하나씩 pop하면서 기준일보다 작을때까지 기능 수를 더해서 answer에 넣어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;queue가 있을 때 까지 반복&lt;/p&gt;</description>
      <category>algorithm/Python</category>
      <author>wingbeat</author>
      <guid isPermaLink="true">https://wing-beat.tistory.com/218</guid>
      <comments>https://wing-beat.tistory.com/218#entry218comment</comments>
      <pubDate>Tue, 21 Jan 2025 04:10:36 +0900</pubDate>
    </item>
    <item>
      <title>[백준 2164번] 카드2 (Python3, 실버4)</title>
      <link>https://wing-beat.tistory.com/217</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2164&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/2164&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-01-21 at 3.32.43 AM.png&quot; data-origin-width=&quot;1734&quot; data-origin-height=&quot;1740&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dKTJ3d/btsLUtIi7Rj/lnn6lko6mrg4pqe6D3auo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dKTJ3d/btsLUtIi7Rj/lnn6lko6mrg4pqe6D3auo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dKTJ3d/btsLUtIi7Rj/lnn6lko6mrg4pqe6D3auo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdKTJ3d%2FbtsLUtIi7Rj%2Flnn6lko6mrg4pqe6D3auo1%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;1734&quot; height=&quot;1740&quot; data-filename=&quot;Screenshot 2025-01-21 at 3.32.43 AM.png&quot; data-origin-width=&quot;1734&quot; data-origin-height=&quot;1740&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1737397981849&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from collections import deque
import sys
queue = deque(range(1, int(sys.stdin.readline())+1))
while len(queue) &amp;gt; 1:
    queue.popleft()
    queue.rotate(-1)
print(queue[0])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>algorithm/Python</category>
      <author>wingbeat</author>
      <guid isPermaLink="true">https://wing-beat.tistory.com/217</guid>
      <comments>https://wing-beat.tistory.com/217#entry217comment</comments>
      <pubDate>Tue, 21 Jan 2025 03:34:29 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스 코딩테스트 연습] 주식가격 (Python3)</title>
      <link>https://wing-beat.tistory.com/216</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42584&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/42584&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-01-21 at 3.14.53 AM.png&quot; data-origin-width=&quot;1480&quot; data-origin-height=&quot;1270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkcJnQ/btsLSTayZKK/2QCRZWkp3CdX5hkfPkdYVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkcJnQ/btsLSTayZKK/2QCRZWkp3CdX5hkfPkdYVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkcJnQ/btsLSTayZKK/2QCRZWkp3CdX5hkfPkdYVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkcJnQ%2FbtsLSTayZKK%2F2QCRZWkp3CdX5hkfPkdYVK%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;1480&quot; height=&quot;1270&quot; data-filename=&quot;Screenshot 2025-01-21 at 3.14.53 AM.png&quot; data-origin-width=&quot;1480&quot; data-origin-height=&quot;1270&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1737396913962&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(prices):
    N = len(prices)
    answer = [0 for _ in range(N)]
    stack = []
    
    for now, price in enumerate(prices):
        # 스택 인덱스 가격과 현재 가격 비교. 
        # 마지막 가격이 현재가격보다 크면 가격 떨어진 것이므로 인덱스 꺼냄
        while stack and prices[stack[-1]] &amp;gt; price:
            idx = stack.pop()
            answer[idx] = now - idx # 현재 인덱스 - 꺼낸 인덱스 
        stack.append(now) # 현재 인덱스 추가
        
    while stack:
        idx = stack.pop()
        answer[idx] = N-idx-1 # 끝까지 남은 경우
    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;&lt;b&gt;요약&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 스택에는 인덱스만 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 가격이 떨어질 때 마다 스택에서 값을 꺼내 시간을 계산해 answer에 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 최종적으로 스택에 남은 값은 끝까지 유지된 시간을 계산한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;prices = [1,2,3,2,3] 일 때의 단계를 살펴보자&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;초기 상태 : stack = [], answer = [0,0,0,0,0]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1초 (now=0, price=1) : stack = [0], answer = [0,0,0,0,0]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2초 (now=1, price=2) : stack = [0, 1], answer = [0,0,0,0,0]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3초 (now=2, price=3) : stack = [0, 1, 2], answer = [0,0,0,0,0]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4초 (now=3, price=2) : 가격이 떨어지는 구간&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;stack[-1] = 2으로, 스택 마지막 가격 prices[2] = 3 &amp;gt; 현재 price = 2 조건 진입.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;idx = 2. answer[2] = 3 - 2 = 1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;stack = [0, 1, 3], answer = [0,0,1,0,0]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5초 (now=4, price=3) : stack = [0, 1, 3, 4], answer = [0,0,1,0,0]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;while stack: 구간을 통해 종료 후 스택을 처리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(최종적으로 스택에 남은 값은 끝까지 유지된 시간을 계산하게 된다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;idx=4, answer[4] = 5-4-1 = 0, answer = [0,0,1,0,0]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;idx=3, answer[3] = 5-3-1 = 1, answer = [0,0,1,1,0]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;idx=1, answer[1] = 5-1-1 = 3, answer = [0,3,1,1,0]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;idx=0, answer[0] = 5-0-1 = 4, answer = [4,3,1,1,0]&lt;/p&gt;</description>
      <category>algorithm/Python</category>
      <author>wingbeat</author>
      <guid isPermaLink="true">https://wing-beat.tistory.com/216</guid>
      <comments>https://wing-beat.tistory.com/216#entry216comment</comments>
      <pubDate>Tue, 21 Jan 2025 03:25:33 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스 코딩테스트 연습] 괄호 회전하기 (Python3)</title>
      <link>https://wing-beat.tistory.com/215</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/76502&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/76502&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1737313938081&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/76502&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Zn09z/hyX0nX0OK6/GdRlO8rhKm7DXyHiEadqX0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/BHBzt/hyX0wtW6av/V0fkBaeQx65Z2VFWtPyxKK/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/76502&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/76502&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Zn09z/hyX0nX0OK6/GdRlO8rhKm7DXyHiEadqX0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/BHBzt/hyX0wtW6av/V0fkBaeQx65Z2VFWtPyxKK/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-01-20 at 4.12.27 AM.png&quot; data-origin-width=&quot;1322&quot; data-origin-height=&quot;1544&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RxBUn/btsLRLXsRbe/qirrkrF03LKigdwQSDN2v0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RxBUn/btsLRLXsRbe/qirrkrF03LKigdwQSDN2v0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RxBUn/btsLRLXsRbe/qirrkrF03LKigdwQSDN2v0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRxBUn%2FbtsLRLXsRbe%2FqirrkrF03LKigdwQSDN2v0%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;1322&quot; height=&quot;1544&quot; data-filename=&quot;Screenshot 2025-01-20 at 4.12.27 AM.png&quot; data-origin-width=&quot;1322&quot; data-origin-height=&quot;1544&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-01-20 at 4.12.37 AM.png&quot; data-origin-width=&quot;1026&quot; data-origin-height=&quot;756&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqnspY/btsLSAnIHlJ/erFhkFOyEOrmVrlhgYSO7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqnspY/btsLSAnIHlJ/erFhkFOyEOrmVrlhgYSO7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqnspY/btsLSAnIHlJ/erFhkFOyEOrmVrlhgYSO7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqnspY%2FbtsLSAnIHlJ%2FerFhkFOyEOrmVrlhgYSO7k%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;1026&quot; height=&quot;756&quot; data-filename=&quot;Screenshot 2025-01-20 at 4.12.37 AM.png&quot; data-origin-width=&quot;1026&quot; data-origin-height=&quot;756&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-01-20 at 4.12.45 AM.png&quot; data-origin-width=&quot;1304&quot; data-origin-height=&quot;1086&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c6AVIJ/btsLSqkWDTr/fbZmWrHjT0U6Stt9NKpnwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c6AVIJ/btsLSqkWDTr/fbZmWrHjT0U6Stt9NKpnwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c6AVIJ/btsLSqkWDTr/fbZmWrHjT0U6Stt9NKpnwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc6AVIJ%2FbtsLSqkWDTr%2FfbZmWrHjT0U6Stt9NKpnwk%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;1304&quot; height=&quot;1086&quot; data-filename=&quot;Screenshot 2025-01-20 at 4.12.45 AM.png&quot; data-origin-width=&quot;1304&quot; data-origin-height=&quot;1086&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1737314563107&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 리팩토링 전
def solution(s):
    result = 0
    for _ in range(len(s)):
        s = s[1:] + s[0]
        stack = []
        for c in s:
            if c in '({[': stack.append(c)
            else:
                if not stack: break
                if c==')' and stack[-1]=='(':
                    stack.pop()
                elif c=='}' and stack[-1]=='{':
                    stack.pop()
                elif c==']' and stack[-1]=='[':
                    stack.pop()
        else: # 정상적으로 종료시 실행
            if not stack: result += 1
    return result&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 짠 버전은 문자열을 s[1:]+s[0]으로 반복하면서 검사하는 코드.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬을 몇년을 했는데 for-else를 몰랐어서 창피하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for문이 정상 종료되면 실행되는 역할을 한다. 중간에 break로 강제종료되면 else는 실행안됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1737314632473&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 리팩토링
from collections import deque
def solution(s):
    result = 0
    s = deque(s)
    for _ in range(len(s)):
        stack = []
        for c in s:
            if c in '({[': stack.append(c)
            else:
                if not stack: break
                if (c==')' and stack[-1]=='(') or (c=='}' and stack[-1]=='{') or (c==']' and stack[-1]=='['):
                    stack.pop()
        else:
            if not stack: result += 1
        s.rotate(-1)
    return result&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;deque의 rotate(-1)라는 신박한 기능을 발견했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;rotate(1) : 오른쪽으로 회전, rotate(-1) : 왼쪽으로 회전&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-01-20 at 4.24.41 AM.png&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;634&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Nseav/btsLSnoBjxF/jxUA3LA7AoK6O2jWWeNdqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Nseav/btsLSnoBjxF/jxUA3LA7AoK6O2jWWeNdqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Nseav/btsLSnoBjxF/jxUA3LA7AoK6O2jWWeNdqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNseav%2FbtsLSnoBjxF%2FjxUA3LA7AoK6O2jWWeNdqK%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;802&quot; height=&quot;634&quot; data-filename=&quot;Screenshot 2025-01-20 at 4.24.41 AM.png&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;634&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>algorithm/Python</category>
      <author>wingbeat</author>
      <guid isPermaLink="true">https://wing-beat.tistory.com/215</guid>
      <comments>https://wing-beat.tistory.com/215#entry215comment</comments>
      <pubDate>Mon, 20 Jan 2025 04:27:54 +0900</pubDate>
    </item>
    <item>
      <title>[백준 1874번] 스택 수열 (Python3, 실버4)</title>
      <link>https://wing-beat.tistory.com/214</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1874&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/1874&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-01-20 at 3.51.13 AM.png&quot; data-origin-width=&quot;2140&quot; data-origin-height=&quot;1250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cn8FnW/btsLTIrv32W/d1wqtCawaoTWRFIMXucVsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cn8FnW/btsLTIrv32W/d1wqtCawaoTWRFIMXucVsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cn8FnW/btsLTIrv32W/d1wqtCawaoTWRFIMXucVsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcn8FnW%2FbtsLTIrv32W%2Fd1wqtCawaoTWRFIMXucVsK%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;2140&quot; height=&quot;1250&quot; data-filename=&quot;Screenshot 2025-01-20 at 3.51.13 AM.png&quot; data-origin-width=&quot;2140&quot; data-origin-height=&quot;1250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-01-20 at 3.51.28 AM.png&quot; data-origin-width=&quot;2110&quot; data-origin-height=&quot;1678&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBdOUa/btsLRLDuDwI/DwHS2qmsksVpSnUvxPg0X1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBdOUa/btsLRLDuDwI/DwHS2qmsksVpSnUvxPg0X1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBdOUa/btsLRLDuDwI/DwHS2qmsksVpSnUvxPg0X1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBdOUa%2FbtsLRLDuDwI%2FDwHS2qmsksVpSnUvxPg0X1%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;2110&quot; height=&quot;1678&quot; data-filename=&quot;Screenshot 2025-01-20 at 3.51.28 AM.png&quot; data-origin-width=&quot;2110&quot; data-origin-height=&quot;1678&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 data-ke-size=&quot;size16&quot;&gt;스택에 1부터 n까지 숫자에 대해 하나하나 수를 push, 해당 수이면 pop하고, 다음 수를 탐색하고.. 이런 과정의 반복&lt;/p&gt;
&lt;pre id=&quot;code_1737312906584&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1. push 1 (+), push 2 (+), push 3 (+), push 4 (+)
   현재 스택: [1, 2, 3, 4]
   수열에서 필요한 숫자: 4
   -&amp;gt; pop 4 (-)
   현재 스택: [1, 2, 3]

2. pop 3 (-)
   현재 스택: [1, 2]

3. push 5 (+), push 6 (+)
   현재 스택: [1, 2, 5, 6]
   수열에서 필요한 숫자: 6
   -&amp;gt; pop 6 (-)
   현재 스택: [1, 2, 5]

4. push 7 (+), push 8 (+)
   현재 스택: [1, 2, 5, 7, 8]
   수열에서 필요한 숫자: 8
   -&amp;gt; pop 8 (-), pop 7 (-)
   현재 스택: [1, 2, 5]

5. pop 5 (-), pop 2 (-), pop 1 (-)
   현재 스택: []&lt;/code&gt;&lt;/pre&gt;
&lt;p 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;pre id=&quot;code_1737312925187&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 리팩토링 전
import sys
N = int(sys.stdin.readline())
seq = [int(sys.stdin.readline()) for _ in range(N)]

stack, op = [], []
cur = 1

for num in seq:
    # num 될때까지 숫자 추가
    while cur &amp;lt;= num:
        stack.append(cur)
        op.append('+')
        cur += 1
    if stack and stack[-1] == num:
        stack.pop()
        op.append('-')
    else:
        op.append('X')
        break
print(&quot;NO&quot; if op[-1]=='X' else '\n'.join(op))&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;프로그래머스면 바로 return 하면 되는데 백준은 어쩌지 싶었더니 sys.exit(0) 라는게 있더라&lt;/p&gt;
&lt;pre id=&quot;code_1737313028615&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    else:
        print(&quot;NO&quot;)
        sys.exit(0)
print('\n'.join(op))&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-01-20 at 3.57.40 AM.png&quot; data-origin-width=&quot;872&quot; data-origin-height=&quot;284&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bloUB6/btsLToGTHSY/zBn0sPR5iIdIBPY0k47qMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bloUB6/btsLToGTHSY/zBn0sPR5iIdIBPY0k47qMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bloUB6/btsLToGTHSY/zBn0sPR5iIdIBPY0k47qMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbloUB6%2FbtsLToGTHSY%2FzBn0sPR5iIdIBPY0k47qMk%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;872&quot; height=&quot;284&quot; data-filename=&quot;Screenshot 2025-01-20 at 3.57.40 AM.png&quot; data-origin-width=&quot;872&quot; data-origin-height=&quot;284&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간은 4ms 정도 빠름&lt;/p&gt;</description>
      <category>algorithm/Python</category>
      <author>wingbeat</author>
      <guid isPermaLink="true">https://wing-beat.tistory.com/214</guid>
      <comments>https://wing-beat.tistory.com/214#entry214comment</comments>
      <pubDate>Mon, 20 Jan 2025 03:58:47 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스 코딩테스트 연습] 압축 (Python3)</title>
      <link>https://wing-beat.tistory.com/213</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/17684&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/17684&lt;/a&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1737310021282&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(msg):
    d = {chr(i+65): i+1 for i in range(26)}
    pos, idx = 0, 27
    answer = [] 
    
    while pos &amp;lt; len(msg):
        w = msg[pos]
        while pos+1 &amp;lt; len(msg) and w+msg[pos+1] in d:
            pos += 1
            w += msg[pos]
        answer.append(d[w])
        
        if pos+1 &amp;lt; len(msg):
            d[w+msg[pos+1]] = idx
            idx += 1
        pos += 1
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열을 순차적으로 처리하기 위해 위치를 나타내는 pos 변수를 두고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pos &amp;lt; len(msg)로 순차적으로 처리했다.&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;현재 입력과 일치하는 가장 긴 문자열 w를 찾기 위해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 w = msg[pos]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 다음의 최대 문자열(pos+1&amp;lt;len(msg))이 사전에 있을때까지(w+msg[pos+1] in d), while문으로 pos += 1 해서 찾으며 현재 문자열 w를 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최대의 문자열을 answer에 추가&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;작업 후에, 현재 문자열과 그 다음의 문자열을 더해서 사전 d에 추가한다. idx += 1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작업이 끝나면 다음 위치부터 찾기 시작 pos += 1&lt;/p&gt;</description>
      <category>algorithm/Python</category>
      <author>wingbeat</author>
      <guid isPermaLink="true">https://wing-beat.tistory.com/213</guid>
      <comments>https://wing-beat.tistory.com/213#entry213comment</comments>
      <pubDate>Mon, 20 Jan 2025 03:12:24 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스 코딩테스트 연습] 귤 고르기 (Python3)</title>
      <link>https://wing-beat.tistory.com/212</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/138476&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/138476&lt;/a&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-01-16 at 9.26.33 PM.png&quot; data-origin-width=&quot;1324&quot; data-origin-height=&quot;1534&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDimXY/btsLQRhXMl6/BKzzBmGoThirz26eLpjuak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDimXY/btsLQRhXMl6/BKzzBmGoThirz26eLpjuak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDimXY/btsLQRhXMl6/BKzzBmGoThirz26eLpjuak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDimXY%2FbtsLQRhXMl6%2FBKzzBmGoThirz26eLpjuak%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;1324&quot; height=&quot;1534&quot; data-filename=&quot;Screenshot 2025-01-16 at 9.26.33 PM.png&quot; data-origin-width=&quot;1324&quot; data-origin-height=&quot;1534&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1737030363976&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(k, tangerine):
    answer = 0
    for _, cnt in Counter(tangerine).most_common():
        k -= cnt
        answer += 1
        if k &amp;lt;= 0: return answer

# 리팩토링
from collections import Counter
def solution(k, tangerine):
    for i, cnt in enumerate(sorted(Counter(tangerine).values(), reverse=True)):
        k -= cnt
        if k &amp;lt;= 0: return i+1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;속도는 리팩한게 더 빠른거 같긴한데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;most_common() 유용하다&lt;/p&gt;</description>
      <category>algorithm/Python</category>
      <author>wingbeat</author>
      <guid isPermaLink="true">https://wing-beat.tistory.com/212</guid>
      <comments>https://wing-beat.tistory.com/212#entry212comment</comments>
      <pubDate>Thu, 16 Jan 2025 21:28:19 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스 코딩테스트 연습] 베스트 앨범 (Python3)</title>
      <link>https://wing-beat.tistory.com/211</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42579&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/42579&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1737029111507&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42579&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/csLNdg/hyX0mdnq4g/3Z8qvIAy4sekemP0K0xKs0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/j1HTw/hyX0q03S40/vglKLxRE5vlEUkAQrdKFE0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42579&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42579&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/csLNdg/hyX0mdnq4g/3Z8qvIAy4sekemP0K0xKs0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/j1HTw/hyX0q03S40/vglKLxRE5vlEUkAQrdKFE0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-01-16 at 9.05.22 PM.png&quot; data-origin-width=&quot;1374&quot; data-origin-height=&quot;1458&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z7FVT/btsLQF28PrH/rgJQvk6E37PteVViEWewL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z7FVT/btsLQF28PrH/rgJQvk6E37PteVViEWewL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z7FVT/btsLQF28PrH/rgJQvk6E37PteVViEWewL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ7FVT%2FbtsLQF28PrH%2FrgJQvk6E37PteVViEWewL0%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;1374&quot; height=&quot;1458&quot; data-filename=&quot;Screenshot 2025-01-16 at 9.05.22 PM.png&quot; data-origin-width=&quot;1374&quot; data-origin-height=&quot;1458&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;pre id=&quot;code_1737029597332&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 리팩 전
from collections import defaultdict

def solution(genres, plays):
    totalPlay = defaultdict(int)
    songs = defaultdict(list)
    for i, [genre, play] in enumerate(zip(genres, plays)):
        totalPlay[genre] += play
        songs[genre].append([play, i])

    best = []
    for genre, play in sorted(totalPlay.items(), key=lambda x: -x[1]):
        for idx, [play, num] in enumerate(sorted(songs[genre], key=lambda x: -x[0])):
            if idx &amp;gt; 1: break
            best.append(num)
    return best
    
# 리팩토링
from collections import defaultdict

def solution(genres, plays):
    totalPlay = defaultdict(int)
    songs = defaultdict(list)
    for i, [genre, play] in enumerate(zip(genres, plays)):
        totalPlay[genre] += play
        songs[genre].append([play, i])

    best = []
    for genre in sorted(totalPlay, key=totalPlay.get, reverse=True):
        for play, cnt in sorted(songs[genre], key=lambda x: -x[0])[:2]:
            best.append(cnt)
    return best&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜 sorted()[:2]를 생각하지 못했을까....&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;get함수도 key로 사용하는 법을 배웠다.&lt;/p&gt;</description>
      <category>algorithm/Python</category>
      <author>wingbeat</author>
      <guid isPermaLink="true">https://wing-beat.tistory.com/211</guid>
      <comments>https://wing-beat.tistory.com/211#entry211comment</comments>
      <pubDate>Thu, 16 Jan 2025 21:14:21 +0900</pubDate>
    </item>
  </channel>
</rss>