<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>데린이 고인물되기</title>
    <link>https://itdatascience.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sat, 4 Apr 2026 21:55:44 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>데린이 성장 중</managingEditor>
    <image>
      <title>데린이 고인물되기</title>
      <url>https://tistory1.daumcdn.net/tistory/5460493/attach/3703e868269b4b0182ca9d28482276d2</url>
      <link>https://itdatascience.tistory.com</link>
    </image>
    <item>
      <title>[프로젝트] LGAimers 7기 본선 후기</title>
      <link>https://itdatascience.tistory.com/140</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;눈물의 본선&lt;/p&gt;</description>
      <category>프로젝트&amp;middot;공모전</category>
      <author>데린이 성장 중</author>
      <guid isPermaLink="true">https://itdatascience.tistory.com/140</guid>
      <comments>https://itdatascience.tistory.com/140#entry140comment</comments>
      <pubDate>Wed, 17 Sep 2025 00:48:09 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] 250916 - 파이썬 반올림 / 올림 / 내림 / 버림</title>
      <link>https://itdatascience.tistory.com/139</link>
      <description>&lt;h3 data-end=&quot;1197&quot; data-start=&quot;1177&quot; data-ke-size=&quot;size23&quot;&gt;1. 반올림 (round)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1275&quot; data-start=&quot;1198&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1229&quot; data-start=&quot;1198&quot;&gt;round(x) : 가장 가까운 정수로 반올림&lt;/li&gt;
&lt;li data-end=&quot;1229&quot; data-start=&quot;1198&quot;&gt;import math를 사용하지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1758036205091&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print(round(3.5))  # 4
print(round(2.5))  # 2 (주의!)
print(round(2.675, 2))  # 2.67 (부동소수점 특성)&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1408&quot; data-start=&quot;1385&quot;&gt;주의
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1408&quot; data-start=&quot;1385&quot;&gt;파이썬의 round는 &lt;b&gt;&quot;Banker's Rounding&quot;&lt;/b&gt; (또는 &lt;b&gt;Round half to even&lt;/b&gt;) 규칙을 사용
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1408&quot; data-start=&quot;1385&quot;&gt;딱 .5로 끝나는 경우, &lt;b&gt;가까운 짝수 정수&lt;/b&gt; 쪽으로 반올림함. 그래서 :&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1758037395876&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print(round(1.5))  # 2 (짝수로 감)
print(round(2.5))  # 2 (짝수로 감)
print(round(3.5))  # 4 (짝수로 감)&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-end=&quot;1408&quot; data-start=&quot;1385&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-end=&quot;1408&quot; data-start=&quot;1385&quot; data-ke-size=&quot;size23&quot;&gt;2. 올림 (math.ceil)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1426&quot; data-start=&quot;1409&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1426&quot; data-start=&quot;1409&quot;&gt;항상 &lt;b&gt;큰 정수&lt;/b&gt;로 올림&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1758036251149&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import math
print(math.ceil(2.1))  # 3
print(math.ceil(-2.1)) # -2&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-end=&quot;1533&quot; data-start=&quot;1509&quot; data-ke-size=&quot;size23&quot;&gt;3. 내림 (math.floor)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1552&quot; data-start=&quot;1534&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1552&quot; data-start=&quot;1534&quot;&gt;항상 &lt;b&gt;작은 정수&lt;/b&gt;로 내림&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1758036283455&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import math
print(math.floor(2.9))  # 2
print(math.floor(-2.9)) # -3&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-end=&quot;1661&quot; data-start=&quot;1637&quot; data-ke-size=&quot;size23&quot;&gt;4. 버림 (math.trunc)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1682&quot; data-start=&quot;1662&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1682&quot; data-start=&quot;1662&quot;&gt;소수점 버리고 0 쪽으로 가까워짐&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1758036303057&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import math
print(math.trunc(2.9))   # 2
print(math.trunc(-2.9))  # -2&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;나는 주로 그냥 int(2.9) 로 처리해버리긴 한다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm/정리</category>
      <category>coding test</category>
      <category>import math</category>
      <category>math</category>
      <category>Python</category>
      <category>코테</category>
      <category>파이썬</category>
      <author>데린이 성장 중</author>
      <guid isPermaLink="true">https://itdatascience.tistory.com/139</guid>
      <comments>https://itdatascience.tistory.com/139#entry139comment</comments>
      <pubDate>Wed, 17 Sep 2025 00:28:20 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] 250916 - 파이썬 datetime 사용법</title>
      <link>https://itdatascience.tistory.com/138</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &quot;05:34&quot;와 &quot;04:56&quot;의 시간 차이를 분 단위로 구하는 방법&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1758036017918&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from datetime import datetime

t1, t2 = &quot;05:34&quot;, &quot;04:56&quot;
fmt = &quot;%H:%M&quot;

dt1 = datetime.strptime(t1, fmt)
dt2 = datetime.strptime(t2, fmt)

diff_minutes = abs((dt1 - dt2).seconds // 60)
print(diff_minutes)  # 38&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;size18&quot;&gt;&lt;b&gt; 코테에서 더 유용한 단순 계산 (더 빠르다)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1758036072982&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;h1, m1 = map(int, t1.split(&quot;:&quot;))
h2, m2 = map(int, t2.split(&quot;:&quot;))

minutes1 = h1 * 60 + m1
minutes2 = h2 * 60 + m2

print(abs(minutes1 - minutes2))  # 38&lt;/code&gt;&lt;/pre&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;span style=&quot;color: #ee2323;&quot;&gt;이 방법을 사용할 경우 주의점&lt;/span&gt;&lt;/b&gt; : &lt;b&gt;하루를 넘어가는 경우&lt;/b&gt;(`23:50` vs `00:20`)까지 고려하려면 &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 data-end=&quot;99&quot; data-start=&quot;47&quot;&gt;예를 들어 &lt;b&gt;&quot;23:50&quot;&lt;/b&gt; 과 &lt;b&gt;&quot;00:20&quot;&lt;/b&gt; 의 차이를 분으로 구하는 경우
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;99&quot; data-start=&quot;47&quot;&gt;그냥 단순히 분으로 바꾸면:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;218&quot; data-start=&quot;121&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;154&quot; data-start=&quot;121&quot;&gt;&quot;23:50&quot; &amp;rarr; 23*60 + 50 = 1430&lt;/li&gt;
&lt;li data-end=&quot;187&quot; data-start=&quot;157&quot;&gt;&quot;00:20&quot; &amp;rarr; 0*60 + 20 = 20&lt;/li&gt;
&lt;li data-end=&quot;218&quot; data-start=&quot;190&quot;&gt;차이 = 1430 - 20 = &lt;span style=&quot;color: #ee2323;&quot;&gt;1410분&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;하지만, 실제로는&lt;span style=&quot;color: #ee2323;&quot;&gt; 30분 차이&lt;/span&gt; (23:50에서 다음날 00:20까지 30분)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;해결법&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt; 하루는 24*60 = 1440분.&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;따라서 단순 차이를 &lt;b&gt;1440으로 나눈 나머지&lt;/b&gt;로 바꿔주면, 하루를 넘어가는 경우에도 제대로 계산됨&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1758037101343&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;h1, m1 = map(int, &quot;23:50&quot;.split(&quot;:&quot;))
h2, m2 = map(int, &quot;00:20&quot;.split(&quot;:&quot;))

minutes1 = h1 * 60 + m1  # 1430
minutes2 = h2 * 60 + m2  # 20

# 하루(1440분)로 나머지를 구함
diff = (minutes2 - minutes1) % (24*60)
print(diff)  # 30&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;결론 : 머리아프니까 datetime 으로 하자 그냥&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Algorithm/정리</category>
      <category>codingTest</category>
      <category>datetime</category>
      <category>Python</category>
      <category>코테</category>
      <category>파이썬</category>
      <author>데린이 성장 중</author>
      <guid isPermaLink="true">https://itdatascience.tistory.com/138</guid>
      <comments>https://itdatascience.tistory.com/138#entry138comment</comments>
      <pubDate>Wed, 17 Sep 2025 00:22:30 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] 250916 - defaultdict에 원소가 있는 리스트를 디폴트로 넣는 방법</title>
      <link>https://itdatascience.tistory.com/137</link>
      <description>&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;339&quot; data-start=&quot;190&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;237&quot; data-start=&quot;190&quot;&gt;defaultdict는 &lt;b&gt;함수(callable)&lt;/b&gt;를 인자로 받아야 함.&lt;/li&gt;
&lt;li data-end=&quot;288&quot; data-start=&quot;238&quot;&gt;리스트를 그대로 넣으면 모든 키가 &lt;b&gt;같은 리스트 객체&lt;/b&gt;를 공유하게 되므로 위험.&lt;/li&gt;
&lt;li data-end=&quot;339&quot; data-start=&quot;289&quot;&gt;예를들어, 각 키마다 독립적인 [9,9,9] 리스트가 필요하다면 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;lambda&lt;/b&gt;&lt;/span&gt;로 감싸야 함:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1758035724293&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

d = defaultdict(lambda: [9, 9, 9])
print(d['a'])  # [9, 9, 9]
print(d['b'])  # [9, 9, 9] (서로 다른 객체)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm/정리</category>
      <author>데린이 성장 중</author>
      <guid isPermaLink="true">https://itdatascience.tistory.com/137</guid>
      <comments>https://itdatascience.tistory.com/137#entry137comment</comments>
      <pubDate>Wed, 17 Sep 2025 00:15:42 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] 250916 프로그래머스 - 주차요금계산</title>
      <link>https://itdatascience.tistory.com/136</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/92341&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;문제 설명
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;주차장의 요금표와 차량이 들어오고(입차) 나간(출차) 기록이 주어졌을 때, 차량별로 주차 요금을 계산하려고 합니다. 아래는 하나의 예시를 나타냅니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;&lt;b&gt;요금표&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;color: #000000; border-collapse: collapse; width: 57.7907%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;color: #000000;&quot;&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 14.4186%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;기본 시간(분)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 15.2326%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;기본 요금(원)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 13.7209%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;단위 시간(분)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 14.4186%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;단위 요금(원)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 14.4186%;&quot;&gt;180&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 15.2326%;&quot;&gt;5000&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 13.7209%;&quot;&gt;10&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 14.4186%;&quot;&gt;600&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;&lt;b&gt;입/출차 기록&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;color: #000000; border-collapse: collapse; width: 35.814%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;color: #000000;&quot;&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 13.1395%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;시각(시:분)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 12.6745%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;차량 번호&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 9.88365%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;내역&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 13.1395%;&quot;&gt;05:34&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 12.6745%;&quot;&gt;5961&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 9.88365%;&quot;&gt;입차&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 13.1395%;&quot;&gt;06:00&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 12.6745%;&quot;&gt;0000&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 9.88365%;&quot;&gt;입차&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 13.1395%;&quot;&gt;06:34&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 12.6745%;&quot;&gt;0000&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 9.88365%;&quot;&gt;출차&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 13.1395%;&quot;&gt;07:59&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 12.6745%;&quot;&gt;5961&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 9.88365%;&quot;&gt;출차&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 13.1395%;&quot;&gt;07:59&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 12.6745%;&quot;&gt;0148&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 9.88365%;&quot;&gt;입차&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 13.1395%;&quot;&gt;18:59&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 12.6745%;&quot;&gt;0000&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 9.88365%;&quot;&gt;입차&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 13.1395%;&quot;&gt;19:09&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 12.6745%;&quot;&gt;0148&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 9.88365%;&quot;&gt;출차&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 13.1395%;&quot;&gt;22:59&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 12.6745%;&quot;&gt;5961&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 9.88365%;&quot;&gt;입차&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 13.1395%;&quot;&gt;23:00&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 12.6745%;&quot;&gt;5961&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 9.88365%;&quot;&gt;출차&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;&lt;b&gt;자동차별 주차 요금&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;color: #000000; border-collapse: collapse; width: 66.2791%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;color: #000000;&quot;&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 11.0465%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;차량 번호&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 18.7209%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;누적 주차 시간(분)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 36.2791%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;주차 요금(원)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 11.0465%;&quot;&gt;0000&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 18.7209%;&quot;&gt;34 + 300 = 334&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 36.2791%;&quot;&gt;5000 +&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lceil;(334 - 180) / 10&amp;rceil;&lt;span&gt;&amp;nbsp;&lt;/span&gt;x 600 = 14600&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 11.0465%;&quot;&gt;0148&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 18.7209%;&quot;&gt;670&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 36.2791%;&quot;&gt;5000 +&amp;lceil;(670 - 180) / 10&amp;rceil;x 600 = 34400&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 11.0465%;&quot;&gt;5961&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 18.7209%;&quot;&gt;145 + 1 = 146&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 36.2791%;&quot;&gt;5000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;어떤 차량이 입차된 후에 출차된 내역이 없다면, 23:59에 출차된 것으로 간주합니다.
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;0000번 차량은 18:59에 입차된 이후, 출차된 내역이 없습니다. 따라서, 23:59에 출차된 것으로 간주합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;00:00부터 23:59까지의 입/출차 내역을 바탕으로 차량별 누적 주차 시간을 계산하여 요금을 일괄로 정산합니다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;누적 주차 시간이&lt;span&gt;&amp;nbsp;&lt;/span&gt;기본 시간이하라면,&lt;span&gt;&amp;nbsp;&lt;/span&gt;기본 요금을 청구합니다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;누적 주차 시간이&lt;span&gt;&amp;nbsp;&lt;/span&gt;기본 시간을 초과하면,&lt;span&gt;&amp;nbsp;&lt;/span&gt;기본 요금에 더해서, 초과한 시간에 대해서&lt;span&gt;&amp;nbsp;&lt;/span&gt;단위 시간&lt;span&gt;&amp;nbsp;&lt;/span&gt;마다&lt;span&gt;&amp;nbsp;&lt;/span&gt;단위 요금을 청구합니다.
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;초과한 시간이&lt;span&gt;&amp;nbsp;&lt;/span&gt;단위 시간으로 나누어 떨어지지 않으면,&lt;span&gt;&amp;nbsp;&lt;/span&gt;올림합니다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;&amp;lceil;a&amp;rceil;&lt;span&gt;&amp;nbsp;&lt;/span&gt;: a보다 작지 않은 최소의 정수를 의미합니다. 즉,&lt;span&gt;&amp;nbsp;&lt;/span&gt;올림을 의미합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;주차 요금을 나타내는 정수 배열&lt;span&gt;&amp;nbsp;&lt;/span&gt;fees, 자동차의 입/출차 내역을 나타내는 문자열 배열&lt;span&gt;&amp;nbsp;&lt;/span&gt;records가 매개변수로 주어집니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;차량 번호가 작은 자동차부터&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;청구할 주차 요금을 차례대로 정수 배열에 담아서 return 하도록 solution 함수를 완성해주세요.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;b&gt;제한사항&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;fees의 길이 = 4
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;fees[0] =&lt;span&gt;&amp;nbsp;&lt;/span&gt;기본 시간(분)&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;1 &amp;le; fees[0] &amp;le; 1,439&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;fees[1] =&lt;span&gt;&amp;nbsp;&lt;/span&gt;기본 요금(원)&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;0 &amp;le; fees[1] &amp;le; 100,000&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;fees[2] =&lt;span&gt;&amp;nbsp;&lt;/span&gt;단위 시간(분)&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;1 &amp;le; fees[2] &amp;le; 1,439&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;fees[3] =&lt;span&gt;&amp;nbsp;&lt;/span&gt;단위 요금(원)&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;1 &amp;le; fees[3] &amp;le; 10,000&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;1 &amp;le;&lt;span&gt;&amp;nbsp;&lt;/span&gt;records의 길이 &amp;le; 1,000
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;records의 각 원소는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;시각 차량번호 내역&quot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;형식의 문자열입니다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;시각,&lt;span&gt;&amp;nbsp;&lt;/span&gt;차량번호,&lt;span&gt;&amp;nbsp;&lt;/span&gt;내역은 하나의 공백으로 구분되어 있습니다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;시각은 차량이 입차되거나 출차된 시각을 나타내며,&lt;span&gt;&amp;nbsp;&lt;/span&gt;HH:MM&lt;span&gt;&amp;nbsp;&lt;/span&gt;형식의 길이 5인 문자열입니다.
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;HH:MM은 00:00부터 23:59까지 주어집니다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;잘못된 시각(&quot;25:22&quot;, &quot;09:65&quot; 등)은 입력으로 주어지지 않습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;차량번호는 자동차를 구분하기 위한, `0'~'9'로 구성된 길이 4인 문자열입니다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;내역은 길이 2 또는 3인 문자열로,&lt;span&gt;&amp;nbsp;&lt;/span&gt;IN&lt;span&gt;&amp;nbsp;&lt;/span&gt;또는&lt;span&gt;&amp;nbsp;&lt;/span&gt;OUT입니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;IN은 입차를,&lt;span&gt;&amp;nbsp;&lt;/span&gt;OUT은 출차를 의미합니다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;records의 원소들은 시각을 기준으로 오름차순으로 정렬되어 주어집니다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;records는 하루 동안의 입/출차된 기록만 담고 있으며, 입차된 차량이 다음날 출차되는 경우는 입력으로 주어지지 않습니다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;같은 시각에, 같은 차량번호의 내역이 2번 이상 나타내지 않습니다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;마지막 시각(23:59)에 입차되는 경우는 입력으로 주어지지 않습니다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;아래의 예를 포함하여, 잘못된 입력은 주어지지 않습니다.
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;주차장에 없는 차량이 출차되는 경우&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;주차장에 이미 있는 차량(차량번호가 같은 차량)이 다시 입차되는 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
입출력 예
&lt;table style=&quot;color: #000000; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;color: #000000;&quot;&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 17.6744%;&quot;&gt;fees&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 61.8605%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;records&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 20.3488%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;result&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 17.6744%;&quot;&gt;[180, 5000, 10, 600]&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 61.8605%;&quot;&gt;[&quot;05:34 5961 IN&quot;, &quot;06:00 0000 IN&quot;, &quot;06:34 0000 OUT&quot;, &quot;07:59 5961 OUT&quot;, &quot;07:59 0148 IN&quot;, &quot;18:59 0000 IN&quot;, &quot;19:09 0148 OUT&quot;, &quot;22:59 5961 IN&quot;, &quot;23:00 5961 OUT&quot;]&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 20.3488%;&quot;&gt;[14600, 34400, 5000]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 17.6744%;&quot;&gt;[120, 0, 60, 591]&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 61.8605%;&quot;&gt;[&quot;16:00 3961 IN&quot;,&quot;16:00 0202 IN&quot;,&quot;18:00 3961 OUT&quot;,&quot;18:00 0202 OUT&quot;,&quot;23:58 3961 IN&quot;]&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 20.3488%;&quot;&gt;[0, 591]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 17.6744%;&quot;&gt;[1, 461, 1, 10]&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 61.8605%;&quot;&gt;[&quot;00:00 1234 IN&quot;]&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 20.3488%;&quot;&gt;[14841]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;b&gt;입출력 예 설명&lt;/b&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입출력 예 #1&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;문제 예시와 같습니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입출력 예 #2&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;&lt;b&gt;요금표&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;color: #000000; border-collapse: collapse; width: 56.9767%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;color: #000000;&quot;&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 13.6047%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;기본 시간(분)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 13.7209%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;기본 요금(원)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 14.6511%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;단위 시간(분)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 15%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;단위 요금(원)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 13.6047%;&quot;&gt;120&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 13.7209%;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 14.6511%;&quot;&gt;60&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 15%;&quot;&gt;591&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;&lt;b&gt;입/출차 기록&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;color: #000000; border-collapse: collapse; width: 37.4419%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;color: #000000;&quot;&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 14.0698%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;시각(시:분)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 12.907%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;차량 번호&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 10.3488%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;내역&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 14.0698%;&quot;&gt;16:00&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 12.907%;&quot;&gt;3961&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 10.3488%;&quot;&gt;입차&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 14.0698%;&quot;&gt;16:00&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 12.907%;&quot;&gt;0202&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 10.3488%;&quot;&gt;입차&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 14.0698%;&quot;&gt;18:00&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 12.907%;&quot;&gt;3961&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 10.3488%;&quot;&gt;출차&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 14.0698%;&quot;&gt;18:00&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 12.907%;&quot;&gt;0202&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 10.3488%;&quot;&gt;출차&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 14.0698%;&quot;&gt;23:58&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 12.907%;&quot;&gt;3961&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 10.3488%;&quot;&gt;입차&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;&lt;b&gt;자동차별 주차 요금&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;color: #000000; border-collapse: collapse; width: 57.6744%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;color: #000000;&quot;&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 10.9302%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;차량 번호&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 16.6279%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;누적 주차 시간(분)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 30%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;주차 요금(원)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 10.9302%;&quot;&gt;0202&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 16.6279%;&quot;&gt;120&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 30%;&quot;&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 10.9302%;&quot;&gt;3961&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 16.6279%;&quot;&gt;120 + 1 = 121&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 30%;&quot;&gt;0 +&amp;lceil;(121 - 120) / 60&amp;rceil;x 591 = 591&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;3961번 차량은 2번째 입차된 후에는 출차된 내역이 없으므로, 23:59에 출차되었다고 간주합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입출력 예 #3&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;&lt;b&gt;요금표&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;color: #000000; border-collapse: collapse; width: 54.8837%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;color: #000000;&quot;&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 13.4884%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;기본 시간(분)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 14.8837%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;기본 요금(원)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 13.4883%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;단위 시간(분)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 13.0233%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;단위 요금(원)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 13.4884%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 14.8837%;&quot;&gt;461&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 13.4883%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 13.0233%;&quot;&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;&lt;b&gt;입/출차 기록&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;color: #000000; border-collapse: collapse; width: 34.4186%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;color: #000000;&quot;&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 12.907%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;시각(시:분)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 12.7907%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;차량 번호&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 8.6046%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;내역&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 12.907%;&quot;&gt;00:00&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 12.7907%;&quot;&gt;1234&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 8.6046%;&quot;&gt;입차&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;&lt;b&gt;자동차별 주차 요금&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;color: #000000; border-collapse: collapse; width: 64.6512%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;color: #000000;&quot;&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 9.17933%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;차량 번호&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 23.645%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;누적 주차 시간(분)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 29.6572%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;주차 요금(원)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 9.17933%;&quot;&gt;1234&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 23.645%;&quot;&gt;1439&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 29.6572%;&quot;&gt;461 +&amp;lceil;(1439 - 1) / 1&amp;rceil;x 10 = 14841&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;1234번 차량은 출차 내역이 없으므로, 23:59에 출차되었다고 간주합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;​&lt;/p&gt;
제한시간 안내
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;정확성 테스트 : 10초&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;pre id=&quot;code_1758033425221&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def money(fees, minute):
    # 분이 들어오면 요금 계산
    # 기본시간 이하면 기본 요금 청구
    # 기본 시간 초과하면 기본요금 + 초과시간에 대해  단위 시간마다 단위 요금 청구
    if minute &amp;lt;= fees[0]:
        return fees[1]
    
    import math
    extra = math.ceil((minute - fees[0])/fees[2])*fees[3]
    return fees[1] + extra
    
def solution(fees, records):
    return_answer = []
    # 입차하고 출차한적없으면 23:59에 나간걸로
    # 기본시간 이하면 기본 요금 청구
    # 기본 시간 초과하면 기본요금 + 초과시간에 대해  단위 시간마다 단위 요금 청구
    
    # 딕셔너리 만들어서 key를 차 번호 value를 시간으로 주면 될듯
    # value 를 list로 만들고 [머무른 시간, 마지막에 in 또는 out 한 시각, 등장 횟수]
    # 이렇게  만들고 딕셔너리 완성되면
    # value 에 list에 등장 횟수를 보고 그게 홀수면 -&amp;gt; 아직 out를 안한 차니까 (23:59 - 마지막에 in 또는 out 한 시각 ) 해서
    # 머무른 시간에 더해줘야함
    # value 에 list에 등장 횟수를 보고 그게 짝수면 out한거니까 신경 쓰지 않아도 됨
    # 머무른 시간 업뎃 칠 때는  마지막에 in 또는 out 한 시각 이거 보고 계산해서 업뎃 치면 되고
    from collections import defaultdict
    from datetime import datetime
    answer = defaultdict(lambda: [0,0,0]) #[머무른 시간, 마지막에 in 또는 out 한 시각, 마지막이 in인지 out인지]
    car = set() # 차 번호 저장
    for record in records:
        time = record.split(' ')[0]
        car_num = record.split(' ')[1]
        inorout = record.split(' ')[2]
        
        car.add(int(car_num))
        
        answer[car_num][2] = inorout
        
        if answer[car_num][2] == 'IN': # 처음 등장한 차
            answer[car_num][1] = time
        
        else: # 나가는 차인경우
            prevtime = answer[car_num][1]
            fmt = &quot;%H:%M&quot;
            staymin = datetime.strptime(time,fmt) - datetime.strptime(prevtime,fmt) # 머무른 시간
            
            # 몇시간 몇분 이렇게 나오는걸 초로 바꿔서 60으로 나눠서 분 단위로 뽑아주기
            answer[car_num][0] += staymin.seconds//60 
        
    for check in answer.values():# 마지막 기록이 in인 차는 23:59에 빼야함
        if check[2] == &quot;IN&quot;:
            fmt = '%H:%M'
            staymin = datetime.strptime('23:59',fmt) - datetime.strptime(check[1],fmt)
            check[0] += staymin.seconds//60
            
    car = list(car)
    car.sort()
    for c in car: # 정렬된 차번호
        c = str(c)
        c = (4 - len(c))*'0' + c
        return_answer.append(money(fees,answer[c][0]))
    return return_answer&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;크게 어렵지도 않았지만, 익숙하지 않은 코드가 있어서 ⬇️ 시간이 걸렸다. 거의 한시간은 쓴듯?&lt;/li&gt;
&lt;li&gt;그래도 한 번에 정답을 맞추긴 함&lt;/li&gt;
&lt;li&gt;어떻게 풀고 구현할지도 한 번에 떠올리긴 했는데&amp;nbsp; 시간이 좀 많이 걸렸다&lt;/li&gt;
&lt;li&gt;정답률 60%의 문제. 어렵지는 않아서 정답률이 좀 더 낮은 문제로 넘어가야 할 것 같다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt; 익숙해져야할 내용&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://itdatascience.tistory.com/137&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;defaultdict에 요소가 있는 리스트를 디폴트로 넣는 방법&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://itdatascience.tistory.com/138&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;시간이 문자열 (ex. &quot;23:12&quot;) 로 주어졌을 때 , 두 시간 사이의 차이를 계산하는 법 ( == datetime 사용 )&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://itdatascience.tistory.com/139&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt; 반올림 / 올림 / 내림 하기 ( import math 사용법 )&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Algorithm/문제</category>
      <author>데린이 성장 중</author>
      <guid isPermaLink="true">https://itdatascience.tistory.com/136</guid>
      <comments>https://itdatascience.tistory.com/136#entry136comment</comments>
      <pubDate>Tue, 16 Sep 2025 23:38:54 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] 250916 - 프로그래머스 뉴스 클러스터링</title>
      <link>https://itdatascience.tistory.com/135</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 설명&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;
&lt;h2 style=&quot;color: #263747;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/17677#qna&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;뉴스 클러스터링&lt;/a&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브는 사용자들이 편리하게 다양한 뉴스를 찾아볼 수 있도록 문제점을 개선하는 업무를 맡게 되었다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;개발의 방향을 잡기 위해 튜브는 우선 최근 화제가 되고 있는 &quot;카카오 신입 개발자 공채&quot; 관련 기사를 검색해보았다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;카카오 첫 공채..'블라인드' 방식 채용&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;카카오, 합병 후 첫 공채.. 블라인드 전형으로 개발자 채용&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;카카오, 블라인드 전형으로 신입 개발자 공채&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;카카오 공채, 신입 개발자 코딩 능력만 본다&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;카카오, 신입 공채.. &quot;코딩 실력만 본다&quot;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;카카오 &quot;코딩 능력만으로 2018 신입 개발자 뽑는다&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;기사의 제목을 기준으로 &quot;블라인드 전형&quot;에 주목하는 기사와 &quot;코딩 테스트&quot;에 주목하는 기사로 나뉘는 걸 발견했다. 튜브는 이들을 각각 묶어서 보여주면 카카오 공채 관련 기사를 찾아보는 사용자에게 유용할 듯싶었다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;유사한 기사를 묶는 기준을 정하기 위해서 논문과 자료를 조사하던 튜브는 &quot;자카드 유사도&quot;라는 방법을 찾아냈다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;자카드 유사도는 집합 간의 유사도를 검사하는 여러 방법 중의 하나로 알려져 있다. 두 집합&lt;span&gt;&amp;nbsp;&lt;/span&gt;A,&lt;span&gt;&amp;nbsp;&lt;/span&gt;B&lt;span&gt;&amp;nbsp;&lt;/span&gt;사이의 자카드 유사도&lt;span&gt;&amp;nbsp;&lt;/span&gt;J(A, B)는 두 집합의 교집합 크기를 두 집합의 합집합 크기로 나눈 값으로 정의된다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어 집합&lt;span&gt;&amp;nbsp;&lt;/span&gt;A&lt;span&gt;&amp;nbsp;&lt;/span&gt;= {1, 2, 3}, 집합&lt;span&gt;&amp;nbsp;&lt;/span&gt;B&lt;span&gt;&amp;nbsp;&lt;/span&gt;= {2, 3, 4}라고 할 때, 교집합&lt;span&gt;&amp;nbsp;&lt;/span&gt;A &amp;cap; B&lt;span&gt;&amp;nbsp;&lt;/span&gt;= {2, 3}, 합집합&lt;span&gt;&amp;nbsp;&lt;/span&gt;A &amp;cup; B&lt;span&gt;&amp;nbsp;&lt;/span&gt;= {1, 2, 3, 4}이 되므로, 집합&lt;span&gt;&amp;nbsp;&lt;/span&gt;A,&lt;span&gt;&amp;nbsp;&lt;/span&gt;B&lt;span&gt;&amp;nbsp;&lt;/span&gt;사이의 자카드 유사도&lt;span&gt;&amp;nbsp;&lt;/span&gt;J(A, B)&lt;span&gt;&amp;nbsp;&lt;/span&gt;= 2/4 = 0.5가 된다. 집합 A와 집합 B가 모두 공집합일 경우에는 나눗셈이 정의되지 않으니 따로&lt;span&gt;&amp;nbsp;&lt;/span&gt;J(A, B)&lt;span&gt;&amp;nbsp;&lt;/span&gt;= 1로 정의한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;자카드 유사도는 원소의 중복을 허용하는 다중집합에 대해서 확장할 수 있다. 다중집합&lt;span&gt;&amp;nbsp;&lt;/span&gt;A는 원소 &quot;1&quot;을 3개 가지고 있고, 다중집합&lt;span&gt;&amp;nbsp;&lt;/span&gt;B는 원소 &quot;1&quot;을 5개 가지고 있다고 하자. 이 다중집합의 교집합&lt;span&gt;&amp;nbsp;&lt;/span&gt;A &amp;cap; B는 원소 &quot;1&quot;을 min(3, 5)인 3개, 합집합&lt;span&gt;&amp;nbsp;&lt;/span&gt;A &amp;cup; B는 원소 &quot;1&quot;을 max(3, 5)인 5개 가지게 된다. 다중집합&lt;span&gt;&amp;nbsp;&lt;/span&gt;A&lt;span&gt;&amp;nbsp;&lt;/span&gt;= {1, 1, 2, 2, 3}, 다중집합&lt;span&gt;&amp;nbsp;&lt;/span&gt;B&lt;span&gt;&amp;nbsp;&lt;/span&gt;= {1, 2, 2, 4, 5}라고 하면, 교집합&lt;span&gt;&amp;nbsp;&lt;/span&gt;A &amp;cap; B&lt;span&gt;&amp;nbsp;&lt;/span&gt;= {1, 2, 2}, 합집합&lt;span&gt;&amp;nbsp;&lt;/span&gt;A &amp;cup; B&lt;span&gt;&amp;nbsp;&lt;/span&gt;= {1, 1, 2, 2, 3, 4, 5}가 되므로, 자카드 유사도&lt;span&gt;&amp;nbsp;&lt;/span&gt;J(A, B)&lt;span&gt;&amp;nbsp;&lt;/span&gt;= 3/7, 약 0.42가 된다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;이를 이용하여 문자열 사이의 유사도를 계산하는데 이용할 수 있다. 문자열 &quot;FRANCE&quot;와 &quot;FRENCH&quot;가 주어졌을 때, 이를 두 글자씩 끊어서 다중집합을 만들 수 있다. 각각 {FR, RA, AN, NC, CE}, {FR, RE, EN, NC, CH}가 되며, 교집합은 {FR, NC}, 합집합은 {FR, RA, AN, NC, CE, RE, EN, CH}가 되므로, 두 문자열 사이의 자카드 유사도&lt;span&gt;&amp;nbsp;&lt;/span&gt;J(&quot;FRANCE&quot;, &quot;FRENCH&quot;)&lt;span&gt;&amp;nbsp;&lt;/span&gt;= 2/8 = 0.25가 된다.&lt;/p&gt;
&lt;h3 style=&quot;color: #263747;&quot; data-ke-size=&quot;size23&quot;&gt;입력 형식&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;입력으로는&lt;span&gt;&amp;nbsp;&lt;/span&gt;str1과&lt;span&gt;&amp;nbsp;&lt;/span&gt;str2의 두 문자열이 들어온다. 각 문자열의 길이는 2 이상, 1,000 이하이다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;입력으로 들어온 문자열은 두 글자씩 끊어서 다중집합의 원소로 만든다. 이때 영문자로 된 글자 쌍만 유효하고, 기타 공백이나 숫자, 특수 문자가 들어있는 경우는 그 글자 쌍을 버린다. 예를 들어 &quot;ab+&quot;가 입력으로 들어오면, &quot;ab&quot;만 다중집합의 원소로 삼고, &quot;b+&quot;는 버린다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;다중집합 원소 사이를 비교할 때, 대문자와 소문자의 차이는 무시한다. &quot;AB&quot;와 &quot;Ab&quot;, &quot;ab&quot;는 같은 원소로 취급한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #263747;&quot; data-ke-size=&quot;size23&quot;&gt;출력 형식&lt;/h3&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;입력으로 들어온 두 문자열의 자카드 유사도를 출력한다. 유사도 값은 0에서 1 사이의 실수이므로, 이를 다루기 쉽도록 65536을 곱한 후에 소수점 아래를 버리고 정수부만 출력한다.&lt;/p&gt;
&lt;h3 style=&quot;color: #263747;&quot; data-ke-size=&quot;size23&quot;&gt;예제 입출력&lt;/h3&gt;
&lt;table style=&quot;color: #000000; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;str1&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;str2&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;answer&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;FRANCE&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;french&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;16384&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;handshake&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;shake hands&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;65536&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;aa1+aa2&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;AAAA12&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;43690&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;E=M*C^2&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;e=m*c^2&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;65536&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;pre id=&quot;code_1757949825720&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# dict 완성하는 함수
def dict_com(instr):
    from collections import defaultdict
    num_dict = defaultdict(int)
    instr = instr.lower()
    # 글자 2개 나눠서 알파벳으로만 구성됐는지 확인하고 그렇다면 dict에 저장. key는 알파벳 value는 개수
    for i in range(1,len(instr)):
        if i+1 == len(instr):
            split_str = instr[i-1:]
        split_str = instr[i-1:i+1]
        
        if split_str.isalpha(): # 알파벳으로만 이루어져 있으면 dict에 저장
            num_dict[split_str] += 1
    return num_dict
            
            
def solution(str1, str2):
    up = 0 # 분자
    down = 0 # 분모
    # 공집합이면 1
    # 같은수면 교집합은 min개수 합집합은 max 개수
    str1_dict = dict_com(str1)
    str2_dict = dict_com(str2)
    # print(str1_dict) #  {'ha': 2, 'an': 1, 'nd': 1, 'ds': 1, 'sh': 1, 'ak': 1, 'ke': 1}
    # print(str2_dict)
    str1_keys = set(str1_dict.keys())
    str2_keys = set(str2_dict.keys())
    if not str1_keys and not str2_keys:
        return 1*65536
    
    # 2개씩 끊어놓은거 종류 뽑아서 그 2개 교집합인 요소들을 뽑음
    # 그러면 그 교집합인 것들에 대해서만min max 판단해주면 되고 나머지는 분모할때 그냥 그거 value를 더해주면 됨
    # 주의해야하는 교집합인 요소들
#     if not str1_keys and not str2_keys:
#         return 1*65536
    
    inter_str12 = str1_keys.intersection(str2_keys)
    if inter_str12:
        for inter in inter_str12:
            str1_value = str1_dict[inter]
            str2_value = str2_dict[inter]
            
            up += min(str1_value,str2_value)
            down += max(str1_value,str2_value)
    else: 
        return 0
    
    # 분모에 교집합 외 안채워진것들 더해주는 시간
    str1_diff = str1_keys - inter_str12
    str2_diff = str2_keys - inter_str12
    for diff in str1_diff:
        down += str1_dict[diff]
    for diff in str2_diff:
        down += str2_dict[diff]
    answer = int(up/down *65536)
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;크게 고민하고 풀지 않았다.&lt;/li&gt;
&lt;li&gt;알아가야할건 알파벳인지 확인해주는 isalpha() 정도?&lt;/li&gt;
&lt;li&gt;갑자기&amp;nbsp; 백준 허브 연동이 안된다. 문제가 뭔지 모르겠음 ㅜㅜ 슬프다&lt;/li&gt;
&lt;li&gt;정답률 63%인 문제인데, 다음부터는 이것보다는 정답률이 낮은걸 푸는게 좋을 것 같다&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Algorithm/문제</category>
      <author>데린이 성장 중</author>
      <guid isPermaLink="true">https://itdatascience.tistory.com/135</guid>
      <comments>https://itdatascience.tistory.com/135#entry135comment</comments>
      <pubDate>Tue, 16 Sep 2025 00:24:28 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] 250911 - 프로그래머스 숫자의 표현</title>
      <link>https://itdatascience.tistory.com/134</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12924&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;문제&lt;/b&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;div style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;1 + 2 + 3 + 4 + 5 = 15&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;4 + 5 + 6 = 15&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;7 + 8 = 15&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;15 = 15&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요.&lt;/p&gt;
제한사항
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;n은 10,000 이하의 자연수 입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;b&gt;입출력 예&lt;/b&gt;
&lt;table style=&quot;color: #000000; border-collapse: collapse; width: 26.9749%; height: 17px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;color: #000000;&quot;&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 8.66696%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;n&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; width: 40.4791%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;result&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000; height: 17px;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; height: 17px; width: 8.66696%;&quot;&gt;15&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; height: 17px; width: 40.4791%;&quot;&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;b&gt;입출력 예 설명&lt;/b&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;입출력 예#1&lt;br /&gt;문제의 예시와 같습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;나의 답&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1757591284926&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 짝수개로 나눠질 수 있으려면 -&amp;gt; 1 2 3 4 5 6 -&amp;gt; 21 에서 1,6/2,5/3,4 쌍으로 합이 7이니까 7*3 = 21. 즉, 짝수로 k개로 수가 나뉠 수 있으려면 k/2 만큼의 나머지가 남아야함. 그리고 각 쌍 더한게 k이상이어야함.
# 홀수개로 이 수가 나눠질 수 있으려면 -&amp;gt; 1 + 2 + 3 + 4 + 5  = 15에서 중간에 있는 값 3 기준으로 양 옆 2,4/ 1,5의 합이 3의 2배임. 즉, 합해서 나오는 수는 중간에 있는 값 a 기준으로 a(1+ 홀수개//2). 걍 n이 그 홀수갯수(k)로 나눠떨어지면 되는거임. 그리고 나누어 떨어진 와중에 k개로 나누어 떨어졌다면 n/k*2 가 k 보다 커야함. 
def solution(n):
    answer = 0
    # n//2 까지 탐색
    for k in range(1, n//2+2):
        if k % 2 == 0 : # 항의 수가 짝수
            value = n/k # 값
            remain = n%k # 나머지
            if remain == k/2 and value*2 &amp;gt;= k:
                answer += 1
        else: # 항의 수가 홀수
            if n % k == 0 and n/k*2 &amp;gt; k: # 나누어 떨어지면
                answer += 1
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm/문제</category>
      <author>데린이 성장 중</author>
      <guid isPermaLink="true">https://itdatascience.tistory.com/134</guid>
      <comments>https://itdatascience.tistory.com/134#entry134comment</comments>
      <pubDate>Thu, 11 Sep 2025 20:48:16 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] 250630 - 파이썬 itertools.product 사용법</title>
      <link>https://itdatascience.tistory.com/131</link>
      <description>&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt; itertools.product&lt;/b&gt;는 &lt;b&gt;중복을 허용&lt;/b&gt;하며, 주어진 리스트의 모든 가능한 조합(데카르트 곱)을 만들어주는 도구&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-end=&quot;153&quot; data-start=&quot;142&quot; data-ke-size=&quot;size26&quot;&gt;기본 사용법&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1751301633613&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from itertools import product

for p in product(['A', 'B'], repeat=2):
    print(p)&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-end=&quot;267&quot; data-start=&quot;254&quot; data-ke-size=&quot;size23&quot;&gt;출력 결과:&lt;/h3&gt;
&lt;pre id=&quot;code_1751301661228&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;('A', 'A')
('A', 'B')
('B', 'A')
('B', 'B')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;348&quot; data-start=&quot;321&quot;&gt;repeat=2는 두 글자로 조합한다는 뜻&lt;/li&gt;
&lt;li data-end=&quot;356&quot; data-start=&quot;349&quot;&gt;중복 허용&lt;/li&gt;
&lt;li data-end=&quot;401&quot; data-start=&quot;357&quot;&gt;순서 고려함 &amp;rarr; ('A', 'B')와 ('B', 'A')는 다르게 봄&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-end=&quot;425&quot; data-start=&quot;408&quot; data-ke-size=&quot;size26&quot;&gt;사용 예시&lt;/h2&gt;
&lt;h3 data-end=&quot;474&quot; data-start=&quot;427&quot; data-ke-size=&quot;size23&quot;&gt;  'A', 'E', 'I', 'O', 'U'로 만들 수 있는 단어 생성&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1751301720515&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from itertools import product

alphabet = ['A', 'E', 'I', 'O', 'U']
all_words = []

for i in range(1, 6):  # 길이 1~5짜리 단어 생성
    for p in product(alphabet, repeat=i):
        all_words.append(''.join(p))&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm/정리</category>
      <category>itertools</category>
      <category>product</category>
      <category>Python</category>
      <author>데린이 성장 중</author>
      <guid isPermaLink="true">https://itdatascience.tistory.com/131</guid>
      <comments>https://itdatascience.tistory.com/131#entry131comment</comments>
      <pubDate>Tue, 1 Jul 2025 01:47:26 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] 250630 프로그래머스 - 더 맵게</title>
      <link>https://itdatascience.tistory.com/130</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42626&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;문제 설명&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다.&lt;/p&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background-color: #e9ecf3; color: #44576c;&quot;&gt;&lt;code&gt;섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2)
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다.&lt;br /&gt;Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해주세요.&lt;/p&gt;
&lt;b&gt;제한 사항&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;scoville의 길이는 2 이상 1,000,000 이하입니다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;K는 0 이상 1,000,000,000 이하입니다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;scoville의 원소는 각각 0 이상 1,000,000 이하입니다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;모든 음식의 스코빌 지수를 K 이상으로 만들 수 없는 경우에는 -1을 return 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;입출력 예&lt;/b&gt;
&lt;table style=&quot;color: #000000; border-collapse: collapse; width: 30.6969%; height: 26px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.093%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;scoville&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 5.93027%;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;K&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 7.55807%;&quot;&gt;return&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000; height: 16px;&quot;&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; height: 16px; width: 17.093%;&quot;&gt;[1, 2, 3, 9, 10, 12]&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; height: 16px; width: 5.93027%;&quot;&gt;7&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff; color: #000000; height: 16px; width: 7.55807%;&quot;&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;b&gt;입출력 예 설명&lt;/b&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;스코빌 지수가 1인 음식과 2인 음식을 섞으면 음식의 스코빌 지수가 아래와 같이 됩니다.&lt;br /&gt;새로운 음식의 스코빌 지수 = 1 + (2 * 2) = 5&lt;br /&gt;가진 음식의 스코빌 지수 = [5, 3, 9, 10, 12]&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;스코빌 지수가 3인 음식과 5인 음식을 섞으면 음식의 스코빌 지수가 아래와 같이 됩니다.&lt;br /&gt;새로운 음식의 스코빌 지수 = 3 + (5 * 2) = 13&lt;br /&gt;가진 음식의 스코빌 지수 = [13, 9, 10, 12]&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;모든 음식의 스코빌 지수가 7 이상이 되었고 이때 섞은 횟수는 2회입니다.&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;나의 답&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1751213658920&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(scoville, K):
    import heapq 
    heapq.heapify(scoville) # 리스트를 우선순위 힙으로
    answer = 0
    
    
    while scoville[0] &amp;lt; K:
        if len(scoville) == 1: # 1개까지 가도 스코빌 지수가 안넘었으면
            return -1
        min1 = heapq.heappop(scoville) # k보다 작다는 제일 작은 수
        min2 = heapq.heappop(scoville)
        
        mix = min1 + min2*2
        answer += 1
                
        heapq.heappush(scoville, mix)
    
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;초반에 고민은 좀 했으나, 크게 어렵지 않게 풀었습니다&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;처음에는 for i in range(len(scoville)) 방식으로 접근하려고 했지만, for문 안에서 scoville 리스트를 계속 변경해야 하다 보니 문제 생길 여지가 있어 while 루프로 구현 방식을 바꿨습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Algorithm/문제</category>
      <category>Heap</category>
      <category>우선순위 큐</category>
      <author>데린이 성장 중</author>
      <guid isPermaLink="true">https://itdatascience.tistory.com/130</guid>
      <comments>https://itdatascience.tistory.com/130#entry130comment</comments>
      <pubDate>Mon, 30 Jun 2025 01:13:09 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] 250629 우선순위 큐(힙(Heap))</title>
      <link>https://itdatascience.tistory.com/129</link>
      <description>&lt;h2 data-end=&quot;148&quot; data-start=&quot;117&quot; data-ke-size=&quot;size26&quot;&gt;1. 개념 정리: 힙(Heap) = 우선순위 큐&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;313&quot; data-start=&quot;149&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;203&quot; data-start=&quot;149&quot;&gt;&lt;b&gt;우선순위 큐&lt;/b&gt;는 일반적인 큐와 달리, &lt;b&gt;값의 크기에 따라 먼저 나가는 순서가 결정&lt;/b&gt;됨&lt;/li&gt;
&lt;li data-end=&quot;268&quot; data-start=&quot;204&quot;&gt;파이썬의 heapq는 &lt;b&gt;최소 힙(min heap)&lt;/b&gt; 기반:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;268&quot; data-start=&quot;245&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;268&quot; data-start=&quot;245&quot;&gt;항상 &lt;b&gt;가장 작은 값이 먼저 나옴&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;313&quot; data-start=&quot;269&quot;&gt;최대 힙(max heap)을 쓰고 싶을 땐 &lt;b&gt;값을 음수로 저장&lt;/b&gt;해서 우회&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;347&quot; data-start=&quot;320&quot; data-ke-size=&quot;size26&quot;&gt;2. 힙 사용법 (파이썬 heapq)&lt;/h2&gt;
&lt;h3 data-end=&quot;368&quot; data-start=&quot;349&quot; data-ke-size=&quot;size23&quot;&gt;- 최소 힙 (기본 동작)&lt;/h3&gt;
&lt;pre id=&quot;code_1751206277879&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import heapq

heap = []

# 삽입: heappush
heapq.heappush(heap, 4)
heapq.heappush(heap, 1)
heapq.heappush(heap, 7)

# 출력 (가장 작은 값)
print(heapq.heappop(heap))  # 1
print(heapq.heappop(heap))  # 4
print(heapq.heappop(heap))  # 7&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-start=&quot;349&quot; data-end=&quot;368&quot; data-ke-size=&quot;size23&quot;&gt;- 최대 힙 (음수 활용)&lt;/h3&gt;
&lt;pre id=&quot;code_1751206336036&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import heapq

heap = []

# 값을 음수로 넣어 최대 힙처럼 사용
heapq.heappush(heap, -4)
heapq.heappush(heap, -1)
heapq.heappush(heap, -7)

# pop할 때 다시 음수로 바꿔줌
print(-heapq.heappop(heap))  # 7
print(-heapq.heappop(heap))  # 4
print(-heapq.heappop(heap))  # 1&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-end=&quot;908&quot; data-start=&quot;890&quot; data-ke-size=&quot;size26&quot;&gt;3. 힙 주요 함수 정리&lt;/h2&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 154px;&quot; border=&quot;1&quot; data-end=&quot;1271&quot; data-start=&quot;910&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 28.3721%; height: 22px;&quot;&gt;함수명&lt;/td&gt;
&lt;td style=&quot;width: 37.2093%; height: 22px;&quot;&gt;설명&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%; height: 22px;&quot;&gt;시간 복잡도&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot; data-end=&quot;987&quot; data-start=&quot;941&quot;&gt;
&lt;td style=&quot;width: 28.3721%; height: 22px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;972&quot; data-start=&quot;941&quot;&gt;heapq.heappush(heap, item)&lt;/td&gt;
&lt;td style=&quot;width: 37.2093%; height: 22px;&quot; data-end=&quot;987&quot; data-start=&quot;972&quot; data-col-size=&quot;sm&quot;&gt;item을 힙에 추가&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%; height: 22px;&quot;&gt;O(log n)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot; data-end=&quot;1035&quot; data-start=&quot;988&quot;&gt;
&lt;td style=&quot;width: 28.3721%; height: 22px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1012&quot; data-start=&quot;988&quot;&gt;heapq.heappop(heap)&lt;/td&gt;
&lt;td style=&quot;width: 37.2093%; height: 22px;&quot; data-end=&quot;1035&quot; data-start=&quot;1012&quot; data-col-size=&quot;sm&quot;&gt;가장 작은 item을 제거하고 반환&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%; height: 22px;&quot;&gt;O(log n)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot; data-end=&quot;1092&quot; data-start=&quot;1036&quot;&gt;
&lt;td style=&quot;width: 28.3721%; height: 22px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1060&quot; data-start=&quot;1036&quot;&gt;heapq.heapify(list)&lt;/td&gt;
&lt;td style=&quot;width: 37.2093%; height: 22px;&quot; data-end=&quot;1092&quot; data-start=&quot;1060&quot; data-col-size=&quot;sm&quot;&gt;기존 리스트를 &lt;b&gt;in-place로&lt;/b&gt; 힙으로 만듦&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%; height: 22px;&quot;&gt;O(log n)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot; data-end=&quot;1161&quot; data-start=&quot;1093&quot;&gt;
&lt;td style=&quot;width: 28.3721%; height: 22px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1127&quot; data-start=&quot;1093&quot;&gt;heapq.heappushpop(heap, item)&lt;/td&gt;
&lt;td style=&quot;width: 37.2093%; height: 22px;&quot; data-end=&quot;1161&quot; data-start=&quot;1127&quot; data-col-size=&quot;sm&quot;&gt;item을 넣고, 가장 작은 값 바로 꺼냄 (더 빠름)&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%; height: 22px;&quot;&gt;O(n)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot; data-end=&quot;1219&quot; data-start=&quot;1162&quot;&gt;
&lt;td style=&quot;width: 28.3721%; height: 22px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1194&quot; data-start=&quot;1162&quot;&gt;heapq.nlargest(n, iterable)&lt;/td&gt;
&lt;td style=&quot;width: 37.2093%; height: 22px;&quot; data-end=&quot;1219&quot; data-start=&quot;1194&quot; data-col-size=&quot;sm&quot;&gt;가장 큰 n개 요소 리턴 (정렬 아님)&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%; height: 22px;&quot;&gt;O(n&amp;nbsp;log&amp;nbsp;k)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot; data-end=&quot;1271&quot; data-start=&quot;1220&quot;&gt;
&lt;td style=&quot;width: 28.3721%; height: 22px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1253&quot; data-start=&quot;1220&quot;&gt;heapq.nsmallest(n, iterable)&lt;/td&gt;
&lt;td style=&quot;width: 37.2093%; height: 22px;&quot; data-end=&quot;1271&quot; data-start=&quot;1253&quot; data-col-size=&quot;sm&quot;&gt;가장 작은 n개 요소 리턴&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%; height: 22px;&quot;&gt;O(n&amp;nbsp;log&amp;nbsp;k)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;h2 data-end=&quot;1298&quot; data-start=&quot;1278&quot; data-ke-size=&quot;size26&quot;&gt;4. 우선순위가 튜플일 경우&lt;/h2&gt;
&lt;p data-end=&quot;1335&quot; data-start=&quot;1299&quot; data-ke-size=&quot;size16&quot;&gt;(우선순위, 값) 형식으로 넣으면 &lt;b&gt;우선순위 기준 정렬&lt;/b&gt;됨&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1751209751088&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import heapq

tasks = []
heapq.heappush(tasks, (2, &quot;cleaning&quot;))
heapq.heappush(tasks, (1, &quot;study&quot;))
heapq.heappush(tasks, (3, &quot;sleep&quot;))

print(heapq.heappop(tasks))  # (1, 'study') -&amp;gt; 가장 우선순위 높은 작업&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. heapq.nsmallest(n, iterable)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;heapq.nsmallest(n, iterable)는 &lt;b&gt;iterable(반복 가능한 자료)&lt;/b&gt;에서 &lt;b&gt;가장 작은 값 n개를 찾아서 정렬된 리스트로 반환&lt;/b&gt;해주는 함수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용법&lt;/p&gt;
&lt;pre id=&quot;code_1751212607043&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import heapq

nums = [10, 4, 1, 20, 7]

# 가장 작은 3개 원소 반환
smallest = heapq.nsmallest(3, nums)

print(smallest)  # [1, 4, 7]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;287&quot; data-start=&quot;256&quot;&gt;&lt;b&gt;정렬된 결과&lt;/b&gt;를 반환함 (min &amp;rarr; max)&lt;/li&gt;
&lt;li data-end=&quot;346&quot; data-start=&quot;288&quot;&gt;내부적으로는 &lt;b&gt;최대 힙(Max Heap) 크기 n 유지&lt;/b&gt; &amp;rarr; 시간 복잡도: O(n log k)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-end=&quot;388&quot; data-start=&quot;353&quot; data-ke-size=&quot;size26&quot;&gt;nsmallest + key 인자 (정렬 기준 커스텀)&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1751212677813&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;students = [
    {&quot;name&quot;: &quot;Alice&quot;, &quot;score&quot;: 82},
    {&quot;name&quot;: &quot;Bob&quot;, &quot;score&quot;: 91},
    {&quot;name&quot;: &quot;Charlie&quot;, &quot;score&quot;: 78}
]

# 점수(score)가 가장 낮은 2명
top2 = heapq.nsmallest(2, students, key=lambda x: x[&quot;score&quot;])

for s in top2:
    print(s[&quot;name&quot;], s[&quot;score&quot;])
# 출력:
# Charlie 78
# Alice 82&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;125&quot; data-start=&quot;98&quot; data-ke-size=&quot;size26&quot;&gt;6. 튜플로 여러 우선순위를 동시에 설정하기&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;328&quot; data-start=&quot;254&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;328&quot; data-start=&quot;298&quot;&gt;파이썬은 튜플을 비교할 때 자동으로 &lt;b&gt;사전식(lexicographical) 비교&lt;/b&gt;를 수행함.&lt;br /&gt;즉 (a, b, c)끼리 비교할 때는
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;345&quot; data-start=&quot;260&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;282&quot; data-start=&quot;260&quot;&gt;첫 요소 a를 먼저 비교하고&lt;/li&gt;
&lt;li data-end=&quot;309&quot; data-start=&quot;283&quot;&gt;같으면 두 번째 요소 b를 비교하며&lt;/li&gt;
&lt;li data-end=&quot;345&quot; data-start=&quot;310&quot;&gt;그래도 같으면 세 번째 요소 c를 기준으로 비교합니다.&lt;/li&gt;
&lt;/ol&gt;
이 성질 덕분에 heapq에 아래처럼 튜플을 넣으면:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1751217341407&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import heapq

heap = []
heapq.heappush(heap, (priority1, priority2, data))&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;545&quot; data-start=&quot;470&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;494&quot; data-start=&quot;470&quot;&gt;priority1이 작을수록 더 우선&lt;/li&gt;
&lt;li data-end=&quot;515&quot; data-start=&quot;495&quot;&gt;같다면 priority2 비교&lt;/li&gt;
&lt;li data-end=&quot;545&quot; data-start=&quot;516&quot;&gt;또 같으면 data(또는 다른 요소)까지 비교&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;580&quot; data-start=&quot;547&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 &lt;b&gt;다중 우선순위 기준&lt;/b&gt;을 쉽게 적용할 수 있음&lt;/p&gt;
&lt;h2 data-end=&quot;619&quot; data-start=&quot;587&quot; data-ke-size=&quot;size26&quot;&gt;실전 예제: 세 가지 기준으로 정렬되는 힙&lt;/h2&gt;
&lt;p data-end=&quot;660&quot; data-start=&quot;621&quot; data-ke-size=&quot;size16&quot;&gt;학생들을 (등급, 나이, 이름) 기준으로 우선순위를 주려고 한다면:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1751217401592&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import heapq

students = [
    ('A', 22, 'Charlie'),
    ('B', 20, 'Alice'),
    ('A', 20, 'Bob'),
    ('A', 22, 'Anne'),
]

heap = []
for grade, age, name in students:
    heapq.heappush(heap, (grade, age, name))

while heap:
    print(heapq.heappop(heap))&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과는 아래와 같음&lt;/p&gt;
&lt;pre id=&quot;code_1751217450963&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;('A', 20, 'Bob')
('A', 22, 'Anne')
('A', 22, 'Charlie')
('B', 20, 'Alice')&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1105&quot; data-start=&quot;1055&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1067&quot; data-start=&quot;1055&quot;&gt;등급 A 우선,&lt;/li&gt;
&lt;li data-end=&quot;1086&quot; data-start=&quot;1068&quot;&gt;나이 같다면 20살 먼저,&lt;/li&gt;
&lt;li data-end=&quot;1105&quot; data-start=&quot;1087&quot;&gt;나이도 같다면 이름 알파벳 순&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1146&quot; data-start=&quot;1107&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 튜플을 그대로 넣는 것만으로 다중 우선순위를 적용할 수 있음&lt;/p&gt;
&lt;p data-end=&quot;1146&quot; data-start=&quot;1107&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1146&quot; data-start=&quot;1107&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm/정리</category>
      <category>Deque</category>
      <category>Heap</category>
      <category>우선순위 큐</category>
      <category>코테</category>
      <category>파이썬</category>
      <category>힙</category>
      <author>데린이 성장 중</author>
      <guid isPermaLink="true">https://itdatascience.tistory.com/129</guid>
      <comments>https://itdatascience.tistory.com/129#entry129comment</comments>
      <pubDate>Mon, 30 Jun 2025 00:31:53 +0900</pubDate>
    </item>
  </channel>
</rss>