<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>생각과 고민이 담긴 코드</title>
    <link>https://pyh0502.tistory.com/</link>
    <description>단순하게 기능만 돌아가게 짜는 코드를 지양하고 굉장히 효율적이며 깊은 생각과 고민이 담긴 코드를 짜는 것을 목표로 하고 있는 주니어개발자의 기술 블로그 입니다.   코드 리뷰, 코드 리팩토링 관련 글과 생각하는 기준이 되는 여러 배경지식에 대한 포스팅을 계획하고 있습니다.</description>
    <language>ko</language>
    <pubDate>Tue, 4 Aug 2026 14:43:54 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>0_Hun</managingEditor>
    <image>
      <title>생각과 고민이 담긴 코드</title>
      <url>https://tistory1.daumcdn.net/tistory/4481760/attach/dd7e4a3daeaa449a8878347f86e300ef</url>
      <link>https://pyh0502.tistory.com</link>
    </image>
    <item>
      <title>Velog로 블로그 이전합니다!</title>
      <link>https://pyh0502.tistory.com/80</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;항상 읽어주셔서 감사합니다!&lt;br /&gt;다음 주소로 블로그 이전했습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@0_hun&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velog.io/@0_hun&lt;/a&gt;&lt;/p&gt;</description>
      <author>0_Hun</author>
      <guid isPermaLink="true">https://pyh0502.tistory.com/80</guid>
      <comments>https://pyh0502.tistory.com/80#entry80comment</comments>
      <pubDate>Mon, 6 Mar 2023 15:59:12 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 - 순위 검색 (2021 KAKAO Blind Recruitment) / Level 2</title>
      <link>https://pyh0502.tistory.com/79</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/72412&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://programmers.co.kr/learn/courses/30/lessons/72412&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1643793759117&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;코딩테스트 연습 - 순위 검색&quot; data-og-description=&quot;[&amp;quot;java backend junior pizza 150&amp;quot;,&amp;quot;python frontend senior chicken 210&amp;quot;,&amp;quot;python frontend senior chicken 150&amp;quot;,&amp;quot;cpp backend senior pizza 260&amp;quot;,&amp;quot;java backend junior chicken 80&amp;quot;,&amp;quot;python backend senior chicken 50&amp;quot;] [&amp;quot;java and backend and junior and pizza 100&amp;quot;,&amp;quot;pyt&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/72412&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/72412&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cDaYh1/hyNhQaaLwx/zyIf5py9qyqc0kscKprLMK/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/cZrxzW/hyNhTrcgsp/kPM4Q9dlGX9I85Y3VXADeK/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/72412&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/72412&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cDaYh1/hyNhQaaLwx/zyIf5py9qyqc0kscKprLMK/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/cZrxzW/hyNhTrcgsp/kPM4Q9dlGX9I85Y3VXADeK/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;코딩테스트 연습 - 순위 검색&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[&quot;java backend junior pizza 150&quot;,&quot;python frontend senior chicken 210&quot;,&quot;python frontend senior chicken 150&quot;,&quot;cpp backend senior pizza 260&quot;,&quot;java backend junior chicken 80&quot;,&quot;python backend senior chicken 50&quot;] [&quot;java and backend and junior and pizza 100&quot;,&quot;pyt&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p 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_1643793960559&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
from itertools import product
from bisect import bisect_left


def solution(info, query):
    answer = []
    info_dict = defaultdict(list)

    for i in range(len(info)):
        info[i] = info[i].split()
        info[i][-1] = int(info[i][-1])
        
    info.sort(key=lambda x: x[4])  # 추후에 binary search를 사용하기 위한 정렬.

    for i in info:  # '-'를 포함하여 key-value 형태로 만듬.
        key_set = product([i[0], '-'], [i[1], '-'], [i[2], '-'], [i[3], '-'], )

        for j in key_set:
            info_dict[&quot;&quot;.join(j[:4])].append(i[-1])

    for i in range(len(query)):
        query[i] = query[i].replace(&quot;and&quot;, &quot;&quot;)
        query[i] = query[i].split()
        query[i] = [&quot;&quot;.join(query[i][:4]), int(query[i][-1])]

    for i in query:  # query를 돌면서 info_dict의 value인 list를 이진 탐색함.
        answer.append(len(info_dict[i[0]]) - bisect_left(info_dict[i[0]], i[1]))

    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;체감 난이도는 Level 3였던 매우 어려운 문제였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;정확도 테스트를 통과하는 것은 딱 봐도 어렵지 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그러나 info 배열의 길이는 50,000이고 query 배열의 길이는 100,000이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;각각의 query에 대하여 info 배열을 탐색하면 50억이라는 무시무시한 숫자가 나오기에&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;절대 효율성 테스트를 통과하지 못할 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 문제에서 알고리즘을 개선하기 위한 방안은 2가지이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 2가지를 모두 적용해야 효율성 테스트를 통과할 수 있었기에 매우 어려웠다.&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;1. Key-Value 형태로 만들기.&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;매 query마다 info를 탐색하면 안 되기에 info를 적절하게 &lt;span style=&quot;color: #ee2323;&quot;&gt;Dictionary 형태로 만들어서 상수 시간에 접근할 수 있도록 해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;4가지 &lt;span style=&quot;color: #ee2323;&quot;&gt;문자열 값들을 합쳐서 key&lt;/span&gt;를 만들고 &lt;span style=&quot;color: #ee2323;&quot;&gt;코딩 점수를 value&lt;/span&gt;로 갖도록 구성하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1643795085191&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;key_set = product([i[0], '-'], [i[1], '-'], [i[2], '-'], [i[3], '-'],)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;또한 &lt;span style=&quot;color: #ee2323;&quot;&gt;query의 '-'를 처리하기 위해 위와 같은 형태로 하나의 info 값에 대한 16가지 경우의 수를 info_dict의 key로 추가&lt;/span&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;2. Binary Search&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위 과정까지 구현했다면 하나의 query에 대하여 상수 시간에 info_dict의 value&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;즉, 코딩 점수 리스트를 가져올 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;해당 리스트에서 query에서 지정하는 점수 이상의 사람 수를 구해야 하는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여기서 O(n) 탐색을 해버린다면 효율성 테스트를 통과할 수 없다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;이진 탐색을 통해 시간 복잡도를 O(log n)으로&lt;/span&gt; 줄여야 비로소 효율성 테스트를 통과할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이진 탐색은 직접 구현할 수 도 있지만 &lt;span style=&quot;color: #006dd7;&quot;&gt;bisect&lt;/span&gt; 라이브러리의 &lt;span style=&quot;color: #006dd7;&quot;&gt;bisect_left&lt;/span&gt; 함수를 이용하면&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;해당 값이 리스트 내에 존재하지 않더라도 해당 값을 삽입할 경우, 정렬을 유지할 수 있는 위치의 index를 반환해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;(bisect_left는 동일한 값이 있을 경우 그 값의 왼쪽 index 값을 반환.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 함수는 내부적으로 이진 탐색을 사용하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;반환되는 index를 활용하여 해당 값 이상의 값들을 바로 구할 수 있기 때문에 사용하였다.&lt;/p&gt;</description>
      <category>Algorithm/프로그래머스</category>
      <category>Algorithm</category>
      <category>binary search</category>
      <category>Dictionary</category>
      <category>key-value</category>
      <category>programmers</category>
      <category>순위 검색</category>
      <category>알고리즘</category>
      <category>카카오 기출</category>
      <category>코딩테스트</category>
      <category>프로그래머스</category>
      <author>0_Hun</author>
      <guid isPermaLink="true">https://pyh0502.tistory.com/79</guid>
      <comments>https://pyh0502.tistory.com/79#entry79comment</comments>
      <pubDate>Wed, 2 Feb 2022 19:08:19 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 - 튜플 (2019 카카오 개발자 겨울 인턴십) / Level 2</title>
      <link>https://pyh0502.tistory.com/78</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/64065&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://programmers.co.kr/learn/courses/30/lessons/64065&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1642830813426&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;코딩테스트 연습 - 튜플&quot; data-og-description=&quot;&amp;quot;{{2},{2,1},{2,1,3},{2,1,3,4}}&amp;quot; [2, 1, 3, 4] &amp;quot;{{1,2,3},{2,1},{1,2,4,3},{2}}&amp;quot; [2, 1, 3, 4] &amp;quot;{{4,2,3},{3},{2,3,4,1},{2,3}}&amp;quot; [3, 2, 4, 1]&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/64065&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/64065&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bRus3O/hyNarhPrO0/OwLmpyTVEk4c1KWGVV2eT0/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/fKx2x/hyNarPEhbU/y4fpTmEuUY6HJdzKWg3o3K/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/64065&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/64065&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bRus3O/hyNarhPrO0/OwLmpyTVEk4c1KWGVV2eT0/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/fKx2x/hyNarPEhbU/y4fpTmEuUY6HJdzKWg3o3K/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;코딩테스트 연습 - 튜플&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&quot;{{2},{2,1},{2,1,3},{2,1,3,4}}&quot; [2, 1, 3, 4] &quot;{{1,2,3},{2,1},{1,2,4,3},{2}}&quot; [2, 1, 3, 4] &quot;{{4,2,3},{3},{2,3,4,1},{2,3}}&quot; [3, 2, 4, 1]&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p 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_1642830831482&quot; class=&quot;properties&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(s):
    answer = []
    
    s_list = []
    nums=[]
    temp_nums = &quot;&quot;
    
    for i in s:
        if i.isdigit():
            temp_nums += i
        elif i == ',':
            if temp_nums:
                nums.append(int(temp_nums))
            temp_nums = &quot;&quot;
        elif i == '}':
            if temp_nums:
                nums.append(int(temp_nums))
                s_list.append(nums)
            temp_nums = &quot;&quot;
            nums = []
    
    s_list.sort(key=lambda x : len(x))
    
    for i in s_list:
        for j in i:
            if j not in answer:
                answer.append(j)
    
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;어렵지 않은 문제였다. 입력으로 들어온 문자열을 하나의 튜플로 귀결시키기 위해선&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;튜플은 순서가 유효하기 때문에&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;집합의 길이가 작은 순대로 넣어줘야 했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그래서 일단 문자열을 이중 리스트로 변환시켜주고 &lt;span style=&quot;color: #ee2323;&quot;&gt;각각의 배열의 길이를 기준으로 정렬을 수행&lt;/span&gt;한 후&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;순회하면서 튜플에 넣어줬다.&lt;/p&gt;</description>
      <category>Algorithm/프로그래머스</category>
      <category>Algorithm</category>
      <category>programmers</category>
      <category>Tuple</category>
      <category>알고리즘</category>
      <category>카카오 기출</category>
      <category>코딩테스트</category>
      <category>튜플</category>
      <category>프로그래머스</category>
      <author>0_Hun</author>
      <guid isPermaLink="true">https://pyh0502.tistory.com/78</guid>
      <comments>https://pyh0502.tistory.com/78#entry78comment</comments>
      <pubDate>Sat, 22 Jan 2022 14:59:36 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 - 크레인 인형뽑기 게임 (2019 카카오 개발자 겨울 인턴십) / Level 1</title>
      <link>https://pyh0502.tistory.com/77</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 : &lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/64061&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://programmers.co.kr/learn/courses/30/lessons/64061&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1642303171353&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;코딩테스트 연습 - 크레인 인형뽑기 게임&quot; data-og-description=&quot;[[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/64061&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/64061&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dwfW1l/hyM6NE9T6l/f90tjtDQBQr0MUU55MifCK/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/WKjC0/hyM6Ay1IdI/TupApkPYkkl1A6IAdehVIK/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/64061&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/64061&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dwfW1l/hyM6NE9T6l/f90tjtDQBQr0MUU55MifCK/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/WKjC0/hyM6Ay1IdI/TupApkPYkkl1A6IAdehVIK/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;코딩테스트 연습 - 크레인 인형뽑기 게임&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p 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_1642303182261&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(board, moves):
    answer = 0
    stack = []
    n = len(board)
    
    for move in moves:
        for i in range(n):
            item = board[i][move-1]  # 현재 집게가 가리키는 item.
            
            if item != 0:  # 집게가 인형에 도달했을 경우.
                board[i][move-1] = 0  # 인형을 뽑아주고
                
                if stack:  # 바구니에 이전에 담긴 인형이 있으면
                    ex_item = stack.pop()
                    if item == ex_item:  # 같은 종류 인형인지 비교.
                        answer += 2
                    else:  # 다르면 둘 다 순서대로 다시 넣어줌.
                        stack.extend([ex_item, item])
                else:
                    stack.append(item)
                break
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;문제 설명이 길고 복잡해 보이지만 실상을 들여다보면 어렵지 않은 문제였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;문제에서 설명하는 게임 로직을 그대로 구현만 하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;유의할 점은 &lt;span style=&quot;color: #ee2323;&quot;&gt;하나의 시도에서 인형을 뽑았으면 break문을 통해 다음 시도로 넘어가야 한다&lt;/span&gt;는 것이다.&lt;/p&gt;</description>
      <category>Algorithm/프로그래머스</category>
      <category>programmers</category>
      <category>카카오 기출</category>
      <category>크레인 인형 뽑기 게임</category>
      <category>프로그래머스</category>
      <author>0_Hun</author>
      <guid isPermaLink="true">https://pyh0502.tistory.com/77</guid>
      <comments>https://pyh0502.tistory.com/77#entry77comment</comments>
      <pubDate>Sun, 16 Jan 2022 12:23:00 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 - 수식 최대화 (2020 카카오 인턴십) / Level 2</title>
      <link>https://pyh0502.tistory.com/76</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 : &lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/67257&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://programmers.co.kr/learn/courses/30/lessons/67257&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1642073227310&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;코딩테스트 연습 - 수식 최대화&quot; data-og-description=&quot;IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다. 이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과 &quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/67257&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/67257&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Iznah/hyM5GllGFB/PaWAPOTQQEiEGmY3vLHYTk/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/bcIzFa/hyM5JWFfgh/c0rnXDnrrzuWI32J7BXm60/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/67257&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/67257&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Iznah/hyM5GllGFB/PaWAPOTQQEiEGmY3vLHYTk/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/bcIzFa/hyM5JWFfgh/c0rnXDnrrzuWI32J7BXm60/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;코딩테스트 연습 - 수식 최대화&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다. 이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p 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_1642073247030&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from itertools import permutations


def solution(expression):
    answer = []
    operators = [&quot;+&quot;, &quot;*&quot;, &quot;-&quot;]

    cases = list(permutations(operators, 3))  # 3!의 경우의 수.

    for case in cases:
        temp_expression = expression
        for operator in case:  # operator를 하나씩 적용.
            target = &quot;&quot;
            calc_fg = False  # 현재 계산할 operator가 target에 들어올 경우 True
            for i in temp_expression[:]:
                if i in operators and len(target) &amp;gt; 0:  # i가 연산자이고 왼쪽 피연산자가 있으면

                    if calc_fg and target[-1] not in operators:  # 계산할 준비가 됐고, 오른쪽 피연산자가 있으면 계산.
                        temp_expression = temp_expression.replace(target, str(eval(target)))
                        target = str(eval(target))
                        calc_fg = False

                    if i == operator:  # i가 현재 우선순위에 있는 연산자라면 target에 넣어주고 계산 준비 완료 flag on.
                        target += i
                        calc_fg = True
                    elif target[-1] in operators:  # 연산자가 연달아온 경우 -인 unary operator이기 때문에 target에 저장.
                        target += i
                    else:  # 우선순위에 없는 연산자가 오면 target 초기화.
                        target = &quot;&quot;
                else:  # 숫자가 온 경우 target에 추가.
                    target += i

            if calc_fg:  # expression 탐색이 끝날때 계산 준비가 되어 있으면 계산해준다.
                temp_expression = temp_expression.replace(target, str(eval(target)))
        answer.append(abs(int(temp_expression)))

    return max(answer)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;연산자 우선순위의 경우의 수가 &lt;span style=&quot;color: #ee2323;&quot;&gt;3! = 6 이므로 당연하게 모든 경우를 탐색&lt;/span&gt;하여 최대값을 반환하고자 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;연산자 중 우선순위가 높은 거부터 차례대로 계산해주는 방식으로 진행했으며&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;eval 함수를 통한 계산한 결과값을 replace 함수로 문자열을 부분적으로 대체&lt;/span&gt;시켜주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;맨처음 짜인 로직 내에서 새로 발견된 예외들을 처리하려고 하다 보니 코드가 조금 지저분해진 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그에 따른 추후 해결방안을 생각해봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;1. 코드 작성 전 알고리즘을 충분히 설계하고 작성하자.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;2. 시험볼 때는 무조건 풀어내야 하니 어쩔 수 없지만 연습할 땐 추후 반드시 리팩토링 진행.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Algorithm/프로그래머스</category>
      <category>Algorithm</category>
      <category>Brute Force</category>
      <category>programmers</category>
      <category>수식 최대화</category>
      <category>알고리즘</category>
      <category>완전 탐색</category>
      <category>카카오 기출문제</category>
      <category>프로그래머스</category>
      <author>0_Hun</author>
      <guid isPermaLink="true">https://pyh0502.tistory.com/76</guid>
      <comments>https://pyh0502.tistory.com/76#entry76comment</comments>
      <pubDate>Thu, 13 Jan 2022 20:34:42 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 - 키패드 누르기 ( 2020 카카오 인턴십) / Level 1</title>
      <link>https://pyh0502.tistory.com/75</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 : &lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/67256&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://programmers.co.kr/learn/courses/30/lessons/67256&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1641214828462&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;코딩테스트 연습 - 키패드 누르기&quot; data-og-description=&quot;[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] &amp;quot;right&amp;quot; &amp;quot;LRLLLRLLRRL&amp;quot; [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] &amp;quot;left&amp;quot; &amp;quot;LRLLRRLLLRR&amp;quot; [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] &amp;quot;right&amp;quot; &amp;quot;LLRLLRLLRL&amp;quot;&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/67256&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/67256&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bWbaml/hyMXORnNiM/mw3atg9Vys5l9MaZufOtH1/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/cwf47U/hyMWwLAYOr/5YSVL7MGQMHeQD4xaQHZJ1/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/67256&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/67256&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bWbaml/hyMXORnNiM/mw3atg9Vys5l9MaZufOtH1/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/cwf47U/hyMWwLAYOr/5YSVL7MGQMHeQD4xaQHZJ1/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;코딩테스트 연습 - 키패드 누르기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] &quot;right&quot; &quot;LRLLLRLLRRL&quot; [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] &quot;left&quot; &quot;LRLLRRLLLRR&quot; [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] &quot;right&quot; &quot;LLRLLRLLRL&quot;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p 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_1641214839442&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(numbers, hand):
    answer = ''
    
    key_pad = [[1, 2, 3], [4, 5, 6], [7, 8, 9], ['*', 0, '#']]
    left_side = [1, 4, 7]
    right_side = [3, 6, 9]
    center = [2, 5, 8, 0]
    
    left = [3, 0]
    right = [3, 2]
    
    for num in numbers:
        if num in left_side:
            answer += 'L'
            left = [left_side.index(num), 0]
        elif num in right_side:
            answer += 'R'
            right = [right_side.index(num), 2]
        else:
            target = [center.index(num), 1]
            l_distance = abs(target[0]-left[0]) + abs(target[1]-left[1])
            r_distance = abs(target[0]-right[0]) + abs(target[1]-right[1])
            
            if l_distance &amp;gt; r_distance:
                answer += 'R'
                right = target
            elif l_distance &amp;lt; r_distance:
                answer += 'L'
                left = target
            else:
                if hand == &quot;left&quot;:
                    answer += 'L'
                    left = target
                else:
                    answer += 'R'
                    right = target
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;코드가 좀 길어졌지만 문제의 조건대로 하나씩 천천히 체크해서 짜면 어렵지 않은 문제였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;2, 5, 8, 0번 조건을 판단하기 위해서 키패드를 2차원 배열을 통해 엄지 손가락의 현재 좌표를 관리하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이런 문제는 시간복잡도 issue도 없기 때문에 매우 빠르게 풀고 넘어가야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;해당 문제에서는 조금 코드가 복잡해지더라도 확신을 갖고 빠르게 쭉 구현하는 태도가 필요했다.&lt;/p&gt;</description>
      <category>Algorithm/프로그래머스</category>
      <category>Algorithm</category>
      <category>programmers</category>
      <category>알고리즘</category>
      <category>카카오 코딩테스트</category>
      <category>키패드 누르기</category>
      <category>프로그래머스</category>
      <author>0_Hun</author>
      <guid isPermaLink="true">https://pyh0502.tistory.com/75</guid>
      <comments>https://pyh0502.tistory.com/75#entry75comment</comments>
      <pubDate>Mon, 3 Jan 2022 22:05:40 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 - 거리두기 확인하기 (2021 카카오 채용연계 인턴십) / Level 2</title>
      <link>https://pyh0502.tistory.com/73</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 : &lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/81302&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://programmers.co.kr/learn/courses/30/lessons/81302&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1641214116649&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;코딩테스트 연습 - 거리두기 확인하기&quot; data-og-description=&quot;[[&amp;quot;POOOP&amp;quot;, &amp;quot;OXXOX&amp;quot;, &amp;quot;OPXPX&amp;quot;, &amp;quot;OOXOX&amp;quot;, &amp;quot;POXXP&amp;quot;], [&amp;quot;POOPX&amp;quot;, &amp;quot;OXPXP&amp;quot;, &amp;quot;PXXXO&amp;quot;, &amp;quot;OXXXO&amp;quot;, &amp;quot;OOOPP&amp;quot;], [&amp;quot;PXOPX&amp;quot;, &amp;quot;OXOXP&amp;quot;, &amp;quot;OXPOX&amp;quot;, &amp;quot;OXXOP&amp;quot;, &amp;quot;PXPOX&amp;quot;], [&amp;quot;OOOXX&amp;quot;, &amp;quot;XOOOX&amp;quot;, &amp;quot;OOOXX&amp;quot;, &amp;quot;OXOOX&amp;quot;, &amp;quot;OOOOO&amp;quot;], [&amp;quot;PXPXP&amp;quot;, &amp;quot;XPXPX&amp;quot;, &amp;quot;PXPXP&amp;quot;, &amp;quot;XPXPX&amp;quot;, &amp;quot;PXPXP&amp;quot;]] [1, 0, 1, 1, 1]&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/81302&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/81302&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/WQCVJ/hyMWvTqiPk/a511J28pkCHPwo6iYUEXE0/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/bnBjWi/hyMXJP3KAA/7W0GAVuGCtWgbVSS5BeIVk/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/81302&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/81302&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/WQCVJ/hyMWvTqiPk/a511J28pkCHPwo6iYUEXE0/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/bnBjWi/hyMXJP3KAA/7W0GAVuGCtWgbVSS5BeIVk/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;코딩테스트 연습 - 거리두기 확인하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[[&quot;POOOP&quot;, &quot;OXXOX&quot;, &quot;OPXPX&quot;, &quot;OOXOX&quot;, &quot;POXXP&quot;], [&quot;POOPX&quot;, &quot;OXPXP&quot;, &quot;PXXXO&quot;, &quot;OXXXO&quot;, &quot;OOOPP&quot;], [&quot;PXOPX&quot;, &quot;OXOXP&quot;, &quot;OXPOX&quot;, &quot;OXXOP&quot;, &quot;PXPOX&quot;], [&quot;OOOXX&quot;, &quot;XOOOX&quot;, &quot;OOOXX&quot;, &quot;OXOOX&quot;, &quot;OOOOO&quot;], [&quot;PXPXP&quot;, &quot;XPXPX&quot;, &quot;PXPXP&quot;, &quot;XPXPX&quot;, &quot;PXPXP&quot;]] [1, 0, 1, 1, 1]&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p 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_1641214139150&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(places):
    answer = []
    global dx
    global dy
    global room
    dx = [1, -1, 0, 0]
    dy = [0, 0, 1, -1]
    n = 5
    
    for place in places:
        flag = False
        room = [list(i) for i in place]
        
        for i in range(n):
            for j in range(n):
                if room[i][j] == 'P':
                    if firstSearch(i, j) == 0:
                        flag = True
                        break
            if flag:
                break
        if flag:
            answer.append(0)
        else:
            answer.append(1)
        
    return answer

def firstSearch(x, y):
    for k in range(4):
        nx = x + dx[k]
        ny = y + dy[k]
        
        if 0 &amp;lt;= nx &amp;lt; 5 and 0 &amp;lt;= ny &amp;lt; 5:
            if room[nx][ny] == 'P':
                return 0
            elif room[nx][ny] == 'O':
                if secondSearch(nx, ny, x, y) == 0:
                    return 0

def secondSearch(x, y, start_x, start_y):
    for k in range(4):
        nx = x + dx[k]
        ny = y + dy[k]
        
        if 0 &amp;lt;= nx &amp;lt; 5 and 0 &amp;lt;= ny &amp;lt; 5  and (nx != start_x or ny != start_y):
            if room[nx][ny] == 'P':
                return 0
    return 1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;오랜만에 푼 문제라 그런지 어렵진 않았지만 시간이 조금 걸린 문제였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;전형적인 탐색 문제였지만 DFS, BFS를 사용하여 풀 수 도 있지만 맨해튼 거리가 2 이하에 응시자가 있는지&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;확인만 하면 되기 때문에 &lt;span style=&quot;color: #ee2323;&quot;&gt;탐색 함수를 2번 호출&lt;/span&gt;해주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;첫번째 탐색할 때와 두 번째 탐색할 때 조건이 조금 다르게 때문에 함수를 따로 만들어 주었으며&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;탐색 도중 다른 응시자가 나오면 무조건 거리두기를 안 지켰다고 판단&lt;/span&gt;하고 break 해주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;첫 번째 탐색을 하고 만약 빈 공간이라면 해당 지점에서 두 번째 탐색을 진행&lt;/span&gt;하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;두 번째 탐색을 진행하고도 다른 응시자가 나오지 않으면 거리두기 지킨 것으로 판단&lt;/span&gt;하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;ps. 오랜만에 알고리즘 코딩을 해서 그런지 코드가 조금 지저분한 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;인턴 하느라 시간이 많이 부족하지만 그래도 하루에 하나씩은 푸는 걸 목표로 하고 있다.&lt;/p&gt;</description>
      <category>Algorithm/프로그래머스</category>
      <category>Algorithm</category>
      <category>BFS</category>
      <category>DFS</category>
      <category>programmers</category>
      <category>거리두기 확인하기</category>
      <category>알고리즘</category>
      <category>카카오 코딩테스트</category>
      <category>프로그래머스</category>
      <author>0_Hun</author>
      <guid isPermaLink="true">https://pyh0502.tistory.com/73</guid>
      <comments>https://pyh0502.tistory.com/73#entry73comment</comments>
      <pubDate>Mon, 3 Jan 2022 21:59:10 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 - 신규 아이디 추천 (2021 KAKAO 블라인드 채용) / Level 1</title>
      <link>https://pyh0502.tistory.com/72</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 : &lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/72410&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://programmers.co.kr/learn/courses/30/lessons/72410&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1639296432220&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;코딩테스트 연습 - 신규 아이디 추천&quot; data-og-description=&quot;카카오에 입사한 신입 개발자 네오는 &amp;quot;카카오계정개발팀&amp;quot;에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. &amp;quot;네오&amp;quot;에게 주어진 첫 업무는 새로 &quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/72410&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/72410&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bAdalH/hyMFSmIhp5/LYoWZ3Yhg6tcBTugwQTcZK/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/bHj9ID/hyMFRahhdP/FKWBVyPHskaBlPe0v0AEv0/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/72410&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/72410&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bAdalH/hyMFSmIhp5/LYoWZ3Yhg6tcBTugwQTcZK/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/bHj9ID/hyMFRahhdP/FKWBVyPHskaBlPe0v0AEv0/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;코딩테스트 연습 - 신규 아이디 추천&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;카카오에 입사한 신입 개발자 네오는 &quot;카카오계정개발팀&quot;에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. &quot;네오&quot;에게 주어진 첫 업무는 새로&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p 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_1639296453202&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(new_id):
    target = &quot;0123456789abcdefghijklmnopqrstuvwxyz-_.&quot;
    new_id = list(new_id)
    i = 0
    j = 0
    dot_cnt = 0
    
    while i &amp;lt; len(new_id):  # 1, 2단계
        new_id[i] = new_id[i].lower()
        
        if new_id[i] not in target:
            new_id.remove(new_id[i])
            i -= 1
        i += 1
    
    while j &amp;lt; len(new_id):  # 3단계
        
        if new_id[j] == '.':
            dot_cnt += 1
            if dot_cnt &amp;gt; 1:
                new_id.pop(j)
            else:
                j += 1
        else:
            dot_cnt = 0
            j += 1
    
    if len(new_id) != 0 and new_id[0] == '.':  # 4단계
        new_id.pop(0)
    if len(new_id) != 0 and new_id[-1] == '.':
        new_id.pop(-1)
    
    if not new_id:  # 5단계
        new_id.append('a')
    
    if len(new_id) &amp;gt;= 16:  # 6단계
        new_id = new_id[:15]
    if len(new_id) != 0 and new_id[-1] == '.':
        new_id.pop(-1)
    
    if len(new_id) &amp;lt;= 2:  # 7단계
        while len(new_id) &amp;lt; 3:
            new_id.append(new_id[-1])
    
    return &quot;&quot;.join(new_id)&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;다른 사람들의 풀이도 공부해봤는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정규식을 이용해 구현한 사람도 있었으며&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2단계에서 isalpha() 과 isdigit()를 이용하여 더 쉽게 구현한 풀이도 있었다.&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>Algorithm/프로그래머스</category>
      <category>Algorithm</category>
      <category>KAKAO BLIND RECRUITMENT</category>
      <category>string</category>
      <category>신규 아이디 추천</category>
      <category>알고리즘</category>
      <category>프로그래머스</category>
      <author>0_Hun</author>
      <guid isPermaLink="true">https://pyh0502.tistory.com/72</guid>
      <comments>https://pyh0502.tistory.com/72#entry72comment</comments>
      <pubDate>Sun, 12 Dec 2021 17:11:21 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 - 숫자 문자열과 영단어 (2021 카카오 채용연계 인턴십) / Level 1</title>
      <link>https://pyh0502.tistory.com/71</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 : &lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/81301&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://programmers.co.kr/learn/courses/30/lessons/81301&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1638675037329&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;코딩테스트 연습 - 숫자 문자열과 영단어&quot; data-og-description=&quot;네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/81301&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/81301&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c9NgMS/hyMAmuP93T/xmHxgPg1R2p8l0KuIfBMc0/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/gynfB/hyMAn8nay5/fnWFWsjwsnATKVN78RLB60/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/81301&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/81301&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c9NgMS/hyMAmuP93T/xmHxgPg1R2p8l0KuIfBMc0/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/gynfB/hyMAn8nay5/fnWFWsjwsnATKVN78RLB60/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;코딩테스트 연습 - 숫자 문자열과 영단어&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p 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_1638675051156&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(s):
    
    nums = [str(i) for i in range(10)]
    en_nums = [&quot;zero&quot;, &quot;one&quot;, &quot;two&quot;, &quot;three&quot;, &quot;four&quot;, &quot;five&quot;, &quot;six&quot;, &quot;seven&quot;, &quot;eight&quot;, &quot;nine&quot;]
    word = []
    s = list(s)
    i = 0
    
    while True:
        
        if &quot;&quot;.join(word) in en_nums:
                s.insert(i, str(en_nums.index(&quot;&quot;.join(word))))
                word = []
                i += 1
        elif s[i] not in nums:
            word.append(s[i])
            s.remove(s[i])
        else:
            i += 1
        
        if i &amp;gt;= len(s):
            if word:
                s.insert(i, str(en_nums.index(&quot;&quot;.join(word))))
                break
            else:
                break
    
    return int(&quot;&quot;.join(s))&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;&lt;span style=&quot;color: #ee2323;&quot;&gt;다만 리스트를 순회하면서 삽입, 삭제를 하기 때문에 index를 세심하게 체크해야 했다.&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;+ 다른 사람들의 풀이를 보니 &lt;span style=&quot;color: #ee2323;&quot;&gt;replace 함수&lt;/span&gt;를 사용하여 더 쉽게 풀 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;built-in 함수들을 더 숙달시켜야겠다.&lt;/p&gt;</description>
      <category>Algorithm/프로그래머스</category>
      <category>algoritm</category>
      <category>programmers</category>
      <category>string</category>
      <category>숫자 문자열과 영단어</category>
      <category>알고리즘</category>
      <category>카카오 체용연계형 인턴십</category>
      <category>프로그래머스</category>
      <author>0_Hun</author>
      <guid isPermaLink="true">https://pyh0502.tistory.com/71</guid>
      <comments>https://pyh0502.tistory.com/71#entry71comment</comments>
      <pubDate>Sun, 5 Dec 2021 12:37:42 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 - 로또의 최고 순위와 최저 순위 (2021 Dev-Matching 웹백엔드) / Level 1</title>
      <link>https://pyh0502.tistory.com/70</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 : &lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/77484&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://programmers.co.kr/learn/courses/30/lessons/77484&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1638599680869&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;코딩테스트 연습 - 로또의 최고 순위와 최저 순위&quot; data-og-description=&quot;로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/77484&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/77484&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ezIMm/hyMAzfUNAf/YRCNvS63HA7SlpgA8b31t1/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/bchwHB/hyMAmHDLG2/w7RpUUSrmElMwC9aP3gpZK/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/77484&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/77484&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ezIMm/hyMAzfUNAf/YRCNvS63HA7SlpgA8b31t1/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/bchwHB/hyMAmHDLG2/w7RpUUSrmElMwC9aP3gpZK/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;코딩테스트 연습 - 로또의 최고 순위와 최저 순위&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p 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_1638599695441&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(lottos, win_nums):
    answer = []
    rank = [6, 5, 4, 3, 2, 1]
    match = 0
    unknown = 0
    
    for lotto in lottos:
        if lotto == 0:
            unknown += 1
            continue
        for win_num in win_nums:
            if lotto == win_num:
                match += 1
                break
    if match == 0:
        if unknown == 0:
            answer.append(6)
        else:
            answer.append(rank.index(unknown) + 1)
        
        answer.append(6)
    
    else:
        answer.append(rank.index(match + unknown) + 1)
        answer.append(rank.index(match) + 1)
    
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;level 1의 쉬운 문제였다. 코테에서 첫 번째 문제로 가끔씩 이렇게 쉬운 문제가 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;빠르고 정확하게 풀고 넘어가는 연습을 해야겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;매칭 되는 숫자의 수와 0의 개수를 저장&lt;/span&gt;하고 그에 따라 순위를 출력해주면 됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;순위를 구할땐 if else문을 사용하지 않고 &lt;span style=&quot;color: #ee2323;&quot;&gt;배열의 index를 이용하여 최대한 간단히&lt;/span&gt; 구하고자 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그에 따라 0개 맞췄을 때는 따로 처리를 해줘야 했다.&lt;/p&gt;</description>
      <category>Algorithm/프로그래머스</category>
      <category>Algorithm</category>
      <category>Dev-Matching</category>
      <category>로또의 최고 순위와 최저 순위</category>
      <category>알고리즘</category>
      <category>프로그래머스</category>
      <author>0_Hun</author>
      <guid isPermaLink="true">https://pyh0502.tistory.com/70</guid>
      <comments>https://pyh0502.tistory.com/70#entry70comment</comments>
      <pubDate>Sat, 4 Dec 2021 15:38:41 +0900</pubDate>
    </item>
  </channel>
</rss>