<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>키키의 개발일기 [Kiki's Dev Diary]</title>
    <link>https://yoozin.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Fri, 12 Jun 2026 19:32:27 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Yoozin</managingEditor>
    <image>
      <title>키키의 개발일기 [Kiki's Dev Diary]</title>
      <url>https://tistory1.daumcdn.net/tistory/6291903/attach/29ded471e98949efa0bea5583866e2c1</url>
      <link>https://yoozin.tistory.com</link>
    </image>
    <item>
      <title>그리디 알고리즘 - 조이스틱</title>
      <link>https://yoozin.tistory.com/12</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;조이스틱&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이것은.. H E L L&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제&amp;nbsp;설명&lt;/b&gt;&lt;br /&gt;조이스틱으로&amp;nbsp;알파벳&amp;nbsp;이름을&amp;nbsp;완성하세요.&amp;nbsp;맨&amp;nbsp;처음엔&amp;nbsp;A로만&amp;nbsp;이루어져&amp;nbsp;있습니다.&lt;br /&gt;ex)&amp;nbsp;완성해야&amp;nbsp;하는&amp;nbsp;이름이&amp;nbsp;세&amp;nbsp;글자면&amp;nbsp;AAA,&amp;nbsp;네&amp;nbsp;글자면&amp;nbsp;AAAA&lt;br /&gt;&lt;br /&gt;조이스틱을&amp;nbsp;각&amp;nbsp;방향으로&amp;nbsp;움직이면&amp;nbsp;아래와&amp;nbsp;같습니다.&lt;br /&gt;&lt;br /&gt;▲&amp;nbsp;-&amp;nbsp;다음&amp;nbsp;알파벳&lt;br /&gt;▼&amp;nbsp;-&amp;nbsp;이전&amp;nbsp;알파벳&amp;nbsp;(A에서&amp;nbsp;아래쪽으로&amp;nbsp;이동하면&amp;nbsp;Z로)&lt;br /&gt;◀&amp;nbsp;-&amp;nbsp;커서를&amp;nbsp;왼쪽으로&amp;nbsp;이동&amp;nbsp;(첫&amp;nbsp;번째&amp;nbsp;위치에서&amp;nbsp;왼쪽으로&amp;nbsp;이동하면&amp;nbsp;마지막&amp;nbsp;문자에&amp;nbsp;커서)&lt;br /&gt;▶&amp;nbsp;-&amp;nbsp;커서를&amp;nbsp;오른쪽으로&amp;nbsp;이동&amp;nbsp;(마지막&amp;nbsp;위치에서&amp;nbsp;오른쪽으로&amp;nbsp;이동하면&amp;nbsp;첫&amp;nbsp;번째&amp;nbsp;문자에&amp;nbsp;커서)&lt;br /&gt;예를&amp;nbsp;들어&amp;nbsp;아래의&amp;nbsp;방법으로&amp;nbsp;&quot;JAZ&quot;를&amp;nbsp;만들&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;첫&amp;nbsp;번째&amp;nbsp;위치에서&amp;nbsp;조이스틱을&amp;nbsp;위로&amp;nbsp;9번&amp;nbsp;조작하여&amp;nbsp;J를&amp;nbsp;완성합니다.&lt;br /&gt;-&amp;nbsp;조이스틱을&amp;nbsp;왼쪽으로&amp;nbsp;1번&amp;nbsp;조작하여&amp;nbsp;커서를&amp;nbsp;마지막&amp;nbsp;문자&amp;nbsp;위치로&amp;nbsp;이동시킵니다.&lt;br /&gt;-&amp;nbsp;마지막&amp;nbsp;위치에서&amp;nbsp;조이스틱을&amp;nbsp;아래로&amp;nbsp;1번&amp;nbsp;조작하여&amp;nbsp;Z를&amp;nbsp;완성합니다.&lt;br /&gt;따라서&amp;nbsp;11번&amp;nbsp;이동시켜&amp;nbsp;&quot;JAZ&quot;를&amp;nbsp;만들&amp;nbsp;수&amp;nbsp;있고,&amp;nbsp;이때가&amp;nbsp;최소&amp;nbsp;이동입니다.&lt;br /&gt;만들고자&amp;nbsp;하는&amp;nbsp;이름&amp;nbsp;name이&amp;nbsp;매개변수로&amp;nbsp;주어질&amp;nbsp;때,&amp;nbsp;이름에&amp;nbsp;대해&amp;nbsp;조이스틱&amp;nbsp;조작&amp;nbsp;횟수의&amp;nbsp;최솟값을&amp;nbsp;return&amp;nbsp;하도록&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;만드세요.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;제한&amp;nbsp;사항&lt;/b&gt;&lt;br /&gt;name은&amp;nbsp;알파벳&amp;nbsp;대문자로만&amp;nbsp;이루어져&amp;nbsp;있습니다.&lt;br /&gt;name의&amp;nbsp;길이는&amp;nbsp;1&amp;nbsp;이상&amp;nbsp;20&amp;nbsp;이하입니다.&lt;br /&gt;입출력&amp;nbsp;예&lt;br /&gt;name return&lt;br /&gt;&quot;JEROEN&quot; 56&lt;br /&gt;&quot;JAN&quot; 23&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;내가 푼 풀이&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1711285520156&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(name):
    answer = 0
    name=list(name)
    name_reverse = name[::-1]
    num_list=[]
    print(name)
    a_num1 = 0
    a_num2 = 0 
    
    t1 = 0
    t2 = 1
    alphabet_reverse = ['Z','Y','X','W','V','U','T','S','R','Q','P','O','N','M','L','K','J','I','H','G','F','E','D','C','B','A']
    alphabet = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
    print(alphabet[9]==name[0],alphabet[9],name[0])
    for name_alphabet in name:
        for cursor in alphabet:
            if name_alphabet == cursor:
                num_list.append(alphabet.index(cursor))
        for cursor in alphabet_reverse:
            if name_alphabet == cursor:
                num_list.append(alphabet.index(cursor)+1)
        min_num=min(num_list)
        print(num_list)
        answer=answer+min_num
        num_list=[]
    for name_alphabet in name:
        t1 += 1
        if name_alphabet == 'A':
            while name_alphabet == 'A':
                a_num1+=1
                if name_alphabet != 'A':
                    break
        break

    for name_alphabet in name_reverse:
        t2 += 1
        if name_alphabet == 'A':
            while name_alphabet == 'A':
                a_num2+=1
                if name_alphabet != 'A':
                    break
        break
    print(a_num1, a_num2, t1, t2)
    if a_num1 &amp;lt;= a_num2:
        answer = answer+t1    
    else:
        answer = answer+t2
            
        
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;내가 푼 풀이 해석&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 문제를 이해하는 데에만 많은 시간이 소요됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 애초에 잘못 이해했다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제를 보고 머리에 풀이가 떠올랐을 때의 문제풀이 프로세스를 설명하자면&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.&amp;nbsp; 문자열을 기준으로 알파벳을 앞으로 이동 or 뒤로 이동 =&amp;gt; 더 짧은 방법으로 이동&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; -&amp;gt; 그럼 앞으로 이동하는 배열과 뒤로 이동하는 배열을 만들어야겠다!&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;([a,b,c...z],[z,y,x......])&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 그리고 A가 나오면 더이상 이동할 필요없는 것을 구현해야겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;-&amp;gt; 양방향 어디로 이동하던지 마지막까지 이동했을 때의 값이 A가 아니라면 무조건 마지막까지 이동해야함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 만약 A다음으로 이동할 때 쭉 A만 나온다면 A나오기 전에 이동을 끝낼 수가 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 앞으로 이동했을 때의 A의 개수와 뒤로 이동했을 때의 A의 연속 개수를 세야겠다~!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ex. AAA&lt;u&gt;B&lt;/u&gt;ABAA&lt;u&gt;C&lt;/u&gt; =&amp;gt;뒤로 이동시 마지막이 C이기 때문에 끝까지 이동해야하지만 앞으로 이동시에 B까지만 이동하면 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 그럼 순서대로 문자열과 거꾸로 문자열을 두 개로 나눠 A가 연속되는 갯수를 세고(연속 끝나면 브레이크) A가 더 적은 것의 이동 수를 센다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;정답 나온 다른사람 풀이&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1711287595096&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(name):
    answer = 0
    min_move = len(name) - 1
    
    for i, char in enumerate(name):
        answer += min(ord(char) - ord('A'), 26 - (ord(char) - ord('A')))
        
        next_i = i + 1
        while next_i &amp;lt; len(name) and name[next_i] == 'A':
            next_i += 1
            
        move_forward = i + i + len(name) - next_i
        move_backward = (len(name) - next_i) * 2 + i
        min_move = min(min_move, move_forward, move_backward)
    
    answer += min_move
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;612&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IfrhD/btsF3fWvXpL/QXK2J9IknxFWJe4PE2RAAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IfrhD/btsF3fWvXpL/QXK2J9IknxFWJe4PE2RAAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IfrhD/btsF3fWvXpL/QXK2J9IknxFWJe4PE2RAAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIfrhD%2FbtsF3fWvXpL%2FQXK2J9IknxFWJe4PE2RAAK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;615&quot; height=&quot;294&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;612&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수정 중..&lt;/p&gt;</description>
      <author>Yoozin</author>
      <guid isPermaLink="true">https://yoozin.tistory.com/12</guid>
      <comments>https://yoozin.tistory.com/12#entry12comment</comments>
      <pubDate>Sun, 24 Mar 2024 22:55:16 +0900</pubDate>
    </item>
    <item>
      <title>프로세스</title>
      <link>https://yoozin.tistory.com/11</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제&amp;nbsp;설명&lt;/b&gt;&lt;br /&gt;운영체제의&amp;nbsp;역할&amp;nbsp;중&amp;nbsp;하나는&amp;nbsp;컴퓨터&amp;nbsp;시스템의&amp;nbsp;자원을&amp;nbsp;효율적으로&amp;nbsp;관리하는&amp;nbsp;것입니다.&amp;nbsp;이&amp;nbsp;문제에서는&amp;nbsp;운영체제가&amp;nbsp;다음&amp;nbsp;규칙에&amp;nbsp;따라&amp;nbsp;프로세스를&amp;nbsp;관리할&amp;nbsp;경우&amp;nbsp;특정&amp;nbsp;프로세스가&amp;nbsp;몇&amp;nbsp;번째로&amp;nbsp;실행되는지&amp;nbsp;알아내면&amp;nbsp;됩니다.&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;실행&amp;nbsp;대기&amp;nbsp;큐(Queue)에서&amp;nbsp;대기중인&amp;nbsp;프로세스&amp;nbsp;하나를&amp;nbsp;꺼냅니다.&lt;br /&gt;2.&amp;nbsp;큐에&amp;nbsp;대기중인&amp;nbsp;프로세스&amp;nbsp;중&amp;nbsp;우선순위가&amp;nbsp;더&amp;nbsp;높은&amp;nbsp;프로세스가&amp;nbsp;있다면&amp;nbsp;방금&amp;nbsp;꺼낸&amp;nbsp;프로세스를&amp;nbsp;다시&amp;nbsp;큐에&amp;nbsp;넣습니다.&lt;br /&gt;3.&amp;nbsp;만약&amp;nbsp;그런&amp;nbsp;프로세스가&amp;nbsp;없다면&amp;nbsp;방금&amp;nbsp;꺼낸&amp;nbsp;프로세스를&amp;nbsp;실행합니다.&lt;br /&gt;&amp;nbsp;&amp;nbsp;3.1&amp;nbsp;한&amp;nbsp;번&amp;nbsp;실행한&amp;nbsp;프로세스는&amp;nbsp;다시&amp;nbsp;큐에&amp;nbsp;넣지&amp;nbsp;않고&amp;nbsp;그대로&amp;nbsp;종료됩니다.&lt;br /&gt;예를&amp;nbsp;들어&amp;nbsp;프로세스&amp;nbsp;4개&amp;nbsp;[A,&amp;nbsp;B,&amp;nbsp;C,&amp;nbsp;D]가&amp;nbsp;순서대로&amp;nbsp;실행&amp;nbsp;대기&amp;nbsp;큐에&amp;nbsp;들어있고,&amp;nbsp;우선순위가&amp;nbsp;[2,&amp;nbsp;1,&amp;nbsp;3,&amp;nbsp;2]라면&amp;nbsp;[C,&amp;nbsp;D,&amp;nbsp;A,&amp;nbsp;B]&amp;nbsp;순으로&amp;nbsp;실행하게&amp;nbsp;됩니다.&lt;br /&gt;&lt;br /&gt;현재&amp;nbsp;실행&amp;nbsp;대기&amp;nbsp;큐(Queue)에&amp;nbsp;있는&amp;nbsp;프로세스의&amp;nbsp;중요도가&amp;nbsp;순서대로&amp;nbsp;담긴&amp;nbsp;배열&amp;nbsp;priorities와,&amp;nbsp;몇&amp;nbsp;번째로&amp;nbsp;실행되는지&amp;nbsp;알고싶은&amp;nbsp;프로세스의&amp;nbsp;위치를&amp;nbsp;알려주는&amp;nbsp;location이&amp;nbsp;매개변수로&amp;nbsp;주어질&amp;nbsp;때,&amp;nbsp;해당&amp;nbsp;프로세스가&amp;nbsp;몇&amp;nbsp;번째로&amp;nbsp;실행되는지&amp;nbsp;return&amp;nbsp;하도록&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;작성해주세요.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;제한사항&lt;/b&gt;&lt;br /&gt;priorities의&amp;nbsp;길이는&amp;nbsp;1&amp;nbsp;이상&amp;nbsp;100&amp;nbsp;이하입니다.&lt;br /&gt;priorities의&amp;nbsp;원소는&amp;nbsp;1&amp;nbsp;이상&amp;nbsp;9&amp;nbsp;이하의&amp;nbsp;정수입니다.&lt;br /&gt;priorities의&amp;nbsp;원소는&amp;nbsp;우선순위를&amp;nbsp;나타내며&amp;nbsp;숫자가&amp;nbsp;클&amp;nbsp;수록&amp;nbsp;우선순위가&amp;nbsp;높습니다.&lt;br /&gt;location은&amp;nbsp;0&amp;nbsp;이상&amp;nbsp;(대기&amp;nbsp;큐에&amp;nbsp;있는&amp;nbsp;프로세스&amp;nbsp;수&amp;nbsp;-&amp;nbsp;1)&amp;nbsp;이하의&amp;nbsp;값을&amp;nbsp;가집니다.&lt;br /&gt;priorities의&amp;nbsp;가장&amp;nbsp;앞에&amp;nbsp;있으면&amp;nbsp;0,&amp;nbsp;두&amp;nbsp;번째에&amp;nbsp;있으면&amp;nbsp;1&amp;nbsp;&amp;hellip;&amp;nbsp;과&amp;nbsp;같이&amp;nbsp;표현합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;입출력&amp;nbsp;예&lt;/b&gt;&lt;br /&gt;priorities location return&lt;br /&gt;[2,&amp;nbsp;1,&amp;nbsp;3,&amp;nbsp;2] 2 1&lt;br /&gt;[1,&amp;nbsp;1,&amp;nbsp;9,&amp;nbsp;1,&amp;nbsp;1,&amp;nbsp;1] 0 5&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;입출력&amp;nbsp;예&amp;nbsp;설명&lt;/b&gt;&lt;br /&gt;예제&amp;nbsp;#1&lt;br /&gt;&lt;br /&gt;문제에&amp;nbsp;나온&amp;nbsp;예와&amp;nbsp;같습니다.&lt;br /&gt;&lt;br /&gt;예제&amp;nbsp;#2&lt;br /&gt;&lt;br /&gt;6개의&amp;nbsp;프로세스&amp;nbsp;[A,&amp;nbsp;B,&amp;nbsp;C,&amp;nbsp;D,&amp;nbsp;E,&amp;nbsp;F]가&amp;nbsp;대기&amp;nbsp;큐에&amp;nbsp;있고&amp;nbsp;중요도가&amp;nbsp;[1,&amp;nbsp;1,&amp;nbsp;9,&amp;nbsp;1,&amp;nbsp;1,&amp;nbsp;1]&amp;nbsp;이므로&amp;nbsp;[C,&amp;nbsp;D,&amp;nbsp;E,&amp;nbsp;F,&amp;nbsp;A,&amp;nbsp;B]&amp;nbsp;순으로&amp;nbsp;실행됩니다.&amp;nbsp;따라서&amp;nbsp;A는&amp;nbsp;5번째로&amp;nbsp;실행됩니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;접근방법&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;알고리즘 문제가 별로 생각할 게 많이 없거나 아니면 너무 많을 때 아니면 문제를 보고 바로 풀어보는 것보다 어떻게 풀지 머릿속으로 계획을 하고 푸는 편이 효율적이다. 이 문제를 보고 사실 그렇게 많은 생각이 필요하진 않았다. 리스트 앞쪽부터 하나씩 빼면서 그게 제일 큰 값이면 없애버리고(?) 1을 위로 카운트해주고 그렇지 않으면 그냥 뒤에다가 붙여주면 되는 것,, 그리고 그 카운트한 값을 리턴하면 되는 문제 같았다.&amp;nbsp; 간단해서 직감적으로 아 이건 뭔가 막상 해보면 안 되겠군 느꼈다..ㅋ&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;문제풀이&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;우선 나의 첫 번째 풀이&lt;/p&gt;
&lt;pre id=&quot;code_1684212395595&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(priorities):
    dq = deque(priorities)
    answer = 0
    
    while dq:
        value = dq.popleft()
        
        if value == max(dq):
            answer += 1
            
        else:
            dq.append(value)
    
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;ValueError: max() arg is an empty sequencen&amp;nbsp;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오류떴어욤 max() 함수를 사용할 때 빈 시퀀스에 대해서는 ValueError가 발생한다고 하네요,,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;while문 마지막에 value로 인해 dq가 빈 배열이 돼서 오류가 뜨는 듯 그래서 고쳐보기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1684212572136&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(priorities, location):
    dq = deque(priorities)
    answer = 0
    
    while dq:
        value = dq.popleft()
        
        if not dq: 
            answer += 1
            break
        
        if value == max(dq):
            answer += 1
        else:
            dq.append(value)
    
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 if문 추가해줘서 dq가 비게 되면 max 구할 필요없이 멈추게 해주긔&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇지만 시간초과~&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;실행 시간이 10.0초를 초과하여 실행이 중단되었습니다. 실행 시간이 더 짧은 다른 방법을 찾아보세요.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예,,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러고보니 주어진 location을 사용 안 했네요 location 사용해서 시간 좀 줄여보겠음.&lt;/p&gt;
&lt;pre id=&quot;code_1684213040091&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(priorities, location):
    dq=deque(priorities)
    answer = 0
    while dq:
        value=dq.popleft()
        if value==max(dq):
            answer+=1
            if location==0:
                break
            else:
                location-=1
           
        else:
            dq.append(value)
            if location==0:
                location=len(dq)-1
            else:
                location-=1
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;location은 dq에서 몇 번째로 실행되는 프로세스인지 알기 원하는 값의 자리이다. 앞의 값이 사라질 때 마다 그 원하는 값은 앞으로 한칸씩 이동할 것이고 그럴 때마다 -1씩 해줬다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러다보면 원하는 값이 제일 앞에(location==0) 올 것이고 그게 max라면 더 이상 구할 필요가 없으니 브레이크 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 그게 max가 아니라면 뒤로 보내야하니 location=len(dq)-1이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 왜 시간초과,, 뭐가 문제야 say something,,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;난 더이상 시간초과를 해결할 수가 없어서 지피티한테 물어봤다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아~ 진짜~ 지피티한테 의존하기 싫었는데 말이야&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-05-16 오후 2.13.11.png&quot; data-origin-width=&quot;1468&quot; data-origin-height=&quot;408&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwWMna/btsf6EOnRny/2o70ySkqcMgRwI9PGEvBYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwWMna/btsf6EOnRny/2o70ySkqcMgRwI9PGEvBYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwWMna/btsf6EOnRny/2o70ySkqcMgRwI9PGEvBYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwWMna%2Fbtsf6EOnRny%2F2o70ySkqcMgRwI9PGEvBYK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1468&quot; height=&quot;408&quot; data-filename=&quot;스크린샷 2023-05-16 오후 2.13.11.png&quot; data-origin-width=&quot;1468&quot; data-origin-height=&quot;408&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다고 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1684214189908&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(priorities, location):
    dq=deque(priorities)
    answer = 0
    maxdq= max(dq)
    while dq:
        value=dq.popleft()
        if value==maxdq:
            answer+=1
            if location==0:
                break
            else:
                location-=1
            maxdq = max(dq)
        else:
            dq.append(value)
            if location==0:
                location=len(dq)-1
            else:
                location-=1
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-05-16 오후 2.16.50.png&quot; data-origin-width=&quot;810&quot; data-origin-height=&quot;1350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nTA3C/btsf6DPwAr4/fuhvDagOvrVoRy1bYWzpKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nTA3C/btsf6DPwAr4/fuhvDagOvrVoRy1bYWzpKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nTA3C/btsf6DPwAr4/fuhvDagOvrVoRy1bYWzpKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnTA3C%2Fbtsf6DPwAr4%2FfuhvDagOvrVoRy1bYWzpKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;457&quot; height=&quot;762&quot; data-filename=&quot;스크린샷 2023-05-16 오후 2.16.50.png&quot; data-origin-width=&quot;810&quot; data-origin-height=&quot;1350&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;통과~&lt;/p&gt;</description>
      <author>Yoozin</author>
      <guid isPermaLink="true">https://yoozin.tistory.com/11</guid>
      <comments>https://yoozin.tistory.com/11#entry11comment</comments>
      <pubDate>Tue, 16 May 2023 14:17:19 +0900</pubDate>
    </item>
    <item>
      <title>전화번호 목록</title>
      <link>https://yoozin.tistory.com/10</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제&amp;nbsp;설명&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;전화번호부에&amp;nbsp;적힌&amp;nbsp;전화번호&amp;nbsp;중,&amp;nbsp;한&amp;nbsp;번호가&amp;nbsp;다른&amp;nbsp;번호의&amp;nbsp;접두어인&amp;nbsp;경우가&amp;nbsp;있는지&amp;nbsp;확인하려&amp;nbsp;합니다.&lt;br /&gt;전화번호가&amp;nbsp;다음과&amp;nbsp;같을&amp;nbsp;경우,&amp;nbsp;구조대&amp;nbsp;전화번호는&amp;nbsp;영석이의&amp;nbsp;전화번호의&amp;nbsp;접두사입니다.&lt;br /&gt;구조대&amp;nbsp;:&amp;nbsp;119&lt;br /&gt;박준영&amp;nbsp;:&amp;nbsp;97&amp;nbsp;674&amp;nbsp;223&lt;br /&gt;지영석&amp;nbsp;:&amp;nbsp;11&amp;nbsp;9552&amp;nbsp;4421&lt;br /&gt;전화번호부에&amp;nbsp;적힌&amp;nbsp;전화번호를&amp;nbsp;담은&amp;nbsp;배열&amp;nbsp;phone_book&amp;nbsp;이&amp;nbsp;solution&amp;nbsp;함수의&amp;nbsp;매개변수로&amp;nbsp;주어질&amp;nbsp;때,&amp;nbsp;어떤&amp;nbsp;번호가&amp;nbsp;다른&amp;nbsp;번호의&amp;nbsp;접두어인&amp;nbsp;경우가&amp;nbsp;있으면&amp;nbsp;false를&amp;nbsp;그렇지&amp;nbsp;않으면&amp;nbsp;true를&amp;nbsp;return&amp;nbsp;하도록&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;작성해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;제한&amp;nbsp;사항&lt;/b&gt;&lt;br /&gt;phone_book의&amp;nbsp;길이는&amp;nbsp;1&amp;nbsp;이상&amp;nbsp;1,000,000&amp;nbsp;이하입니다.&lt;br /&gt;각&amp;nbsp;전화번호의&amp;nbsp;길이는&amp;nbsp;1&amp;nbsp;이상&amp;nbsp;20&amp;nbsp;이하입니다.&lt;br /&gt;같은&amp;nbsp;전화번호가&amp;nbsp;중복해서&amp;nbsp;들어있지&amp;nbsp;않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;입출력&amp;nbsp;예제&lt;/b&gt;&lt;br /&gt;phone_book return&lt;br /&gt;[&quot;119&quot;,&amp;nbsp;&quot;97674223&quot;,&amp;nbsp;&quot;1195524421&quot;] false&lt;br /&gt;[&quot;123&quot;,&quot;456&quot;,&quot;789&quot;] true&lt;br /&gt;[&quot;12&quot;,&quot;123&quot;,&quot;1235&quot;,&quot;567&quot;,&quot;88&quot;] false&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;입출력&amp;nbsp;예&amp;nbsp;설명&lt;/b&gt;&lt;br /&gt;입출력&amp;nbsp;예&amp;nbsp;#1&lt;br /&gt;앞에서&amp;nbsp;설명한&amp;nbsp;예와&amp;nbsp;같습니다.&lt;br /&gt;입출력&amp;nbsp;예&amp;nbsp;#2&lt;br /&gt;한&amp;nbsp;번호가&amp;nbsp;다른&amp;nbsp;번호의&amp;nbsp;접두사인&amp;nbsp;경우가&amp;nbsp;없으므로,&amp;nbsp;답은&amp;nbsp;true입니다.&lt;br /&gt;입출력&amp;nbsp;예&amp;nbsp;#3&lt;br /&gt;첫&amp;nbsp;번째&amp;nbsp;전화번호,&amp;nbsp;&amp;ldquo;12&amp;rdquo;가&amp;nbsp;두&amp;nbsp;번째&amp;nbsp;전화번호&amp;nbsp;&amp;ldquo;123&amp;rdquo;의&amp;nbsp;접두사입니다.&amp;nbsp;따라서&amp;nbsp;답은&amp;nbsp;false입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;문제풀이&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;첫 번째 코드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1683869858609&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(phone_book):
    answer = True
    for i in range(len(phone_book)):
        for j in range(len(phone_book)):
            if i!=j:
                if phone_book[i] == phone_book[j][:len(phone_book[i])]:
                    answer = False
                    return answer
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전화번호부 리스트를 이중포문으로 돌려서 다 탐색하긔 ,,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통은 1,2,3,4가 있다고 하면 1,2와 2,1은 같은 것으로 취급해서 한 번만 탐색하도록 하지만 여기서는 1에 접두어가 2가 되는 거랑 2에 접두어가 1이 되는 거랑 다른 문제이기 때문에 정말 모든 경우를 다 탐색해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 이중포문 플러스 if문까지 나오게 됐다는 슬픈 얘기..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if문을 나랑 나를 비교하면 안 돼서 넣어줬어요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저기 phone_book[i] == phone_book[j][:len(phone_book[i])]는 1이 2의 접두어인지 판단하기 위해서 1의 길이만큼만 2를 비교하게 하였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for문 이중으로 쓰는 순간 사실 시간초과를 직감했다. 그리고 결과는 역시..&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-05-12 오후 2.39.34.png&quot; data-origin-width=&quot;1066&quot; data-origin-height=&quot;1680&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SsVOc/btseT1kVbyR/46k7z6fpPYXaokfiSmtx70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SsVOc/btseT1kVbyR/46k7z6fpPYXaokfiSmtx70/img.png&quot; data-alt=&quot;시간초과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SsVOc/btseT1kVbyR/46k7z6fpPYXaokfiSmtx70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSsVOc%2FbtseT1kVbyR%2F46k7z6fpPYXaokfiSmtx70%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;427&quot; height=&quot;673&quot; data-filename=&quot;스크린샷 2023-05-12 오후 2.39.34.png&quot; data-origin-width=&quot;1066&quot; data-origin-height=&quot;1680&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;시간초과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드 결과는 정확하게 나오지만 시간초과,, 그래도 91.7점이면 나쁘지 않네 ㅋ 하고 우선은 넘겨버림~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스터디 하던 중 sort를 쓰면 시간을 아낄 수 있다는 것, 그리고 for문을 이중으로 쓰지 않을 수 있단 것을 깨달아버림.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고칠 수 있을 것만 같은 느낌을 갖고 스터디 끝나자마자 다시 풀어봄&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;두 번째 코드&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1683870103886&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(phone_book):
    answer = True
    phone_book.sort()
    for i in range(len(phone_book)-1):
            if phone_book[i] == phone_book[i+1][:len(phone_book[i])]:
                answer = False
                return answer
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sort쓰니까 옆에 애랑만 비교하면 되고 2가 1의 접두어일 때 정렬로 인해서 1,2로 정렬되기 때문에 2,1 순서는 탐색하지 않아도 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 이렇게 간결해졌고&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-05-12 오후 2.42.29.png&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;1640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cm2qtV/btse4mobOLh/QhHtrAl7pcWRwUtwg806DK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cm2qtV/btse4mobOLh/QhHtrAl7pcWRwUtwg806DK/img.png&quot; data-alt=&quot;통과!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cm2qtV/btse4mobOLh/QhHtrAl7pcWRwUtwg806DK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcm2qtV%2Fbtse4mobOLh%2FQhHtrAl7pcWRwUtwg806DK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;419&quot; height=&quot;629&quot; data-filename=&quot;스크린샷 2023-05-12 오후 2.42.29.png&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;1640&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;통과!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sort사용해서 시간초과 해결하고 통과~!&lt;/p&gt;</description>
      <category>알고리즘/해시</category>
      <category>알고리즘</category>
      <category>전화번호목록</category>
      <category>파이썬</category>
      <category>프로그래머스</category>
      <category>해시</category>
      <author>Yoozin</author>
      <guid isPermaLink="true">https://yoozin.tistory.com/10</guid>
      <comments>https://yoozin.tistory.com/10#entry10comment</comments>
      <pubDate>Fri, 12 May 2023 14:55:20 +0900</pubDate>
    </item>
    <item>
      <title>폰켓몬</title>
      <link>https://yoozin.tistory.com/9</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제&amp;nbsp;설명&lt;/b&gt;&lt;br /&gt;당신은&amp;nbsp;폰켓몬을&amp;nbsp;잡기&amp;nbsp;위한&amp;nbsp;오랜&amp;nbsp;여행&amp;nbsp;끝에,&amp;nbsp;홍&amp;nbsp;박사님의&amp;nbsp;연구실에&amp;nbsp;도착했습니다.&amp;nbsp;홍&amp;nbsp;박사님은&amp;nbsp;당신에게&amp;nbsp;자신의&amp;nbsp;연구실에&amp;nbsp;있는&amp;nbsp;총&amp;nbsp;N&amp;nbsp;마리의&amp;nbsp;폰켓몬&amp;nbsp;중에서&amp;nbsp;N/2마리를&amp;nbsp;가져가도&amp;nbsp;좋다고&amp;nbsp;했습니다.&lt;br /&gt;홍&amp;nbsp;박사님&amp;nbsp;연구실의&amp;nbsp;폰켓몬은&amp;nbsp;종류에&amp;nbsp;따라&amp;nbsp;번호를&amp;nbsp;붙여&amp;nbsp;구분합니다.&amp;nbsp;따라서&amp;nbsp;같은&amp;nbsp;종류의&amp;nbsp;폰켓몬은&amp;nbsp;같은&amp;nbsp;번호를&amp;nbsp;가지고&amp;nbsp;있습니다.&amp;nbsp;예를&amp;nbsp;들어&amp;nbsp;연구실에&amp;nbsp;총&amp;nbsp;4마리의&amp;nbsp;폰켓몬이&amp;nbsp;있고,&amp;nbsp;각&amp;nbsp;폰켓몬의&amp;nbsp;종류&amp;nbsp;번호가&amp;nbsp;[3번,&amp;nbsp;1번,&amp;nbsp;2번,&amp;nbsp;3번]이라면&amp;nbsp;이는&amp;nbsp;3번&amp;nbsp;폰켓몬&amp;nbsp;두&amp;nbsp;마리,&amp;nbsp;1번&amp;nbsp;폰켓몬&amp;nbsp;한&amp;nbsp;마리,&amp;nbsp;2번&amp;nbsp;폰켓몬&amp;nbsp;한&amp;nbsp;마리가&amp;nbsp;있음을&amp;nbsp;나타냅니다.&amp;nbsp;이때,&amp;nbsp;4마리의&amp;nbsp;폰켓몬&amp;nbsp;중&amp;nbsp;2마리를&amp;nbsp;고르는&amp;nbsp;방법은&amp;nbsp;다음과&amp;nbsp;같이&amp;nbsp;6가지가&amp;nbsp;있습니다.&lt;br /&gt;&lt;br /&gt;첫&amp;nbsp;번째(3번),&amp;nbsp;두&amp;nbsp;번째(1번)&amp;nbsp;폰켓몬을&amp;nbsp;선택&lt;br /&gt;첫&amp;nbsp;번째(3번),&amp;nbsp;세&amp;nbsp;번째(2번)&amp;nbsp;폰켓몬을&amp;nbsp;선택&lt;br /&gt;첫&amp;nbsp;번째(3번),&amp;nbsp;네&amp;nbsp;번째(3번)&amp;nbsp;폰켓몬을&amp;nbsp;선택&lt;br /&gt;두&amp;nbsp;번째(1번),&amp;nbsp;세&amp;nbsp;번째(2번)&amp;nbsp;폰켓몬을&amp;nbsp;선택&lt;br /&gt;두&amp;nbsp;번째(1번),&amp;nbsp;네&amp;nbsp;번째(3번)&amp;nbsp;폰켓몬을&amp;nbsp;선택&lt;br /&gt;세&amp;nbsp;번째(2번),&amp;nbsp;네&amp;nbsp;번째(3번)&amp;nbsp;폰켓몬을&amp;nbsp;선택&lt;br /&gt;이때,&amp;nbsp;첫&amp;nbsp;번째(3번)&amp;nbsp;폰켓몬과&amp;nbsp;네&amp;nbsp;번째(3번)&amp;nbsp;폰켓몬을&amp;nbsp;선택하는&amp;nbsp;방법은&amp;nbsp;한&amp;nbsp;종류(3번&amp;nbsp;폰켓몬&amp;nbsp;두&amp;nbsp;마리)의&amp;nbsp;폰켓몬만&amp;nbsp;가질&amp;nbsp;수&amp;nbsp;있지만,&amp;nbsp;다른&amp;nbsp;방법들은&amp;nbsp;모두&amp;nbsp;두&amp;nbsp;종류의&amp;nbsp;폰켓몬을&amp;nbsp;가질&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;따라서&amp;nbsp;위&amp;nbsp;예시에서&amp;nbsp;가질&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;폰켓몬&amp;nbsp;종류&amp;nbsp;수의&amp;nbsp;최댓값은&amp;nbsp;2가&amp;nbsp;됩니다.&lt;br /&gt;당신은&amp;nbsp;최대한&amp;nbsp;다양한&amp;nbsp;종류의&amp;nbsp;폰켓몬을&amp;nbsp;가지길&amp;nbsp;원하기&amp;nbsp;때문에,&amp;nbsp;최대한&amp;nbsp;많은&amp;nbsp;종류의&amp;nbsp;폰켓몬을&amp;nbsp;포함해서&amp;nbsp;N/2마리를&amp;nbsp;선택하려&amp;nbsp;합니다.&amp;nbsp;N마리&amp;nbsp;폰켓몬의&amp;nbsp;종류&amp;nbsp;번호가&amp;nbsp;담긴&amp;nbsp;배열&amp;nbsp;nums가&amp;nbsp;매개변수로&amp;nbsp;주어질&amp;nbsp;때,&amp;nbsp;N/2마리의&amp;nbsp;폰켓몬을&amp;nbsp;선택하는&amp;nbsp;방법&amp;nbsp;중,&amp;nbsp;가장&amp;nbsp;많은&amp;nbsp;종류의&amp;nbsp;폰켓몬을&amp;nbsp;선택하는&amp;nbsp;방법을&amp;nbsp;찾아,&amp;nbsp;그때의&amp;nbsp;폰켓몬&amp;nbsp;종류&amp;nbsp;번호의&amp;nbsp;개수를&amp;nbsp;return&amp;nbsp;하도록&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;완성해주세요.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;제한사항&lt;/b&gt;&lt;br /&gt;nums는&amp;nbsp;폰켓몬의&amp;nbsp;종류&amp;nbsp;번호가&amp;nbsp;담긴&amp;nbsp;1차원&amp;nbsp;배열입니다.&lt;br /&gt;nums의&amp;nbsp;길이(N)는&amp;nbsp;1&amp;nbsp;이상&amp;nbsp;10,000&amp;nbsp;이하의&amp;nbsp;자연수이며,&amp;nbsp;항상&amp;nbsp;짝수로&amp;nbsp;주어집니다.&lt;br /&gt;폰켓몬의&amp;nbsp;종류&amp;nbsp;번호는&amp;nbsp;1&amp;nbsp;이상&amp;nbsp;200,000&amp;nbsp;이하의&amp;nbsp;자연수로&amp;nbsp;나타냅니다.&lt;br /&gt;가장&amp;nbsp;많은&amp;nbsp;종류의&amp;nbsp;폰켓몬을&amp;nbsp;선택하는&amp;nbsp;방법이&amp;nbsp;여러&amp;nbsp;가지인&amp;nbsp;경우에도,&amp;nbsp;선택할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;폰켓몬&amp;nbsp;종류&amp;nbsp;개수의&amp;nbsp;최댓값&amp;nbsp;하나만&amp;nbsp;return&amp;nbsp;하면&amp;nbsp;됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;입출력&amp;nbsp;예&lt;/b&gt;&lt;br /&gt;nums result&lt;br /&gt;[3,1,2,3] 2&lt;br /&gt;[3,3,3,2,2,4] 3&lt;br /&gt;[3,3,3,2,2,2] 2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;입출력 예 설명&lt;/b&gt;&lt;br /&gt;입출력&amp;nbsp;예&amp;nbsp;#1&lt;br /&gt;문제의&amp;nbsp;예시와&amp;nbsp;같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입출력&amp;nbsp;예&amp;nbsp;#2&lt;br /&gt;6마리의&amp;nbsp;폰켓몬이&amp;nbsp;있으므로,&amp;nbsp;3마리의&amp;nbsp;폰켓몬을&amp;nbsp;골라야&amp;nbsp;합니다.&lt;br /&gt;가장&amp;nbsp;많은&amp;nbsp;종류의&amp;nbsp;폰켓몬을&amp;nbsp;고르기&amp;nbsp;위해서는&amp;nbsp;3번&amp;nbsp;폰켓몬&amp;nbsp;한&amp;nbsp;마리,&amp;nbsp;2번&amp;nbsp;폰켓몬&amp;nbsp;한&amp;nbsp;마리,&amp;nbsp;4번&amp;nbsp;폰켓몬&amp;nbsp;한&amp;nbsp;마리를&amp;nbsp;고르면&amp;nbsp;되며,&amp;nbsp;따라서&amp;nbsp;3을&amp;nbsp;return&amp;nbsp;합니다.&lt;br /&gt;&lt;br /&gt;입출력&amp;nbsp;예&amp;nbsp;#3&lt;br /&gt;6마리의&amp;nbsp;폰켓몬이&amp;nbsp;있으므로,&amp;nbsp;3마리의&amp;nbsp;폰켓몬을&amp;nbsp;골라야&amp;nbsp;합니다.&lt;br /&gt;가장&amp;nbsp;많은&amp;nbsp;종류의&amp;nbsp;폰켓몬을&amp;nbsp;고르기&amp;nbsp;위해서는&amp;nbsp;3번&amp;nbsp;폰켓몬&amp;nbsp;한&amp;nbsp;마리와&amp;nbsp;2번&amp;nbsp;폰켓몬&amp;nbsp;두&amp;nbsp;마리를&amp;nbsp;고르거나,&amp;nbsp;혹은&amp;nbsp;3번&amp;nbsp;폰켓몬&amp;nbsp;두&amp;nbsp;마리와&amp;nbsp;2번&amp;nbsp;폰켓몬&amp;nbsp;한&amp;nbsp;마리를&amp;nbsp;고르면&amp;nbsp;됩니다.&amp;nbsp;따라서&amp;nbsp;최대&amp;nbsp;고를&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;폰켓몬&amp;nbsp;종류의&amp;nbsp;수는&amp;nbsp;2입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;문제풀이&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입출력 예를 보면 딱 어떻게 풀어야할지 생각이 났다. 사실 어떤 문제라도 대충 생각은 난다. 막상 풀었을 때 생각대로 답이 나오냐 안 나오냐의 차이지,, 그리고 문제 이해는 언제나 오래걸림,,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제를 이해해 보자면 폰켓몬(포켓몬 아님.) 여러 개 중에 개수/2 만큼 가질 수 있다. 가질 수 있는 가짓수 중에 가장 큰 게 결과값~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;봤을 때 결과값이 두 분류로 나뉜다는 걸 깨달았당당구리&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 종류 개수가 곧 결과값이거나 아니면 폰켓몬개수/2가 결과값이거나!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜냐면 종류 개수가 여러 개여도 어차피 내가 가질 수 있는 개수는 (전체 개수/2)가 최대이기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 반대로 개수가 아무리 많아도 종류 개수가 적으면 가질 수 있는 경우의 수는 그 종류의 개수만큼으로 한정적이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 set을 써서 중복되는 걸 없애줬다.(남은 개수가 곧 종류의 개수)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;setnums의 개수(종류 수)와 nums/2의 개수(전체 개수/2) 중 작은 값이 곧 리턴값이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;정답코드&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1683862041571&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(nums):
    setnums= list(set(nums))
    answer= min(len(setnums),len(nums)/2)
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 해시 문제들을 풀어보니&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;level1은 그래도 잘 풀리고 level2는 코드 실행하면 통과를 하는데 제출하면 테스트 케이스를 반 정도만 통과하거나 시간초과가 나거나 해서 100점이 잘 안 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그래머스는 잘 풀지 않아서 몰랐는데 여기서 내 실력은 level1~level2 사이 어딘가인가보다^^;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아 그리고 level3은 ,, &amp;lt;level3: 못 풀게~&amp;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;</description>
      <category>알고리즘/해시</category>
      <category>알고리즘</category>
      <category>파이썬</category>
      <category>폰켓몬</category>
      <category>프로그래머스</category>
      <category>해시</category>
      <author>Yoozin</author>
      <guid isPermaLink="true">https://yoozin.tistory.com/9</guid>
      <comments>https://yoozin.tistory.com/9#entry9comment</comments>
      <pubDate>Fri, 12 May 2023 12:31:41 +0900</pubDate>
    </item>
    <item>
      <title>완주하지 못한 선수</title>
      <link>https://yoozin.tistory.com/8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;문제&amp;nbsp;설명&lt;/span&gt;&lt;br /&gt;수많은&amp;nbsp;마라톤&amp;nbsp;선수들이&amp;nbsp;마라톤에&amp;nbsp;참여하였습니다.&amp;nbsp;단&amp;nbsp;한&amp;nbsp;명의&amp;nbsp;선수를&amp;nbsp;제외하고는&amp;nbsp;모든&amp;nbsp;선수가&amp;nbsp;마라톤을&amp;nbsp;완주하였습니다.&lt;br /&gt;&lt;br /&gt;마라톤에&amp;nbsp;참여한&amp;nbsp;선수들의&amp;nbsp;이름이&amp;nbsp;담긴&amp;nbsp;배열&amp;nbsp;participant와&amp;nbsp;완주한&amp;nbsp;선수들의&amp;nbsp;이름이&amp;nbsp;담긴&amp;nbsp;배열&amp;nbsp;completion이&amp;nbsp;주어질&amp;nbsp;때,&amp;nbsp;완주하지&amp;nbsp;못한&amp;nbsp;선수의&amp;nbsp;이름을&amp;nbsp;return&amp;nbsp;하도록&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;작성해주세요.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;제한사항&lt;/span&gt;&lt;br /&gt;마라톤&amp;nbsp;경기에&amp;nbsp;참여한&amp;nbsp;선수의&amp;nbsp;수는&amp;nbsp;1명&amp;nbsp;이상&amp;nbsp;100,000명&amp;nbsp;이하입니다.&lt;br /&gt;completion의&amp;nbsp;길이는&amp;nbsp;participant의&amp;nbsp;길이보다&amp;nbsp;1&amp;nbsp;작습니다.&lt;br /&gt;참가자의&amp;nbsp;이름은&amp;nbsp;1개&amp;nbsp;이상&amp;nbsp;20개&amp;nbsp;이하의&amp;nbsp;알파벳&amp;nbsp;소문자로&amp;nbsp;이루어져&amp;nbsp;있습니다.&lt;br /&gt;참가자&amp;nbsp;중에는&amp;nbsp;동명이인이&amp;nbsp;있을&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;입출력&amp;nbsp;예&lt;/span&gt;&lt;br /&gt;participant completion return&lt;br /&gt;[&quot;leo&quot;,&amp;nbsp;&quot;kiki&quot;,&amp;nbsp;&quot;eden&quot;] [&quot;eden&quot;,&amp;nbsp;&quot;kiki&quot;] &quot;leo&quot;&lt;br /&gt;[&quot;marina&quot;,&amp;nbsp;&quot;josipa&quot;,&amp;nbsp;&quot;nikola&quot;,&amp;nbsp;&quot;vinko&quot;,&amp;nbsp;&quot;filipa&quot;] [&quot;josipa&quot;,&amp;nbsp;&quot;filipa&quot;,&amp;nbsp;&quot;marina&quot;,&amp;nbsp;&quot;nikola&quot;] &quot;vinko&quot;&lt;br /&gt;[&quot;mislav&quot;,&amp;nbsp;&quot;stanko&quot;,&amp;nbsp;&quot;mislav&quot;,&amp;nbsp;&quot;ana&quot;] [&quot;stanko&quot;,&amp;nbsp;&quot;ana&quot;,&amp;nbsp;&quot;mislav&quot;] &quot;mislav&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;입출력&amp;nbsp;예&amp;nbsp;설명&lt;/span&gt;&lt;br /&gt;예제&amp;nbsp;#1&lt;br /&gt;&quot;leo&quot;는&amp;nbsp;참여자&amp;nbsp;명단에는&amp;nbsp;있지만,&amp;nbsp;완주자&amp;nbsp;명단에는&amp;nbsp;없기&amp;nbsp;때문에&amp;nbsp;완주하지&amp;nbsp;못했습니다.&lt;br /&gt;&lt;br /&gt;예제&amp;nbsp;#2&lt;br /&gt;&quot;vinko&quot;는&amp;nbsp;참여자&amp;nbsp;명단에는&amp;nbsp;있지만,&amp;nbsp;완주자&amp;nbsp;명단에는&amp;nbsp;없기&amp;nbsp;때문에&amp;nbsp;완주하지&amp;nbsp;못했습니다.&lt;br /&gt;&lt;br /&gt;예제&amp;nbsp;#3&lt;br /&gt;&quot;mislav&quot;는&amp;nbsp;참여자&amp;nbsp;명단에는&amp;nbsp;두&amp;nbsp;명이&amp;nbsp;있지만,&amp;nbsp;완주자&amp;nbsp;명단에는&amp;nbsp;한&amp;nbsp;명밖에&amp;nbsp;없기&amp;nbsp;때문에&amp;nbsp;한명은&amp;nbsp;완주하지&amp;nbsp;못했습니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;문제풀이&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제는 이와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에 문제보고 '엇 뭐야 쉽잖아?' 싶었다.. 그렇다 문제 자체는 그닥 어렵지 않았다..하즤만...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 내가 처음에 푼 답안이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;첫 번째 코드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1683803293927&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(participant, completion):
    for n in range(len(participant)):
        for i in participant: 
            if i in completion:
                participant.remove(i)
                completion.remove(i)
    return  participant[0]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참가자 리스트 개수만큼 for문을 돌린다. -&amp;gt; 참가자 리스트 안을 한 명 한 명 탐방한다. -&amp;gt; 해당 사람이 완주선수 리스트 안에 있으면 참가자리스트랑 완주선수리스트에서 제거시켜 준다. (여기서! 완주선수 리스트까지 굳이 없애 준 이유는 위에 예제 3번의 예외처리를 위해서다. 동명이인이 있는 경우 완주선수 리스트에서 참가자 리스트에 해당 사람을 빼주지 않으면 다음에 동명이인이 나올 때 또 if문에 처리되어 참가자리스트에서 빼줘 버리기 때문에 한 번 빼면 못 빼도록 참가자 리스트에서도 빼줬다.) -&amp;gt; 겹치는 사람들을 다 빼고 마지막에 남은 참가자가 리턴값이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행결과는 맞게 나왔다. 하지만 시간초과가 떴다. 아. 나&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;두 번째 코드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1683803569067&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(participant, completion):
    for i in completion:
        participant.remove(i)
    return participant[0]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생각해 보니 for문을 굳이 이중으로 안 하고 if문을 안 써도 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;완주자 리스트를 돌리면서 그 완주자랑 겹치는 사람을 참가자 리스트에서 빼주면 결국 또 마지막 완주하지 못한 사람만 남고 그 값을 리턴 시켜주면 되는 거였다. 정말 단순한 코드로 바꿔버리기~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아니 근데 왜 또 시간초과인 건데~~ 리스트를 끝까지 다 탐방해 버려서 그런 거냐,,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 간단하게 바꿨는데도 안 되는 거면 다른 방법을 써야겠다고 느껴버렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;set도입. &lt;s&gt;tmi지만 나는 중1 때 집합을 못했어서 아직도 집합이 싫음&lt;/s&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;b&gt;세 번째 코드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1683803906672&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(participant, completion):
    parset=set(participant)
    comset=set(completion)
    answer=parset-comset
    
    return list(answer)[0]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리스트들을 집합으로 만들어준 다음 참가자 집합에서 완주자 집합을 빼줬다. 근데 문제는 그렇게 하니까 예제 3번 예외처리가 어렵게 됐어..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 방법..^^ &lt;i&gt;&lt;b&gt;최종답안!!&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1683804510399&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(participant, completion):
    participant.sort()
    completion.sort()
   
    for i in range(len(completion)):
        if participant[i] != completion[i]:
            return participant[i]
    
    return participant[-1]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참가자 리스트랑 완주자 리스트를 정렬시켜 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 for문을 완주자 리스트 길이만큼 돌려 돌려~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 참가자 리스트의 n번째랑 완주자 리스트의 n번째가 다르면 그 값을 리턴해준다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아까 두 리스트를 정렬시켜 줬으니 다른 값이 나왔다는 건 곧 둘의 겹치지 않는 그 한 사람을 의미하니..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비교했을 때 다 같다고 for문이 돌아가서 끝나면 참가자 리스트의 마지막 값이 완주 못한 사람일 테니 participant [-1]을 리턴해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 당연한 얘기지만 completion의 길이만큼 돌려준 이유는 participant리스트 길이가 1만큼 더 길기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;둘이 비교하는 과정에서 마지막엔 범위밖이 되어버림,,,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇게 결국 정답이 뜨고~ 많은 시도 끝에 성공&lt;/p&gt;</description>
      <category>알고리즘/해시</category>
      <category>그사람이내가되지않길</category>
      <category>알고리즘</category>
      <category>완주하지못한사람</category>
      <category>파이썬</category>
      <category>프로그래머스</category>
      <category>해시</category>
      <author>Yoozin</author>
      <guid isPermaLink="true">https://yoozin.tistory.com/8</guid>
      <comments>https://yoozin.tistory.com/8#entry8comment</comments>
      <pubDate>Thu, 11 May 2023 20:38:45 +0900</pubDate>
    </item>
    <item>
      <title>17204번: 죽음의 게임(python)</title>
      <link>https://yoozin.tistory.com/7</link>
      <description>&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;중앙대학교 소프트웨어대학 새내기들을 맞이하게 된 17학번 김영기는 두 학번이라는 차이를 극복하기 위해 새내기들과&amp;nbsp;친해지려고 노력하고 있다. 그 노력 중 하나는 바로 새내기들과의 술자리에 참여하는 것이다. 그러나 혼자 가기에 민망했던 영기는 동기 보성이를 꼬셔 같이 술자리에 참석했다. 새내기들과 같이 술을 마시게 된 영기와 보성이는 분위기가 가라 앉을&amp;nbsp;때쯤&amp;nbsp;The Game of Death라고 불리는 죽음의 술게임을 제안한다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;죽음의 게임의 룰은 간단하다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;게임에 참여하는 N명의 사람들은 원탁에 둘러앉게 된다. 게임을 시작하는 사람은 0번, 그 오른쪽 사람은 1번, 그 오른쪽은 2번, N-1번의 오른쪽 사람은 다시 0번이 된다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;0번이 &quot;신난다! 아싸 재미난다! 아싸 더 게임 오브 데! 스!&quot; 라고 외침과 동시에, 모든 사람들은&amp;nbsp;각각 테이블에 둘러 앉은 사람들 중 한 명을 지목한다. 그리고 나서 0번은 임의의 양의 정수 M을 외친다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;그 다음,&amp;nbsp;0번은 &quot;1&quot;이라고 말한다. 이때 &quot;1&quot;이라고 말한&amp;nbsp;사람이 지목한 사람은&amp;nbsp;&quot;2&quot;라고 말하고, &quot;2&quot;라고 말한 사람이 지목한 사람은 &quot;3&quot;이라고 말하고,&amp;nbsp;같은 방식으로 반복해&amp;nbsp;M까지 말하게 된다. 이때 마지막으로 M이라고 말한 사람이 지목한 사람은 벌주를 마시게 된다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;새내기에게 벌주를 마시게 하기에는 죄책감이 들었던 영기는 동기인 보성이를 공격하기로 결심했다. 게임 참여자들간에&amp;nbsp;지목을 완료한 상태가 주어질때, 보성이가 벌주를 마시기 위해 영기가 불러야 하는&amp;nbsp;가장 작은 양의 정수 M을 보성이 몰래&amp;nbsp;귀띔해 주도록 하자.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;김영기는 게임을 제안하였기에 자연스럽게&amp;nbsp;0번이 된다.&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;첫 번째 줄에 게임에 참여하는 사람의 수 N(3 &amp;le; N &amp;le; 150)과 보성이의 번호 K(1 &amp;le; K&amp;nbsp;&amp;le; N - 1)가&amp;nbsp;공백을 두고 주어진다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;두번째 줄부터 N줄에 걸쳐 i(0 &amp;le; i&amp;nbsp;&amp;le; N - 1)번&amp;nbsp;사람이 지목하는 사람의 번호 ai(0 &amp;le; ai&amp;nbsp;&amp;le; N - 1)가 주어진다. 자기 자신을 지목하는 경우도 존재할&amp;nbsp;수&amp;nbsp;있다.&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;영기가 말해야 하는 가장 작은 양의 정수&amp;nbsp;M을 출력한다. 만약 어떤 방법으로도 보성이가 걸리지 않는다면 -1을 출력한다.&lt;/p&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #585f69; text-align: start;&quot;&gt;예제 입력&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;sample-input-1&quot; class=&quot;basic&quot; style=&quot;background-color: #f7f7f9; color: #333333; text-align: start;&quot;&gt;&lt;code&gt;5 3
1
3
2
1
4&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #585f69; text-align: start;&quot;&gt;예제 출력&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;sample-output-1&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f7f7f9; color: #333333; text-align: start;&quot;&gt;&lt;code&gt;2&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;접근방법 / 문제풀이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제를 보면 0번째 사람이 n번째 번호를 가진 사람을 선택하고 n번째 번호를 가진 사람은 m번째 번호를 가진 사람을 선택하고 이걸 반복하다가 입력값의 오른쪽 번호를 가진 사람이 지목받으면 몇번만에 그 사람이 선택됐는지를 출력하는 문제다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;옛날엔 실버문제만 봐도 덜덜 떨던 나,, 이제 구글링도 없이 혼자 뚝딱 잘 해내는 거 꽤나 기특해 ^^(&lt;s&gt;구글링 필요한 실버문제도 많음&lt;/s&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보자마자 지목받은 사람의 번호를 가진 리스트 인덱스로 이동해야한다는 걸 깨닫고 &amp;lt;newnum=numlist[newnum]&amp;gt; 이 코드를 먼저 생각해 냈다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 또 필요한 게 몇번만에 지목받았는지 count를 셀 필요가 있었다. 그래서 for문을 돌려가며 list를 하나씩 탐색해 그 번호로 이동하면서 count를 1씩 올려주면 되지 않을까 생각하였다. 그러다가 원하는 번호의 사람이 지목받으면 그 count를 출력하고 break를 통해 멈춰줘야 한다고 생각하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고! 우리 스터디에서 알게된 for else문을 사용해 보았다. else는 if에만 쓸 수 있는 줄 알았지만 저번에 은석님이 우연히 for else문을 썼다가 코드가 잘 작동하는 걸 보고 스터디에서 같이 찾아보고 알게 된 for else문!!&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for문이 돌아가다가 break를 만나면 else문으로 빠지지 않고 break를 안 만나면 실행되게 된다. newnum과 num이 다를 때 (다른 사람이 지목받았을 때) if문으로 돌아가다가 newnum과 num이 같을 때(지목받아야 하는 사람이 지목받았을 때) break문을 만나게 되는데 if문만 돌아가다가 for문이 끝나는 경우, 그러니까 지목받아야 하는 사람이 어떤 경우에도 지목받지 못하는 경우에는 break문을 만나지 못하기 때문에 for else로 빠지게 된다. 그렇게 작성한 코드는 아래와 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1682394426725&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;t,num=map(int,input().split())
numlist=[]
for i in range(t):
    a = int(input())
    numlist.append(a)
newnum=0
count=0
for i in range(t):
    if newnum != num:
        newnum=numlist[newnum]
        count+=1
    else:
        print(count)
        break
else:
    print(-1)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메모리: 31256KB&amp;nbsp; 시간: 48ms&lt;/p&gt;</description>
      <category>알고리즘/그래프 탐색</category>
      <category>Python</category>
      <category>백준</category>
      <category>백준17204</category>
      <category>파이썬</category>
      <author>Yoozin</author>
      <guid isPermaLink="true">https://yoozin.tistory.com/7</guid>
      <comments>https://yoozin.tistory.com/7#entry7comment</comments>
      <pubDate>Tue, 25 Apr 2023 12:54:36 +0900</pubDate>
    </item>
    <item>
      <title>HTML 수정해 보기</title>
      <link>https://yoozin.tistory.com/6</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2830&quot; data-origin-height=&quot;1552&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x83OO/btsbBPOaUD1/L6rF6YQGhVvWg1TjctcoN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x83OO/btsbBPOaUD1/L6rF6YQGhVvWg1TjctcoN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x83OO/btsbBPOaUD1/L6rF6YQGhVvWg1TjctcoN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx83OO%2FbtsbBPOaUD1%2FL6rF6YQGhVvWg1TjctcoN1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2830&quot; height=&quot;1552&quot; data-origin-width=&quot;2830&quot; data-origin-height=&quot;1552&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방금 글을 올렸는데 아뉘 다 박스 안에 들어가서 흰색으로 돼서 배경색인 예쁜 보라색이 적용 안 되는 게 꽤나 킹받는군&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 검사로 들어가서 뭐가 문젠지 봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2238&quot; data-origin-height=&quot;1186&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LsqcI/btsbAOhS7Iy/pcrCuWgbDEL9t3EkT7WREk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LsqcI/btsbAOhS7Iy/pcrCuWgbDEL9t3EkT7WREk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LsqcI/btsbAOhS7Iy/pcrCuWgbDEL9t3EkT7WREk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLsqcI%2FbtsbAOhS7Iy%2FpcrCuWgbDEL9t3EkT7WREk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2238&quot; height=&quot;1186&quot; data-origin-width=&quot;2238&quot; data-origin-height=&quot;1186&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다,, 다 같은 div박스에 들어있어서 그랬던 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 문제의 내용들 말고는 div박스 탈출시켜 주기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2186&quot; data-origin-height=&quot;1055&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bS3nWz/btsbEiB3XL1/Rmru6pYkeHmqzKmgfnlDC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bS3nWz/btsbEiB3XL1/Rmru6pYkeHmqzKmgfnlDC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bS3nWz/btsbEiB3XL1/Rmru6pYkeHmqzKmgfnlDC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbS3nWz%2FbtsbEiB3XL1%2FRmru6pYkeHmqzKmgfnlDC0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2186&quot; height=&quot;1055&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2186&quot; data-origin-height=&quot;1055&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;div&amp;gt; 분리시켜주고 안에서도 필요한 친구들은 각각 자신의 &amp;lt;div&amp;gt;를 생성해 줬더니&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2858&quot; data-origin-height=&quot;1564&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k21NP/btsbAPgMfLT/Tyjk5VGBjJmKqV9R2o1841/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k21NP/btsbAPgMfLT/Tyjk5VGBjJmKqV9R2o1841/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k21NP/btsbAPgMfLT/Tyjk5VGBjJmKqV9R2o1841/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk21NP%2FbtsbAPgMfLT%2FTyjk5VGBjJmKqV9R2o1841%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2858&quot; height=&quot;1564&quot; data-origin-width=&quot;2858&quot; data-origin-height=&quot;1564&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2856&quot; data-origin-height=&quot;1566&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kJk79/btsbEmElHqT/KQGe3cBx2QOvnQ7ySSe4GK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kJk79/btsbEmElHqT/KQGe3cBx2QOvnQ7ySSe4GK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kJk79/btsbEmElHqT/KQGe3cBx2QOvnQ7ySSe4GK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkJk79%2FbtsbEmElHqT%2FKQGe3cBx2QOvnQ7ySSe4GK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2856&quot; height=&quot;1566&quot; data-origin-width=&quot;2856&quot; data-origin-height=&quot;1566&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원하는 대로 잘 뜨네요 ~~&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>html</category>
      <author>Yoozin</author>
      <guid isPermaLink="true">https://yoozin.tistory.com/6</guid>
      <comments>https://yoozin.tistory.com/6#entry6comment</comments>
      <pubDate>Fri, 21 Apr 2023 04:11:17 +0900</pubDate>
    </item>
    <item>
      <title>1436번: 영화감독 숌 (python)</title>
      <link>https://yoozin.tistory.com/5</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;브루트포스 문제 가즈아&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;666은 종말을 나타내는 수라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워즈를 만들 때, 스타워즈 1, 스타워즈 2, 스타워즈 3, 스타워즈 4, 스타워즈 5, 스타워즈 6과 같이 이름을 지었고, 피터 잭슨은 반지의 제왕을 만들 때, 반지의 제왕 1, 반지의 제왕 2, 반지의 제왕 3과 같이 영화 제목을 지었다. 하지만 숌은 자신이 조지 루카스와 피터 잭슨을 뛰어넘는다는 것을 보여주기 위해서 영화 제목을 좀 다르게 만들기로 했다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;종말의 수란 어떤 수에 6이 적어도 3개 이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 수는 666이고, 그 다음으로 큰 수는 1666, 2666, 3666, .... 이다. 따라서, 숌은 첫 번째 영화의 제목은 &quot;세상의 종말 666&quot;, 두 번째 영화의 제목은 &quot;세상의 종말 1666&quot;와 같이 이름을 지을 것이다. 일반화해서 생각하면, N번째 영화의 제목은 세상의 종말 (N번째로 작은 종말의 수) 와 같다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;숌이 만든 N번째 영화의 제목에 들어간 수를 출력하는 프로그램을 작성하시오. 숌은 이 시리즈를 항상 차례대로 만들고, 다른 영화는 만들지 않는다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 N이 주어진다. N은 10,000보다 작거나 같은 자연수이다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555; text-align: start;&quot;&gt;첫째 줄에 N번째 영화의 제목에 들어간 수를 출력한다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;예제 입력&amp;nbsp;&lt;/h2&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;pre id=&quot;sample-output-1&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f7f7f9; color: #333333;&quot;&gt;&lt;code&gt;1666&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;예제 출력&amp;nbsp;&lt;/h2&gt;
&lt;pre id=&quot;sample-input-1&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f7f7f9; color: #333333;&quot;&gt;&lt;code&gt;2&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;color: #555555;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제 요약&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력값 n이 주어졌을 때 666들어 간 숫자들 중 n번째로 작은 숫자를 구해라. (&lt;s&gt;오 이렇게 간단한 문제를 저렇게 길게 쓰다니&lt;/s&gt;)&lt;/p&gt;
&lt;h2 style=&quot;color: #555555;&quot; data-ke-size=&quot;size26&quot;&gt;접근방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1 -&amp;gt; 666,&amp;nbsp; &amp;nbsp;2-&amp;gt;1666,&amp;nbsp; &amp;nbsp; 3-&amp;gt;2666,&amp;nbsp; ... , 6-&amp;gt;5666 여기까지만 보고 뭐야 앞에다가 입력값 숫자 중 666 앞에 숫자에 1만 더하면 되는 거 아냐?라는 안일한 생각을 정말 잠깐 했습니다..^^&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인생은 그리 쉽지 않은 것을 잠시 망각하다가 깨닫게 해 준 뒤의 예시들 187-&amp;gt;66666,&amp;nbsp; 500-&amp;gt;166699&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래여 ,, 숫자는 앞에만 추가되는 게 아님니다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇게 코드를 구현해 보았는데 처음에는&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1682012153435&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;n = int(input())
t = 0
k = 666
while t&amp;lt;=n:
    if '666' in str(k):
    	k=int(k)+1
        t=t+1
print(k)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이렇게 구현해 보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대충 while문을 t가 n보다 커지기 전까지 돌린 다음에 k안에 666이 들어있으면 t를 +1해 주는 방식을 생각해서 이렇게 해보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;음 그니깐 t는 t번째로 666이 들어가는 숫자가 되는 것이고 k는 숫자를 키우면서 666이 들어간 숫자를 찾는 변수인 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;차피 666부터 필요하니까 0부터 안 하고 666을 초기값으로 넣어줬다.&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;쨌든 이렇게 구현했을 때 결과는 코드가 멈추질 않아요,, 그렇다,, k랑 t가 다 if 안에 있으니 if 조건이 true가 처음에 안 나오면 아무것도 진행되지 못한다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;깨달음을 얻은 뒤 k를 if문 밖으로 빼줬다.&amp;nbsp; k는 밖에 있어야 하는 게 맞다. 왜냐면 k는 if문 조건, 그니깐 k안에 666이 있지 않아도 계속 +1 시켜주면서 666이 들어가는 숫자가 있는지 확인해 줘야 하니,,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;너무 당연한 소리지만 원래 첫 코드는 생각나는 대로 대충 써본 다음에 코드 돌려가면서 고쳐나가는 거 아니겠냐며 ~ 우리 처음부터 너무 완벽하게 생각하지 않기로 해요,, 뭐든 부딪혀보기..(?)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;밖으로 빼줘도 정답이 안 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이유는 두 가지&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. k를 666부터 시작하면 k가 +1이 되어서 667부터 시작하게 됨 -&amp;gt; k를 665로 변경&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. t가 0이면 안 됨 왜냐면 t는 666이 등장하는 번째를 알려주는데 666이 처음 등장할 때 0번째가 아니라 첫 번째여야 하니까,,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;-&amp;gt; t를 1로 바꿔주던가 아니면 while문을 n-1로 고치기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;최종코드&lt;/h2&gt;
&lt;pre id=&quot;code_1682013797503&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;n = int(input())
t = 1
k = 665
while t&amp;lt;=n:
    k=int(k)+1
    if '666' in str(k):
        t=t+1
print(k)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 해서 정답이 떴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아 그리고 k안에 666이 있는지 확인하기 위해서 k를 문자열로 바꿔줬다가 1 더하기 위해서는 int여야 하니까 int로 다시 바꿔주기를 하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음부터는 변수명 좀 신경 쓰자,,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메모리: 31256KB&amp;nbsp; &amp;nbsp;시간: 1048ms&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;끝!&lt;/h2&gt;</description>
      <category>알고리즘/브루트 포스</category>
      <category>Python</category>
      <category>백준</category>
      <category>백준1436</category>
      <category>파이썬</category>
      <author>Yoozin</author>
      <guid isPermaLink="true">https://yoozin.tistory.com/5</guid>
      <comments>https://yoozin.tistory.com/5#entry5comment</comments>
      <pubDate>Fri, 21 Apr 2023 03:09:25 +0900</pubDate>
    </item>
    <item>
      <title>React Hooks - useState &amp;amp; 리액트 복습</title>
      <link>https://yoozin.tistory.com/4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;리액트 복습 첫 번째 - 전체적인 흐름 이해와 Counter 함수 구현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버튼을 누르면 숫자가 1씩 올라가는 기초 그 잡채인 함수를 구현해 보기 with useState,,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 리액트란?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자 정의 태그를 만드는 기술&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 사용자 정의 태그를 컴포넌트라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;편리함 등을 위해 리액트로 컴포넌트라는 작은 단위의 부품을 만듦&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 때 컴포넌트는 반드시 대문자로!&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;JSX는 리액트에서 UI를 표현하기 위해 확장된 문법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대충 자바스크립트 문법이랑 비슷하지만 html을 곁들인 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;npx create-react-app@latest .&lt;br /&gt;npm start&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;을 터미널에 입력해서 리액트 가장 최신버전으로 손쉽게 애플리케이션 생성하고 시작&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;http://localhost:3000/&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로 접속하면 리액트 애플리케이션 실시간으로 확인할 수 있음&lt;/p&gt;
&lt;pre id=&quot;code_1681975276972&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import React, {useState} from 'react' ;
function Counter({title, initValue}){ //구조분해할당
  const countState = useState(initValue);
  const count = countState[0]; //read
  const setCount = countState[1]; //update
  function up(){
    setCount(count+1);
  }
  return (
    &amp;lt;div&amp;gt;
        &amp;lt;h1&amp;gt;{title}&amp;lt;/h1&amp;gt;
        &amp;lt;button onClick={up}&amp;gt;+&amp;lt;/button&amp;gt;     {count}
    &amp;lt;/div&amp;gt;
  )
}
function App() {
  return (
    &amp;lt;div&amp;gt;
        &amp;lt;Counter title = &quot;손님수 카운터&quot; initValue={10}&amp;gt;&amp;lt;/Counter&amp;gt;
    &amp;lt;/div&amp;gt;
  );
}

export default App;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-04-20 오후 4.15.43.png&quot; data-origin-width=&quot;1488&quot; data-origin-height=&quot;278&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/meoY7/btsbBUOnJqR/ETtPCqc6lZY0zahF2RfD71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/meoY7/btsbBUOnJqR/ETtPCqc6lZY0zahF2RfD71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/meoY7/btsbBUOnJqR/ETtPCqc6lZY0zahF2RfD71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmeoY7%2FbtsbBUOnJqR%2FETtPCqc6lZY0zahF2RfD71%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1488&quot; height=&quot;278&quot; data-filename=&quot;스크린샷 2023-04-20 오후 4.15.43.png&quot; data-origin-width=&quot;1488&quot; data-origin-height=&quot;278&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드를 작성하면 이와 같이 뜨고 버튼을 누를 때마다 1씩 증가하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저 함수 App이 화면에 보이는 함수다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;div&amp;gt; 안에 Counter 함수를 넣어 실행시킨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 JSX에서는 인접한 요소들이 하나의 부모 안에 들어있지 않으면 안 됨!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 &amp;lt;div&amp;gt;가 굳이 필요 없더라도 넣어서 묶어주기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Counter함수를 살펴보면 우선 Props를 구조분해할당으로 넣어줬다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저기에는 ({title, initvalue})로 구조분해할당해서 넣어줬지만 (props(꼭 props라고 안 넣어줘도 ok))로 넣은 다음 사용할 때 props.title, props.initValue로 해줘도 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 Props를 사용해서 함수의 재사용하기 쉽고 유지보수가 용이하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&amp;lt;Counter&amp;nbsp;title&amp;nbsp;=&amp;nbsp;&quot;손님수&amp;nbsp;카운터&quot;&amp;nbsp;initValue={10}&amp;gt;&amp;lt;/Counter&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분 보면 알 수 있듯이 이 Counter함수를 재사용하고 싶을 때 Props를 변경해서 사용해 주면 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 재사용하기 쉽고 유지보수가 용이함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Counter에 리턴값을 보면 우선&lt;span style=&quot;background-color: #dddddd;&quot;&gt; &amp;lt;h1&amp;gt;{title}&amp;lt;h1&amp;gt;&lt;/span&gt;을 넣어주어 '손님수 카운터'란 글자가 출력됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 밑에 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;&amp;lt;button onClick={up}&amp;gt;+&amp;lt;/button&amp;gt;   {count}를&lt;/span&gt; 살펴보면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 주의할 것은 onClick 할 때 'c'가 대문자라는 것,, 이 것 때문에 두세 번 오류 난 적 아루아루..&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;코드에 따르면 버튼 클릭 시 up이라는 함수가 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;up 함수를 보면 setCount등장!&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;useState에 대해 우선 알아보자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;useState는 우선 리액트로부터 import 해서 사용해 주기&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;useState는 상태관리 훅으로&amp;nbsp;배열을 반환하며&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 요소는 현재 상태의 값을 나타내는 state 변수이고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째 요소는 state 변수를 업데이트하는 함수인 setState 함수다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수를 호출하면 state 변수의 값이 변경되고 컴포넌트가 다시 렌더링 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조금 더 쉽게 말하자면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 요소는 읽기 전용이고 두 번째 요소는 업데이트전용이라고 생각하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 내가 작성한 코드에서 setCount를 호출하면 function Counter가 렌더링 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저 setCount 안의 값을 보면 count를 +1 시켜주는 것을 알 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;읽기 전용 함수인 count를 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;  {count}&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; 여기다가 넣어주어 렌더링 될 때마다 1씩 증가&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;따라서 버튼을 누르면 up이 실행되고 그에 따라 Counter가 렌더링 되고 +1이 된다는 것이다.&lt;/span&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;난 조금 더 뜯어서 이해하기 위해서 count랑 setCount를 이번엔 따로 썼지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통은 구조분해할당을 사용해서 쓴다. 물론 나도 뜯어서 써본 건 이번이 처음,,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 간단히 const [count, setCount] = useState(initValue) 이렇게 써주면 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아 그리고 useState 안에는 초기값을 넣어주면 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;난 initValue를 받아왔지만 보통 0이나 ' ' , [ ] 이런 식으로 초기값 설정을 많이 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;이걸 내가 이해를 했기 때문에 이렇게 쓰지만&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;리액트 처음 공부하는 사람이 보면 뭔 말인지 모를 듯,.. 설명 잘하는 거.. 그거 어떻게 하는 건데..ㅋ&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;블로그 작성하다 보면 나아지겠지 뭐 ^__^&lt;/span&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>React</category>
      <category>hooks</category>
      <category>React</category>
      <category>useState</category>
      <author>Yoozin</author>
      <guid isPermaLink="true">https://yoozin.tistory.com/4</guid>
      <comments>https://yoozin.tistory.com/4#entry4comment</comments>
      <pubDate>Thu, 20 Apr 2023 16:57:44 +0900</pubDate>
    </item>
    <item>
      <title>2798번: 블랙잭 (python)</title>
      <link>https://yoozin.tistory.com/3</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;브루트포스 알고리즘으로 푼 블랙잭 문제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브루트포스 알고리즘 문제는 그냥 생각나는대로 구현해도 시간초과 안 떠서 좋다,,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브루트포스 알고리즘이 그냥 마구잡이로 다 탐색해서 구하는 알고리즘인 것으로 대충 알고 있었지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 스터디원인 &lt;a href=&quot;https://velog.io/@snghyun331/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B3%B5%EB%B6%80-%EB%B8%8C%EB%A3%A8%ED%8A%B8%ED%8F%AC%EC%8A%A4-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%ED%8C%8C%EC%9D%B4%EC%8D%AC&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;승현님&lt;/a&gt;이 스터디시간에 알려줘서 정확하게 뜻을 알게 됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;브루트(Brute): 무식한&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;포스(Force): 힘&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&quot;무식하게 탐색한다&quot;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나 무식한 거 좋아 ㅜㅜ (&lt;s&gt;머리 많이 안 써도 되잖아..)&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 알고리즘의 단점은 복잡도에 민감하고 탐색할 것들이 많으면 시간이 오래 걸린다는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 다른 알고리즘 문제를 이 방법으로 풀면 맨날 시간초과 뜸..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 본론으로 돌아와 블랙잭 문제를 살펴보자.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제&lt;/b&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽다. 카드의 합이 21을 넘지 않는 한도 내에서, 카드의 합을 최대한 크게 만드는 게임이다. 블랙잭은 카지노마다 다양한 규정이 있다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;한국 최고의 블랙잭 고수 김정인은 새로운 블랙잭 규칙을 만들어 상근, 창영이와 게임하려고 한다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;김정인 버전의 블랙잭에서 각 카드에는 양의 정수가 쓰여 있다. 그 다음, 딜러는 N장의 카드를 모두 숫자가 보이도록 바닥에 놓는다. 그런 후에 딜러는 숫자 M을 크게 외친다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;이제 플레이어는 제한된 시간 안에 N장의 카드 중에서 3장의 카드를 골라야 한다. 블랙잭 변형 게임이기 때문에, 플레이어가 고른 카드의 합은 M을 넘지 않으면서 M과&amp;nbsp;최대한 가깝게 만들어야 한다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;N장의 카드에 써져 있는 숫자가 주어졌을 때, M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합을 구해 출력하시오.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;입력&lt;/b&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 카드의 개수 N(3 &amp;le;&amp;nbsp;N &amp;le;&amp;nbsp;100)과 M(10 &amp;le;&amp;nbsp;M &amp;le;&amp;nbsp;300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;합이 M을 넘지 않는 카드 3장을 찾을 수 있는 경우만 입력으로 주어진다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;출력&lt;/b&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합을 출력한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;접근방법&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브루트포스 알고리즘이 아니었다면 꽤나 머리를 썼겠지만 문제를 보고 브루트포스이니 리스트 안을 for문 돌려서 세 개의 수들을 모두 더해보는 모든 경우의 수를 구하는 방법으로 풀면 되지 않을까 싶어서 for문을 세 번을 써서 구현해 보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저 for문 세 개는 시간초과 날 거 같은 불안감을 주었지만 우선 써보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for문으로 리스트c안의 숫자개수(a)만큼 돌려준다. 그리고 그 안에 for문을 넣어서 그 숫자 다음부터 돌려주고 또 for문 넣어줘서 그 숫자 다음부터 돌려주고 ..&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 만약 리스트[1,2,3,4,5]가 있다면 최초에는 c[i]가 1일 때 c[j]가 2고(i+1 부터니까) c[k]가 3이 된다. 이런 방식으로 세 개의 숫자들을 다 탐색할 수 있게 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 t는 c[i],c[j],c[k]를 더한 값으로 그 전의 t값보다 크면 갱신된다. 왜냐면 n이랑 가장 가까우려면 n보다는 작거나 같지만 그 수들 중에 가장 커야하기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 if문을 통해 그 리스트에 값들을 더한 값이 t를 넘지 않고 또한 n이 넘지 않아야한다는 조건을 주어서 통과하면 t를 갱신하게 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1681902581395&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;a,n = map(int,input().split())
c = list(map(int,input().split()))
#n의 숫자를 넘지 않게 c리스트에서 3개 뽑기
t=0
for i in range(a):
    for j in range(i+1,a):
        for k in range(j+1,a):
            if c[i]+c[j]+c[k]&amp;gt;t and c[i]+c[j]+c[k]&amp;lt;=n:
                t=c[i]+c[j]+c[k]
               
print(t)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메모리 :&lt;span style=&quot;background-color: #f9f9f9; color: #333333; text-align: start;&quot;&gt;31256KB&amp;nbsp; &amp;nbsp;시간:&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;68ms&lt;/span&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 for문을 세 번이나 쓴다니 복잡하다는 생각을 하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그런 와중에 스터디원 &lt;a href=&quot;https://letusgrow.tistory.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;영현님&lt;/a&gt;이 알려주신 꿀팁 &amp;rarr; &lt;u&gt;itertools를 사용하기&lt;/u&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;itertools에 있는 여러 함수들 중 combinations를 사용해 봤다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;combinations(iterable, r) : iterable에서 원소 개수가 r개인 조합 뽑기&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;itertools 사용한 코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1681905971202&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import itertools
a,n = map(int,input().split())
c = list(map(int,input().split()))
t=0
arr = list(itertools.combinations(c,3))
#입력 값이 5 21 / 5 6 7 8 9 일 때 arr은 [(5, 6, 7), (5, 6, 8), (5, 6, 9), (5, 7, 8), (5, 7, 9), (5, 8, 9), (6, 7, 8), (6, 7, 9), (6, 8, 9), (7, 8, 9)]
for i in arr:
    if i[0]+i[1]+i[2]&amp;gt;t and i[0]+i[1]+i[2]&amp;lt;=n:
        t=i[0]+i[1]+i[2]
                
print(t)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 해도 답이 제대로 나온다. 유용하게 쓰일 거 같음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메모리: &lt;span style=&quot;background-color: #f9f9f9; color: #333333; text-align: start;&quot;&gt;42904KB&amp;nbsp; &amp;nbsp;시간: 94ms&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #333333; text-align: start;&quot;&gt;시간은 더 걸렸다.,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘/브루트 포스</category>
      <category>Algorithm</category>
      <category>Python</category>
      <category>백준</category>
      <category>파이썬</category>
      <author>Yoozin</author>
      <guid isPermaLink="true">https://yoozin.tistory.com/3</guid>
      <comments>https://yoozin.tistory.com/3#entry3comment</comments>
      <pubDate>Wed, 19 Apr 2023 21:12:24 +0900</pubDate>
    </item>
  </channel>
</rss>