<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Frontend-Deep-Dive</title>
    <link>https://glowdev.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Wed, 10 Jun 2026 04:28:18 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>glowing713</managingEditor>
    <image>
      <title>Frontend-Deep-Dive</title>
      <url>https://tistory1.daumcdn.net/tistory/3301364/attach/994e0d95e272473d8364cd36bfce016c</url>
      <link>https://glowdev.tistory.com</link>
    </image>
    <item>
      <title>[프로그래머스] 카펫 / 완전 탐색(Brute-force Search)</title>
      <link>https://glowdev.tistory.com/98</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;programmers.co.kr_learn_courses_30_lessons_42842_language=python3.png&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;2229&quot; width=&quot;590&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/42842&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUnt0K/btq0iCl94pm/aGmsr8NeIkAnPQyKa7aEik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUnt0K%2Fbtq0iCl94pm%2FaGmsr8NeIkAnPQyKa7aEik%2Fimg.png&quot; data-filename=&quot;programmers.co.kr_learn_courses_30_lessons_42842_language=python3.png&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;2229&quot; width=&quot;590&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;이미지를 클릭하면 문제 사이트로 이동합니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;  문제 이해&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 33.2188%; height: 186px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; background-color: #6b2b06;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 25%; background-color: #6b2b06;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 25%; background-color: #6b2b06;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 25%; background-color: #6b2b06;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; background-color: #6b2b06;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 25%; background-color: #ecd444;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 25%; background-color: #ecd444;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 25%; background-color: #6b2b06;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; background-color: #6b2b06;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 25%; background-color: #6b2b06;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 25%; background-color: #6b2b06;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 25%; background-color: #6b2b06;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;갈색 타일의 개수와 노란색 타일의 개수가 입력으로 주어질 때, 전체 카펫의 가로 길이와 세로 길이를 구하는 문제이다.&lt;/p&gt;
&lt;p&gt;수식으로 정리해본다면,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1. &lt;span style=&quot;color: #1a5490;&quot;&gt;가로&lt;/span&gt;를 테두리를 포함해서 \(x+2\) 로 표현하고, &lt;span style=&quot;color: #1a5490;&quot;&gt;세로&lt;/span&gt;는 테두리를 포함하여 \(y+2\) 로 표현한다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2. 위 수식을 기준으로 &lt;span style=&quot;color: #1a5490;&quot;&gt;전체 칸 수&lt;/span&gt;는 \((x+2)(y+2) = brown + yellow\) 로 표현할 수 있다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;3. &lt;span style=&quot;color: #1a5490;&quot;&gt;노란 부분&lt;/span&gt;은 \(xy = yellow\) 로 표현할 수 있다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;4. 전체 칸 수를 나타내는 수식을 전개하면 \(xy+2x+2y+4=brown+xy\) 가 되고, 이를 정리하면 \(x+y = \frac{brown-4}{2}\) 라는 관계가 성립된다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;즉,&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;color: #781b33;&quot;&gt;\(y = \frac{brown-4}{2}-x\)&lt;/span&gt; 관계를 만족하며 x의 변화에 따른 y 값을 구하다가&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;color: #781b33;&quot;&gt;\(xy = yellow\)&lt;/span&gt; 조건이 만족하는 부분을 찾아내면 해답이 된다.&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 과정을 코드로 구현하면 다음과 같다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;i&gt;구현 언어: Python&lt;/i&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1615995274944&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(brown, yellow):
    answer = []
    x = 0
    y = brown
    while True:
        x += 1
        y = (brown - 4) // 2 - x
        if x * y == yellow:
            answer.append(y+2)
            answer.append(x+2)
            break
    return answer&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Problem_Solving</category>
      <category>brute-force</category>
      <category>ps</category>
      <category>Python</category>
      <category>완전탐색</category>
      <category>프로그래머스</category>
      <author>glowing713</author>
      <guid isPermaLink="true">https://glowdev.tistory.com/98</guid>
      <comments>https://glowdev.tistory.com/98#entry98comment</comments>
      <pubDate>Thu, 18 Mar 2021 00:35:49 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 소수 찾기 / 완전 탐색(Brute-force Search)</title>
      <link>https://glowdev.tistory.com/97</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;1483&quot; data-filename=&quot;programmers.co.kr_learn_courses_30_lessons_42839_language=python3.png&quot; width=&quot;622&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/42839&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckS3IW/btq0oaawG2O/PKlNu4aDi7BucGJcRozWRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckS3IW%2Fbtq0oaawG2O%2FPKlNu4aDi7BucGJcRozWRk%2Fimg.png&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;1483&quot; data-filename=&quot;programmers.co.kr_learn_courses_30_lessons_42839_language=python3.png&quot; width=&quot;622&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;이미지를 클릭하면 문제 사이트로 이동합니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;  문제 이해&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;한 자리의 숫자들이 나열된 문자열을 조합해서 만들 수 있는 소수의 갯수를 구하는 문제이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;파이썬의 기본 모듈인 &lt;b&gt;itertools.permutations&lt;/b&gt;를 이용하여 모든 경우를 구하고,&lt;/p&gt;
&lt;p&gt;&lt;b&gt;소수 판별&lt;/b&gt;은 숫자 범위가 0~9로 적으므로 &lt;b&gt;2~n-1까지 나눠&lt;/b&gt;보면서 직접 찾아냈다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;i&gt;구현 언어: Python&lt;/i&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1615968357932&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from itertools import permutations

# 소수 판별 함수
def is_prime_number(num: int) -&amp;gt; bool:
    if num &amp;lt; 2:
        return False
    for i in range(2, num):
        if num % i == 0:
            return False
    return True


def solution(numbers):
    answer = set()  # 중복되지 않는 모든 경우를 저장할 set
    for i in range(1, len(numbers)+1):
        num_list = list(''.join(tup) for tup in permutations(numbers, i))
        for num in num_list:
            if is_prime_number(int(num)):
                answer.add(int(num))
    return len(answer)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Problem_Solving</category>
      <category>brute-force</category>
      <category>permutations</category>
      <category>ps</category>
      <category>Python</category>
      <category>완전탐색</category>
      <category>프로그래머스</category>
      <author>glowing713</author>
      <guid isPermaLink="true">https://glowdev.tistory.com/97</guid>
      <comments>https://glowdev.tistory.com/97#entry97comment</comments>
      <pubDate>Wed, 17 Mar 2021 17:07:00 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 다리를 지나는 트럭 / 큐(Queue)</title>
      <link>https://glowdev.tistory.com/96</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;programmers.co.kr_learn_courses_30_lessons_42583_language=python3.png&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;2130&quot; width=&quot;611&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/42583&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yppRX/btqZSuBrI2h/kypavslW4eKFdHreUzmkEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyppRX%2FbtqZSuBrI2h%2FkypavslW4eKFdHreUzmkEk%2Fimg.png&quot; data-filename=&quot;programmers.co.kr_learn_courses_30_lessons_42583_language=python3.png&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;2130&quot; width=&quot;611&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;이미지를 클릭하면 문제 사이트로 이동합니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;  문제 이해&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;트럭이 순서대로 대기하고 있고,&lt;/p&gt;
&lt;p&gt;다리가 견딜 수 있는 무게 내에서 최대한 빠르게 모든 트럭이 통과하는 시간을 구하는 문제이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;트럭들이 대기하다가 순서대로 지나가고, 다리 또한 한 방향으로 지나가기 때문에 Queue가 떠올랐다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;트럭이 지나가는 다리&lt;/b&gt;를 &lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;bridge&lt;/b&gt;&lt;/span&gt;라는 이름으로 queue(deque 사용)를 선언하고&lt;/p&gt;
&lt;p&gt;&lt;b&gt;대기 중인 트럭들&lt;/b&gt;을 &lt;b&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;waiting&lt;/span&gt;&lt;/b&gt;이라는 이름으로 queue를 선언했다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;대략적인 코드 구조는 다음과 같다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;0. &lt;b&gt;0초부터 1초 씩 증가하며 &lt;span style=&quot;color: #781b33;&quot;&gt;시간을 기록&lt;/span&gt;&lt;/b&gt;한다.&lt;/p&gt;
&lt;p&gt;1. bridge가 비어있지 않다면 &lt;span style=&quot;color: #781b33;&quot;&gt;&lt;b&gt;지금 시점에 지나가야하는 트럭은 dequeue&lt;/b&gt;&lt;/span&gt; 시킨다. (다리를 빠져나간다.)&lt;/p&gt;
&lt;p&gt;2. bridge와 waiting에 &lt;span style=&quot;color: #781b33;&quot;&gt;&lt;b&gt;남은 트럭이 없다면 현재 시간을 리턴&lt;/b&gt;&lt;/span&gt;함으로 반복문을 종료시킨다. (모든 차량을 처리한 경우)&lt;/p&gt;
&lt;p&gt;3. 대기중인 차량이 존재한다면 &lt;span style=&quot;color: #781b33;&quot;&gt;&lt;b&gt;다리의 총 무게를 체크해보고 현재 시점 기록과 함께 bridge에 진입&lt;/b&gt;&lt;/span&gt;시킨다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; (tuple(무게, 시간)을 bridge에 enqueue 시키는 것)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;i&gt;구현 언어: Python&lt;/i&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1615535385085&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):
    time = 0
    weight_sum = 0
    bridge, waiting = deque(), deque(truck_weights)
    
    while True:
        time += 1
        # 체크하면서 이번 타임에 나가야할 트럭을 내보낸다.
        if bridge:  # 다리가 비어있지 않은 상태일 때
            if time == bridge[0][1] + bridge_length:
                weight_sum -= bridge[0][0]
                bridge.popleft()
        # 모든 차를 처리했다면 종료
        if (not bridge) and (not waiting):
            return time
        # 다리가 견딜 수 있는 무게에 한하여 추가할 차량을 추가한다.
        if waiting:
            if weight_sum + waiting[0] &amp;lt;= weight:
                bridge.append((waiting[0], time))  # 현재 시점 기록과 함께 다리에 진입
                weight_sum += waiting[0]  # 다리의 총 무게 갱신
                waiting.popleft()  # 대기열에서 제거
    return time&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Problem_Solving</category>
      <category>Deque</category>
      <category>ps</category>
      <category>Python</category>
      <category>queue</category>
      <category>큐</category>
      <category>프로그래머스</category>
      <author>glowing713</author>
      <guid isPermaLink="true">https://glowdev.tistory.com/96</guid>
      <comments>https://glowdev.tistory.com/96#entry96comment</comments>
      <pubDate>Fri, 12 Mar 2021 16:50:22 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 가장 큰 수 / 정렬</title>
      <link>https://glowdev.tistory.com/95</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;programmers.co.kr_learn_courses_30_lessons_42746_language=python3.png&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;1185&quot; width=&quot;640&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/42746&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbNZfq/btqZVlKftyi/NsFamllVcNoxwVBG68QEj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbNZfq%2FbtqZVlKftyi%2FNsFamllVcNoxwVBG68QEj0%2Fimg.png&quot; data-filename=&quot;programmers.co.kr_learn_courses_30_lessons_42746_language=python3.png&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;1185&quot; width=&quot;640&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;이미지를 클릭하면 문제 사이트로 이동합니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;  문제 이해&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;정수를 붙였을 때 가장 큰 수가 되도록 만들어주어야 한다.&lt;/p&gt;
&lt;p&gt;모든 조합을 구해서 최대값을 팩토리얼 연산으로 구한다면, 여기서 유의할 점은 &lt;b&gt;최대 10만 개의 입력이 들어올 수 있다는 점&lt;/b&gt;이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그렇다면 먼저 조건에 맞게 정렬을 해주고 Join 하는 방법도 있다.&lt;/p&gt;
&lt;p&gt;서로 다른 자리의 숫자를 합쳤을 때 최대가 되도록 하기 위해서, &lt;b&gt;문자열 대소비교의 특징&lt;/b&gt;을 사용했다.&lt;/p&gt;
&lt;p&gt;문자열은 대소비교를 할 때, &lt;b&gt;첫 자리가 큰 수&lt;/b&gt;를 찾아내고 숫자가 같다면 &lt;b&gt;길이가 긴 것&lt;/b&gt;을 큰 것으로 인정한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;숫자는 최대 1000 까지 가능하므로&lt;/p&gt;
&lt;p&gt;각 숫자를 문자열로 바꾸어주고 &lt;b&gt;3배로 연장&lt;/b&gt;하여 대소비교를 수행하면 조건에 맞게 정렬할 수 있게 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;i&gt;구현 언어: Python&lt;/i&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1615452089499&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(numbers):
    # 문자열은 첫 글자부터 비교한다는 점이 포인트!!
    sorted_nums = sorted(list(map(str, numbers)), key=lambda x: x * 3, reverse=True)
    if sorted_nums[0][0] == '0':
        return '0'
    else:
        return ''.join(sorted_nums)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;추가로 주의할 점은 입력이 &lt;b&gt;[0, 0, 0, 0]&lt;/b&gt; 과 같은 경우, 결과 값이 '0000'이 된다.&lt;/p&gt;
&lt;p&gt;이는 정상적인 숫자가 아니다.&lt;/p&gt;
&lt;p&gt;이 경우를 처리하기 위해 주어진 입력의 최대 값인 0 번째 원소가 0이라면 '0'을 리턴하게 된다.&lt;/p&gt;</description>
      <category>Problem_Solving</category>
      <category>ps</category>
      <category>Python</category>
      <category>sort</category>
      <category>Sorted</category>
      <category>정렬</category>
      <category>프로그래머스</category>
      <author>glowing713</author>
      <guid isPermaLink="true">https://glowdev.tistory.com/95</guid>
      <comments>https://glowdev.tistory.com/95#entry95comment</comments>
      <pubDate>Thu, 11 Mar 2021 18:08:46 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 도둑질 / 동적 계획법(Dynamic-Programming)</title>
      <link>https://glowdev.tistory.com/94</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;2154&quot; data-filename=&quot;programmers.co.kr_learn_courses_30_lessons_42897_language=python3.png&quot; width=&quot;594&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/42897&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OoRwO/btqZTVLVKHC/GUgQDQF35eYUJXVOeCDkG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOoRwO%2FbtqZTVLVKHC%2FGUgQDQF35eYUJXVOeCDkG1%2Fimg.png&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;2154&quot; data-filename=&quot;programmers.co.kr_learn_courses_30_lessons_42897_language=python3.png&quot; width=&quot;594&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;이미지를 클릭하면 문제 사이트로 이동합니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;  문제 이해&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;두 수를 인접하지 않게 선택하여 최대 합을 구하는 문제이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;마을이 원형구조이므로 1, 2, 3, 4번 집이 있을 때,&lt;/p&gt;
&lt;p&gt;1번은 2번, 4번과 인접해있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;따라서 1번을 선택할 때의 경우(2, 4번은 선택불가)와 1번을 선택하지 않을 경우(1번만 사용불가)를 나누어서&lt;/p&gt;
&lt;p&gt;두 결과값 중 최대를 반환하면 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;i&gt;구현 언어: Python&lt;/i&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1615448229556&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(money):
    # 3 1 4 7 2 5
    case1 = [i for i in money]
    case2 = [i for i in money]
    # 첫 번째를 선택하는 경우
    case1[1], case1[-1] = case1[0], 0
    # 첫 번째를 선택하지 않는 경우
    case2[0] = 0
    
    for i in range(2, len(money)):
        case1[i] = max(case1[i-1], case1[i-2] + case1[i])
        case2[i] = max(case2[i-1], case2[i-2] + case2[i])
    
    # print(f'case1: {case1}')
    # print(f'case2: {case2}')
    
    return max(case1[-1], case2[-1])&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여기서, 제출했을 때 계속해서 1번 케이스만 틀리는 문제가 발생했다.&lt;/p&gt;
&lt;p&gt;커뮤니티에 다른 분들이 올려주신 댓글을 확인해보니 나는 이전(i-1)과 그 이전(i-2)를 체크하는데,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;10 0 0 1000 10 2&lt;/b&gt; 와 같은 경우 올바른 결과를 찾아내지 못하는 걸 발견했다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위 예제에서 10를 선택하는 경우, 두 번째인 0과 마지막인 2를 0으로 초기화했었는데&lt;/p&gt;
&lt;p&gt;두 번째 값인 0을 첫 번째와 같은 값인 10으로 만들어서 첫 번째 값의 손실을 해결할 수 있었다.&lt;/p&gt;</description>
      <category>Problem_Solving</category>
      <category>DP</category>
      <category>ps</category>
      <category>Python</category>
      <category>동적계획법</category>
      <category>프로그래머스</category>
      <author>glowing713</author>
      <guid isPermaLink="true">https://glowdev.tistory.com/94</guid>
      <comments>https://glowdev.tistory.com/94#entry94comment</comments>
      <pubDate>Thu, 11 Mar 2021 16:43:37 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 등굣길 / 동적 계획법(Dynamic-Programming)</title>
      <link>https://glowdev.tistory.com/93</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;programmers.co.kr_learn_courses_30_lessons_42898_language=python3.png&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;2169&quot; width=&quot;582&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/42898&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLTn3M/btqZP2L1bl2/fKH3C1X7dy7O79U2HkG120/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLTn3M%2FbtqZP2L1bl2%2FfKH3C1X7dy7O79U2HkG120%2Fimg.png&quot; data-filename=&quot;programmers.co.kr_learn_courses_30_lessons_42898_language=python3.png&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;2169&quot; width=&quot;582&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;이미지를 클릭하면 문제 사이트로 이동합니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;  문제 이해&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;격자를 오른쪽과 아래쪽으로 이동하며 최단 경로의 수를 측정하는 문제이다.&lt;/p&gt;
&lt;p&gt;DP로 풀 수 있고, 물이 있는 부분을 어떻게 체크하느냐가 포인트인 문제이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;i&gt;구현 언어: Python&lt;/i&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1615446858125&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(m, n, puddles):
    maps = [[0]*(m+1) for _ in range(n+1)]
    dp = [[0]*(m+1) for _ in range(n+1)]
    # 물 체크
    for pud in puddles:
        maps[pud[1]][pud[0]] = -1
        
    dp[1][0] = 1  # 시작지점은 1
    for i in range(1, n+1):
        for j in range(1, m+1):
            if maps[i][j] == -1:
                dp[i][j] = 0
            else:
                dp[i][j] = (dp[i-1][j] + dp[i][j-1]) % 1000000007
    return dp[n][m]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;maps는 현재 지도의 상태를 나타내는 배열로서,&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;물이 있는 위치라면 그 곳을 -1로 기록해둔다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;dp는 이동 경로를 기록하는 배열로서, 물이 있는 위치라면 그 곳은 0이 된다. (이동할 수 없다는 뜻)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 70.9302%; height: 76px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 20%; background-color: #a3333d; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; background-color: #a3333d; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; background-color: #a3333d; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; background-color: #a3333d; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; background-color: #a3333d; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 20%; background-color: #a3333d; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 20%; background-color: #a3333d; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%; background-color: #a3333d; height: 19px; text-align: center;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 20%; background-color: #a3333d; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;예제에 주어진 경로의 상태이다.&lt;/p&gt;
&lt;p&gt;0행과 0열은 이동할 수 없는 공간으로서 0으로 채워지게 되고, 물로 채워진 공간 또한 0이 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 70.9302%; height: 76px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 20%; background-color: #a3333d; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; background-color: #a3333d; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; background-color: #a3333d; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; background-color: #a3333d; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; background-color: #a3333d; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 20%; background-color: #a3333d; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 20%; background-color: #a3333d; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; background-color: #a3333d; height: 19px; text-align: center;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 20%; background-color: #a3333d; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;(1, 1) 위치부터 주어진 귀납식에 따라 채워나가면 최종 목적지인 (n, m)에 최단경로의 수를 찾을 수 있게 된다.&lt;/p&gt;</description>
      <category>Problem_Solving</category>
      <category>DP</category>
      <category>ps</category>
      <category>Python</category>
      <category>동적계획법</category>
      <category>프로그래머스</category>
      <author>glowing713</author>
      <guid isPermaLink="true">https://glowdev.tistory.com/93</guid>
      <comments>https://glowdev.tistory.com/93#entry93comment</comments>
      <pubDate>Thu, 11 Mar 2021 16:28:57 +0900</pubDate>
    </item>
    <item>
      <title>[BOJ] 백준 1535 안녕 / 동적 계획법(Dynamic-Programming)</title>
      <link>https://glowdev.tistory.com/92</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;2310&quot; data-origin-height=&quot;2053&quot; data-filename=&quot;www.acmicpc.net_problem_1535.png&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;a href=&quot;http://boj.kr/1535&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ct5CZe/btqZTVd2yNS/68BMHqEzhb86RuNLI0dibK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fct5CZe%2FbtqZTVd2yNS%2F68BMHqEzhb86RuNLI0dibK%2Fimg.png&quot; data-origin-width=&quot;2310&quot; data-origin-height=&quot;2053&quot; data-filename=&quot;www.acmicpc.net_problem_1535.png&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;이미지를 클릭하면 문제 사이트로 이동합니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;  문제 이해&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;세준이 체력이 최대 100이므로 숫자를 증가시키면서 해당 체력내에 얻을 수 있는 최대 기쁨을 갱신한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;u&gt;구현 언어: Python&lt;/u&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1615446473330&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys

r = sys.stdin.readline

n = int(r())
hp_loss = list(map(int, r().split()))
pleasure = list(map(int, r().split()))
dp = [[0]*101 for _ in range(n+1)]

for i in range(1, n+1):
    for j in range(100):
        if j &amp;lt; hp_loss[i-1]:
            dp[i][j] = dp[i-1][j]
        else:
            dp[i][j] = max(dp[i-1][j], dp[i-1][j-hp_loss[i-1]] + pleasure[i-1])

print(dp[n][99])&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Problem_Solving</category>
      <category>Baekjoon</category>
      <category>BOJ</category>
      <category>DP</category>
      <category>ps</category>
      <category>Python</category>
      <category>동적계획법</category>
      <author>glowing713</author>
      <guid isPermaLink="true">https://glowdev.tistory.com/92</guid>
      <comments>https://glowdev.tistory.com/92#entry92comment</comments>
      <pubDate>Thu, 11 Mar 2021 16:09:36 +0900</pubDate>
    </item>
    <item>
      <title>[BOJ] 백준 2512 예산 / 이분탐색</title>
      <link>https://glowdev.tistory.com/90</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;www.acmicpc.net_problem_2512.png&quot; data-origin-width=&quot;1155&quot; data-origin-height=&quot;1121&quot; width=&quot;660&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;a href=&quot;http://boj.kr/2512&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dYxjvW/btqWX4E0Bap/KOqbbGgfL5At8JR26ty8ek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdYxjvW%2FbtqWX4E0Bap%2FKOqbbGgfL5At8JR26ty8ek%2Fimg.png&quot; data-filename=&quot;www.acmicpc.net_problem_2512.png&quot; data-origin-width=&quot;1155&quot; data-origin-height=&quot;1121&quot; width=&quot;660&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;이미지를 클릭하면 문제 사이트로 이동합니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;  문제 이해&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;국가예산이 주어지고, N개의 지방에서 예산 요청이 주어질 때 정해진 예산 내에서 최대 얼마까지 배정할 수 있는 지 계산하는 문제이다.&lt;/p&gt;
&lt;p&gt;내용은 다르지만 큰 틀은 이전에 풀었던 이분탐색 문제들과 다를 바가 없다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;최소 예산인 &lt;b&gt;1부터 최대 예산인 max(지방의 예산요청들) 사이에서 이분탐색&lt;/b&gt;을 하며 그 값을 찾아내면 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;i&gt;구현 언어: Python&lt;/i&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1613053935727&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys

r = sys.stdin.readline

def binary_search(requests: list, budget: int) -&amp;gt; int:
    result = 0
    left = 1
    right = max(requests)
    while left &amp;lt;= right:
        mid = (left + right) // 2
        total_sum = sum(mid if req &amp;gt;= mid else req for req in requests)
        if total_sum &amp;lt;= budget:
            result = mid
            left = mid + 1
        else:
            right = mid - 1
    return result

_, bud_requests, total_bud = r(), list(map(int, r().split())), int(r())
print(binary_search(bud_requests, total_bud))&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이러한 양식의 다른 문제들에서&lt;/p&gt;
&lt;p&gt;현재 설정한 최대 상한액(mid) 기준으로 배정할 수 있는 예산액을 계산하는 total_sum 부분의 연산을 줄이기 위해서&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Counter&lt;/b&gt;를 사용해 같은 값이 여러 개 존재하면 &lt;b&gt;value*key 와 같은 방식&lt;/b&gt;으로 처리하곤 했다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그러나 이 문제에서 예산 요청이 최대 10,000 개이다.&lt;/p&gt;
&lt;pre id=&quot;code_1613054130313&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
from collections import Counter

r = sys.stdin.readline

def binary_search(requests: Counter, budget: int) -&amp;gt; int:
    result = 0
    left = 1
    right = max(requests)
    while left &amp;lt;= right:
        mid = (left + right) // 2
        total_sum = sum(mid*cnt if req &amp;gt;= mid else req*cnt for req, cnt in requests.items())
        if total_sum &amp;lt;= budget:
            result = mid
            left = mid + 1
        else:
            right = mid - 1
    return result

_, bud_requests, total_bud = r(), Counter(map(int, r().split())), int(r())
print(binary_search(bud_requests, total_bud))&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-02-11 오후 11.37.50.png&quot; data-origin-width=&quot;1142&quot; data-origin-height=&quot;72&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eQ4cgm/btqW1txKdWm/yDBDWbsZZKydbgq2fD6LI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eQ4cgm/btqW1txKdWm/yDBDWbsZZKydbgq2fD6LI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eQ4cgm/btqW1txKdWm/yDBDWbsZZKydbgq2fD6LI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeQ4cgm%2FbtqW1txKdWm%2FyDBDWbsZZKydbgq2fD6LI0%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-02-11 오후 11.37.50.png&quot; data-origin-width=&quot;1142&quot; data-origin-height=&quot;72&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위 결과를 통해 확인할 수 있는 것처럼 처리할 &lt;u&gt;값의 수가 많지 않다면 오히려 Counter를 쓰는 것이 시간 효율 측면에서 떨어지는 것&lt;/u&gt;을 확인할 수 있었다.(위가 Counter, 아래가 일반적인 방법)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;  데이터의 수가 많다면 Counter를 사용하는 것이 실행 시간을 줄이기 위한 좋은 시도이나,&lt;/p&gt;
&lt;p&gt;&lt;b&gt;데이터의 수가 적다면 일반적인 방법으로 계산&lt;/b&gt;하는 것이 오히려 좋다..!&lt;/p&gt;</description>
      <category>Problem_Solving</category>
      <category>Baekjoon</category>
      <category>binary search</category>
      <category>BOJ</category>
      <category>Counter</category>
      <category>ps</category>
      <category>Python</category>
      <category>이분탐색</category>
      <author>glowing713</author>
      <guid isPermaLink="true">https://glowdev.tistory.com/90</guid>
      <comments>https://glowdev.tistory.com/90#entry90comment</comments>
      <pubDate>Thu, 11 Feb 2021 23:53:43 +0900</pubDate>
    </item>
    <item>
      <title>[BOJ] 백준 1764 듣보잡 / 이분탐색</title>
      <link>https://glowdev.tistory.com/89</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;www.acmicpc.net_problem_1764.png&quot; data-origin-width=&quot;1552&quot; data-origin-height=&quot;2510&quot; width=&quot;660&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;a href=&quot;http://boj.kr/1764&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JBl9T/btqWW9GsO8C/dOdTb6wL80t8hFAa9dlyok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJBl9T%2FbtqWW9GsO8C%2FdOdTb6wL80t8hFAa9dlyok%2Fimg.png&quot; data-filename=&quot;www.acmicpc.net_problem_1764.png&quot; data-origin-width=&quot;1552&quot; data-origin-height=&quot;2510&quot; width=&quot;660&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;이미지를 클릭하면 문제 사이트로 이동합니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;  문제 이해&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;제목이....ㅋ&lt;/p&gt;
&lt;p&gt;암튼 전형적인 방법으로 풀면 &lt;b&gt;이분탐색&lt;/b&gt;이지만,&lt;/p&gt;
&lt;p&gt;파이썬의 장점을 잘 살리면 이분탐색보다 실행속도도 더 빠르고 간단하게 풀어낼 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;풀이 방법은 다음과 같다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1. 이분탐색&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2. Set 자료구조와 in 연산자&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;3. Set의 교집합을 구할 수 있는 &amp;amp; 연산자&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;4. Set과 intersection 메소드를 이용한 교집합 연산&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;실행속도는 4 &amp;gt; 3 &amp;gt;= 2 &amp;gt; 1 순으로 빠르다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;i&gt;구현 언어: Python&lt;/i&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. 이분탐색&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1613031166811&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys

r = sys.stdin.readline

def binary_search(d_list: list, b_list: list) -&amp;gt; list:
    result = []
    d_list.sort()
    for b in b_list:
        left = 0
        right = len(d_list) - 1
        while left &amp;lt;= right:
            mid = (left + right) // 2
            if d_list[mid] &amp;lt; b:
                left = mid + 1
            elif d_list[mid] &amp;gt; b:
                right = mid - 1
            else:
                result.append(b)  # 듣도 보도 못한 명단 찾음
                break  # 여기서 꼭 종료를 해주어야 한다!
    return sorted(result)

d_num, b_num = map(int, r().split())
d_list = list(r().rstrip() for _ in range(d_num))  # 듣도 못한 명단
b_list = list(r().rstrip() for _ in range(b_num))  # 보도 못한 명단
answer = binary_search(d_list, b_list)  # 사전순으로 정렬된 듣도 보도 못한 명단
print(len(answer))
for name in answer:
    print(name)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. Set 자료구조와 in 연산자&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1613031213453&quot; class=&quot;python&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys

r = sys.stdin.readline

d_num, b_num = map(int, r().split())
d_list = set(r().rstrip() for _ in range(d_num))  # 듣도 못한 명단
b_list = list(r().rstrip() for _ in range(b_num))  # 보도 못한 명단
answer = sorted([name for name in b_list if name in d_list])
print(len(answer))
for name in answer:
    print(name)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #781b33;&quot;&gt;&lt;u&gt;Set은 Hash function으로 구현이 되어있어서 Dict를 사용할 때처럼 in 연산자를 O(1)의 시간으로 사용할 수 있어 매우 빠르다!&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3. Set의 교집합을 구할 수 있는 &amp;amp; 연산자&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1613031695278&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys

r = sys.stdin.readline

d_num, b_num = map(int, r().split())
d_list = set(r().rstrip() for _ in range(d_num))  # 듣도 못한 명단
b_list = set(r().rstrip() for _ in range(b_num))  # 보도 못한 명단
answer = sorted(d_list &amp;amp; b_list)
print(len(answer))
for name in answer:
    print(name)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;4. Set과 intersection 메소드를 이용한 교집합 연산&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1613031719436&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys

r = sys.stdin.readline

d_num, b_num = map(int, r().split())
d_list = set(r().rstrip() for _ in range(d_num))  # 듣도 못한 명단
b_list = set(r().rstrip() for _ in range(b_num))  # 보도 못한 명단
answer = sorted(d_list.intersection(b_list))  # 내장 메소드가 더 빠름!!
print(len(answer))
for name in answer:
    print(name)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Problem_Solving</category>
      <category>Baekjoon</category>
      <category>binary search</category>
      <category>BOJ</category>
      <category>ps</category>
      <category>Python</category>
      <category>이분탐색</category>
      <author>glowing713</author>
      <guid isPermaLink="true">https://glowdev.tistory.com/89</guid>
      <comments>https://glowdev.tistory.com/89#entry89comment</comments>
      <pubDate>Thu, 11 Feb 2021 17:22:35 +0900</pubDate>
    </item>
    <item>
      <title>[BOJ] 백준 10816 숫자 카드 2 / 이분탐색</title>
      <link>https://glowdev.tistory.com/88</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;www.acmicpc.net_problem_10816.png&quot; data-origin-width=&quot;1155&quot; data-origin-height=&quot;986&quot; width=&quot;760&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;a href=&quot;http://boj.kr/10816&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/enhggU/btqWGLNfrbu/7PLX5O8Kn6MU1HDK62nkc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FenhggU%2FbtqWGLNfrbu%2F7PLX5O8Kn6MU1HDK62nkc0%2Fimg.png&quot; data-filename=&quot;www.acmicpc.net_problem_10816.png&quot; data-origin-width=&quot;1155&quot; data-origin-height=&quot;986&quot; width=&quot;760&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;이미지를 클릭하면 문제 사이트로 이동합니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;  문제 이해&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이전에 풀었던 숫자 카드 문제와 거의 비슷하다.&lt;/p&gt;
&lt;p&gt;주어진 숫자 입력들이 상근이가 가진 숫자 카드에 있는지 여부를 체크하는 문제였다면,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 문제는 상근이가 그 숫자들을 몇 개 가지고 있는 지도 체크해야 한다는 점이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Python의 Counter를 이용해서 상근이의 숫자 카드를 Key 값으로 카드번호, Value 를 카드 개수로 하는 딕셔너리를 생성했다.&lt;/p&gt;
&lt;p&gt;그리고 입력으로 들어온 숫자가 Counter 객체에 존재한다면 Value를 출력하고, 없다면 0을 출력하게 구현했다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;i&gt;구현 언어: Python&lt;/i&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1612882141590&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
from collections import Counter

r = sys.stdin.readline

answer = []
n, my_card = int(r()), Counter(map(int, r().split()))
m, num_list = int(r()), list(map(int, r().split()))

for num in num_list:
    answer.append(my_card[num] if num in my_card.keys() else 0)
print(*answer)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여기서 더 &lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: #781b33;&quot;&gt;Pythonic&lt;/span&gt;&lt;/i&gt;&lt;/b&gt; 하고 싶다면,&lt;/p&gt;
&lt;pre id=&quot;code_1612882489277&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
from collections import Counter
r = sys.stdin.readline

_, my_card, _ = r(), Counter(r().split()), r()
print(&quot; &quot;.join(str(my_card[num]) if num in my_card else '0' for num in r().split()))&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;요런 것도 가능하다  &lt;/p&gt;</description>
      <category>Problem_Solving</category>
      <category>Baekjoon</category>
      <category>binary search</category>
      <category>BOJ</category>
      <category>ps</category>
      <category>Python</category>
      <category>이분탐색</category>
      <author>glowing713</author>
      <guid isPermaLink="true">https://glowdev.tistory.com/88</guid>
      <comments>https://glowdev.tistory.com/88#entry88comment</comments>
      <pubDate>Tue, 9 Feb 2021 23:56:09 +0900</pubDate>
    </item>
  </channel>
</rss>