<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Devlog</title>
    <link>https://hapbbying.tistory.com/</link>
    <description>내가 보려고 쓰는 블로그</description>
    <language>ko</language>
    <pubDate>Wed, 15 Jul 2026 20:29:19 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Dev.sohee</managingEditor>
    <item>
      <title>[프로그래머스] 미로 탈출 - Python</title>
      <link>https://hapbbying.tistory.com/175</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/159993&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/159993&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1729264578759&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://school.programmers.co.kr/learn/courses/30/lessons/159993&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bfvx9B/hyXlWkzJOC/8nKaJtwOZm42665ggDZ5Jk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bUxRGI/hyXhTJNvsB/iVQVaOFjVmuONs7up4mz2K/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/159993&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/159993&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bfvx9B/hyXlWkzJOC/8nKaJtwOZm42665ggDZ5Jk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bUxRGI/hyXhTJNvsB/iVQVaOFjVmuONs7up4mz2K/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&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;pre id=&quot;code_1729264567590&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 bfs(start, end, maps):
    answer = 0
    
    dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1]
    row, col = len(maps), len(maps[0])
                              
    check = [[0] * col for _ in range(row)]
    
    for i in range(len(maps)):
        for j in range(len(maps[0])):
            if maps[i][j] == start:
                start = [i, j]
            elif maps[i][j] == end:
                end = [i, j]
    
    x, y = start[0], start[1]

    q = deque()
    q.append([x, y, 0])    
    
    while(q):
        x, y, res = q.popleft()
        
        if x == end[0] and y == end[1]:
            return res

        for i in range(4):
            nx, ny = x + dx[i], y + dy[i]
            
            if 0 &amp;lt;= nx &amp;lt; row and 0 &amp;lt;= ny &amp;lt; col:
                if check[nx][ny] == 0 and maps[nx][ny] != &quot;X&quot;:
                    check[nx][ny] = 1
                    q.append([nx, ny, res+1])
            
    return -1
                              
def solution(maps):
    to_lever = bfs(&quot;S&quot;, &quot;L&quot;, maps)  # '시작 지점 -&amp;gt; 레버' 경로의 거리 구하기
    to_end = bfs(&quot;L&quot;, &quot;E&quot;, maps)    # '레버 -&amp;gt; 출구' 경로의 거리 구하기
         
    if to_lever != -1 and to_end != -1:
        return to_lever + to_end
    
    return -1&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm/Programmers</category>
      <category>BFS</category>
      <category>Python</category>
      <category>미로 탈출</category>
      <category>파이썬</category>
      <category>프로그래머스</category>
      <author>Dev.sohee</author>
      <guid isPermaLink="true">https://hapbbying.tistory.com/175</guid>
      <comments>https://hapbbying.tistory.com/175#entry175comment</comments>
      <pubDate>Sat, 19 Oct 2024 00:22:09 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] [PCCP 기출문제] 2번 / 퍼즐 게임 챌린지 - Python</title>
      <link>https://hapbbying.tistory.com/174</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/340212&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/340212&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1728832012178&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://school.programmers.co.kr/learn/courses/30/lessons/340212&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bm6LM6/hyXd6W3eV8/IHbrGkNOri9LbYKmTFw8G1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/NIFjm/hyXhUHppKC/gVjoCOGbzwuxI2STdUwyo0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/340212&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/340212&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bm6LM6/hyXd6W3eV8/IHbrGkNOri9LbYKmTFw8G1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/NIFjm/hyXhUHppKC/gVjoCOGbzwuxI2STdUwyo0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&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;h4 data-ke-size=&quot;size20&quot;&gt;풀이&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이진탐색&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728831989421&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(diffs, times, limit):
    
    def calc(level):
        time = 0

        for j in range(len(diffs)):
            if diffs[j] &amp;lt;= level:
                time += times[j]
            else:
                time += (diffs[j] - level) * (times[j] + times[j-1]) + times[j]

            if time &amp;gt; limit:
                return False
            
        if limit &amp;gt;= time:
            return True
        
        return False
    
    
    
    if len(diffs) == 1:
        return 1
    
    start, end, mid = 1, max(diffs), 0
    
    while(start &amp;lt;= end):
        mid = (start + end) // 2

        if calc(mid):
            end = mid - 1
        else:
            start = mid + 1
    
    if calc(mid):
        return mid
    else:
        return start&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm/Programmers</category>
      <category>Python</category>
      <category>이진탐색</category>
      <category>파이썬</category>
      <category>프로그래머스</category>
      <author>Dev.sohee</author>
      <guid isPermaLink="true">https://hapbbying.tistory.com/174</guid>
      <comments>https://hapbbying.tistory.com/174#entry174comment</comments>
      <pubDate>Mon, 14 Oct 2024 00:08:33 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] [PCCP 기출문제] 1번 / 동영상 재생기 - Python</title>
      <link>https://hapbbying.tistory.com/173</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/340213#&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/340213&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1728826057263&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://school.programmers.co.kr/learn/courses/30/lessons/340213#&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/rL7D4/hyXhVsN195/7CqMsbUQkojkq7h6dpiGT0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/UXdte/hyXebjM6IL/7ZX4hgMByIhKKIveVjdrr1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/340213#&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/340213#&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/rL7D4/hyXhVsN195/7CqMsbUQkojkq7h6dpiGT0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/UXdte/hyXebjM6IL/7ZX4hgMByIhKKIveVjdrr1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&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;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;풀이&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초 단위로 시간 변환 후 prev, next 처리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728826176182&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    
def to_sec(time):
    tmp = time.split(&quot;:&quot;)

    return int(tmp[0]) * 60 + int(tmp[1])

def solution(video_len, pos, op_start, op_end, commands):
    answer = ''
    
    video_len = to_sec(video_len)
    pos = to_sec(pos)
    op_start = to_sec(op_start)
    op_end = to_sec(op_end)
    
    for cmd in commands:
        
        if op_start &amp;lt;= pos &amp;lt;= op_end:
            pos = op_end
            
        if cmd == &quot;next&quot;:
            pos += 10
            
        else:
            pos -= 10
        
        if pos &amp;lt; 0 :
            pos = 0

        elif pos &amp;gt; video_len:
            pos = video_len
        
        if op_start &amp;lt;= pos &amp;lt;= op_end:
            pos = op_end
    
    minutes = str(pos // 60).zfill(2)
    seconds = str(pos % 60).zfill(2)
        
    answer = minutes + &quot;:&quot; + seconds
    
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm/Programmers</category>
      <category>pccp</category>
      <category>Python</category>
      <category>파이썬</category>
      <category>프로그래머스</category>
      <author>Dev.sohee</author>
      <guid isPermaLink="true">https://hapbbying.tistory.com/173</guid>
      <comments>https://hapbbying.tistory.com/173#entry173comment</comments>
      <pubDate>Sun, 13 Oct 2024 22:30:31 +0900</pubDate>
    </item>
    <item>
      <title>[Java] HashMap과 Map, HashTableMap, TreeMap</title>
      <link>https://hapbbying.tistory.com/172</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;HashMap의 함수&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;put(key, value) : key와 value를 해시맵에 추가한다.&lt;/li&gt;
&lt;li&gt;getValue(key) : 입력받은 key의 value를 반환한다.&lt;/li&gt;
&lt;li&gt;keys() : 해시맵의 모든 key를 반환한다.&lt;/li&gt;
&lt;li&gt;remove(key) : 입력받은 key와 key에 해당하는 value를 삭제한다.&lt;/li&gt;
&lt;li&gt;replace(key, value) : 입력받은 key의 value를 입력받은 value로 변경한다.&lt;/li&gt;
&lt;li&gt;size() : 해시맵의 value의 갯수를 반환한다.&lt;/li&gt;
&lt;li&gt;isEmpty() : 해시맵의 데이터가 0인지 확인한다.&lt;/li&gt;
&lt;li&gt;clear() : HashMap의 모든 데이터를 삭제한다.&lt;/li&gt;
&lt;li&gt;contains() : 입력받은 key가 HashMap에 있는지 확인한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a id=&quot;user-content-map-vs-hashmap-vs-hashtablemap-vs-treemap&quot; href=&quot;https://github.com/ahnsoheee/TIL/blob/master/Language/Java/HashMap.md#map-vs-hashmap-vs-hashtablemap-vs-treemap&quot; aria-hidden=&quot;true&quot;&gt;&lt;/a&gt;Map vs HashMap vs HashTableMap vs TreeMap&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;520&quot; data-origin-height=&quot;290&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9eyoH/btrtlaG6Kv3/Qu2leamSOP83KqsRRKRR60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9eyoH/btrtlaG6Kv3/Qu2leamSOP83KqsRRKRR60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9eyoH/btrtlaG6Kv3/Qu2leamSOP83KqsRRKRR60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9eyoH%2FbtrtlaG6Kv3%2FQu2leamSOP83KqsRRKRR60%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;520&quot; height=&quot;290&quot; data-origin-width=&quot;520&quot; data-origin-height=&quot;290&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Map은 인터페이스이다. 인터페이스는 선언만 가능하고 객체 생성이 불가능하다.&lt;/li&gt;
&lt;li&gt;HashMap은 Map의 자식 클래스로 Map의 메소드를 상속받는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;pre class=&quot;processing&quot;&gt;&lt;code&gt;Map&amp;lt;String, String&amp;gt; map = new HashMap&amp;lt;&amp;gt;(); 
// or
HashMap&amp;lt;String, String&amp;gt; hashMap = new HashMap&amp;lt;&amp;gt;();
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;a id=&quot;user-content-1-map&quot; href=&quot;https://github.com/ahnsoheee/TIL/blob/master/Language/Java/HashMap.md#1-map&quot; aria-hidden=&quot;true&quot;&gt;&lt;/a&gt;1. Map&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;red-black tree 사용&lt;/li&gt;
&lt;li&gt;최악의 경우 시간복잡도 : O(n) - 모든 데이터를 탐색&lt;/li&gt;
&lt;li&gt;최상의 경우 시간복잡도 : O(logn)&lt;/li&gt;
&lt;li&gt;HashMap을 위한 인터페이스: 특정한 Map을 사용하기 위해 인터페이스를 사용&lt;/li&gt;
&lt;li&gt;new Map()을 사용하면 일일이 내부 알고리즘을 구현해야 한다.&lt;/li&gt;
&lt;li&gt;중복을 허용하지 않고, key-value 쌍으로 이루어진다.&lt;/li&gt;
&lt;li&gt;key와 value는 null을 허용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;a id=&quot;user-content-2-hashmap&quot; href=&quot;https://github.com/ahnsoheee/TIL/blob/master/Language/Java/HashMap.md#2-hashmap&quot; aria-hidden=&quot;true&quot;&gt;&lt;/a&gt;2. HashMap&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;hash함수가 사용된 Map: 해시 값을 생성한다.&lt;/li&gt;
&lt;li&gt;이상적으로는 O(1) 시간 복잡도를 갖지만 실제로는 O(n)을 소요한다.&lt;/li&gt;
&lt;li&gt;삽입과 제거의 과정이 가볍다.&lt;/li&gt;
&lt;li&gt;key나 value에 null값 저장 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;a id=&quot;user-content-3-hashtablemap&quot; href=&quot;https://github.com/ahnsoheee/TIL/blob/master/Language/Java/HashMap.md#3-hashtablemap&quot; aria-hidden=&quot;true&quot;&gt;&lt;/a&gt;3. HashTableMap&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;key와 value는 null을 허용하지 않는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;a id=&quot;user-content-4-treemap&quot; href=&quot;https://github.com/ahnsoheee/TIL/blob/master/Language/Java/HashMap.md#4-treemap&quot; aria-hidden=&quot;true&quot;&gt;&lt;/a&gt;4. TreeMap&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SortedMap을 상속받고, key에 대해 정렬되어있다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>CS/Data Structure</category>
      <author>Dev.sohee</author>
      <guid isPermaLink="true">https://hapbbying.tistory.com/172</guid>
      <comments>https://hapbbying.tistory.com/172#entry172comment</comments>
      <pubDate>Mon, 14 Feb 2022 18:23:10 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] [1차] 프렌즈4블록 - Python</title>
      <link>https://hapbbying.tistory.com/171</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/17679&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://programmers.co.kr/learn/courses/30/lessons/17679&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1644332882078&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;코딩테스트 연습 - [1차] 프렌즈4블록&quot; data-og-description=&quot;프렌즈4블록 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 &amp;quot;프렌즈4블록&amp;quot;. 같은 모양의 카카오프렌즈 블록이 2 &amp;times;2 형태로 4개가 붙&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/17679&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/17679&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/liNQr/hyNlmn0gmh/1sR4Deq49UKSltzTDd8zSK/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/s6F4W/hyNliTqH2E/nXF9YkKizqe6st2KLRTw10/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/blqs34/hyNljrguO2/8r0w1lqFrxpjNVFlNxVMVK/img.png?width=350&amp;amp;height=345&amp;amp;face=186_180_210_207&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/17679&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/17679&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/liNQr/hyNlmn0gmh/1sR4Deq49UKSltzTDd8zSK/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/s6F4W/hyNliTqH2E/nXF9YkKizqe6st2KLRTw10/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/blqs34/hyNljrguO2/8r0w1lqFrxpjNVFlNxVMVK/img.png?width=350&amp;amp;height=345&amp;amp;face=186_180_210_207');&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;코딩테스트 연습 - [1차] 프렌즈4블록&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;프렌즈4블록 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 &quot;프렌즈4블록&quot;. 같은 모양의 카카오프렌즈 블록이 2 &amp;times;2 형태로 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;h3 data-ke-size=&quot;size23&quot;&gt;풀이&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. 지워야하는 블록 검사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- check() 함수로 블록이 2x2 형태로 붙어있는지 확인한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. 블록 지우기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- popList에 지워질 칸의 행과 열을 저장한다. -&amp;gt; set을 사용하기 위해 튜플 형태로 저장&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;- 지운 칸은 '-'로 표시한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3. 블록 내리기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- popList를 내림차순으로 정렬하고, 하나씩 처리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 지워진 블록이 x행 y열이면, x행부터 위쪽 방향으로 y열에 빈칸이 아닌 블록을 찾아 아래로 내린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 0행까지 반복해서 빈칸을 채운다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;4. 재탐색&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;pre id=&quot;code_1644332866949&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dx, dy = [0, 1, 1], [1, 0, 1]
def check(board, x, y, n, m):    

    for i in range(3):
        nx, ny = x + dx[i], y + dy[i]
        
        if 0 &amp;lt;= nx &amp;lt; m and 0 &amp;lt;= ny &amp;lt; n:
            if board[x][y] != board[nx][ny]:
                return False
    
    return True

def solution(m, n, board):
    answer = 0
    popList = []

    for i in range(m):
        board[i] = list(board[i])    
        
    while True:
        for i in range(m-1):
            for j in range(n-1):
                if board[i][j] == '-': 
                    continue
                    
                if check(board, i, j, n, m):
                    popList.append((i, j))

                    for k in range(3):
                        popList.append((i+dx[k], j+dy[k]))
        
        if len(popList) == 0:
            return answer
        
        popList = sorted(list(set(popList)), reverse=True)
        
        
        # 블록 지우기
        for x, y in popList:
            answer += 1
            board[x][y] = '-'

		
        # 블록 내리기
        for x, y in popList:
            for i in range(x, -1, -1):
                if board[i][y] == '-':
                    for j in range(i-1, -1, -1):
                        if board[j][y] != '-':
                            board[i][y] = board[j][y]
                            board[j][y] = '-'
                            break

        popList = []&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm/Programmers</category>
      <category>kakao</category>
      <category>Python</category>
      <category>simulation</category>
      <category>구현</category>
      <category>시뮬레이션</category>
      <category>카카오</category>
      <category>파이썬</category>
      <author>Dev.sohee</author>
      <guid isPermaLink="true">https://hapbbying.tistory.com/171</guid>
      <comments>https://hapbbying.tistory.com/171#entry171comment</comments>
      <pubDate>Wed, 9 Feb 2022 00:19:21 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] N-Queen - Python</title>
      <link>https://hapbbying.tistory.com/170</link>
      <description>&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #697098;&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/12952&quot;&gt;https://programmers.co.kr/learn/courses/30/lessons/12952&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;figure id=&quot;og_1644163016253&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;코딩테스트 연습 - N-Queen&quot; data-og-description=&quot;가로, 세로 길이가 n인 정사각형으로된 체스판이 있습니다. 체스판 위의 n개의 퀸이 서로를 공격할 수 없도록 배치하고 싶습니다. 예를 들어서 n이 4인경우 다음과 같이 퀸을 배치하면 n개의 퀸은&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/12952&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/12952&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Z0dqj/hyNjN0iW3F/Bw9ZLaKiKRqBQScgdIKUz0/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/bXGH3D/hyNjGNBjhB/nEMlyFhxP6tIDiNAOw1BdK/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/12952&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/12952&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Z0dqj/hyNjN0iW3F/Bw9ZLaKiKRqBQScgdIKUz0/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/bXGH3D/hyNjGNBjhB/nEMlyFhxP6tIDiNAOw1BdK/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;코딩테스트 연습 - N-Queen&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;가로, 세로 길이가 n인 정사각형으로된 체스판이 있습니다. 체스판 위의 n개의 퀸이 서로를 공격할 수 없도록 배치하고 싶습니다. 예를 들어서 n이 4인경우 다음과 같이 퀸을 배치하면 n개의 퀸은&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;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;풀이&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. queen 배열&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ex) queen[1] = 2 -&amp;gt; 1행 2열에 퀸 배치&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. check 함수&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 퀸이 놓일 수 있는지 행, 열, 대각선 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- abs(x-i) == abs(queen[x] - queen[i]) : 대각선 방향 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ex) [2, 3]의 대각선 방향 = [1, 2], [0, 1], [1, 4] / [2, 2]의 대각선 방향 = [1, 1], [0, 0], [3, 3] -&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&amp;gt; 0행에 0~n-1열까지 순서대로 퀸을 놓으면서 경우의 수를 찾는다. dfs로 풀면서 안되는 경우에 해당하면 이전 단계로 돌아가는(가지치기) &lt;b&gt;백트래킹&lt;/b&gt;으로 해결할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1644162066749&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def n_queen(n, x, queen):
    result = 0
    
    if x == n:
        return 1
    
    for i in range(n):
        queen[x] = i
        
        if check(x, queen):
            result += n_queen(n, x+1, queen)

    return result

def check(x, queen):
    for i in range(x):
        if queen[x] == queen[i] or abs(x-i) == abs(queen[x] - queen[i]):
            return False
    return True
    
def solution(n):
    queen = [0] * n
    answer = n_queen(n, 0, queen)
    
    return answer&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm/Programmers</category>
      <category>Python</category>
      <category>백트래킹</category>
      <category>파이썬</category>
      <author>Dev.sohee</author>
      <guid isPermaLink="true">https://hapbbying.tistory.com/170</guid>
      <comments>https://hapbbying.tistory.com/170#entry170comment</comments>
      <pubDate>Mon, 7 Feb 2022 01:17:09 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 후보키 - Python</title>
      <link>https://hapbbying.tistory.com/169</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/42890&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://programmers.co.kr/learn/courses/30/lessons/42890&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1637853050840&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;100&amp;quot;,&amp;quot;ryan&amp;quot;,&amp;quot;music&amp;quot;,&amp;quot;2&amp;quot;],[&amp;quot;200&amp;quot;,&amp;quot;apeach&amp;quot;,&amp;quot;math&amp;quot;,&amp;quot;2&amp;quot;],[&amp;quot;300&amp;quot;,&amp;quot;tube&amp;quot;,&amp;quot;computer&amp;quot;,&amp;quot;3&amp;quot;],[&amp;quot;400&amp;quot;,&amp;quot;con&amp;quot;,&amp;quot;computer&amp;quot;,&amp;quot;4&amp;quot;],[&amp;quot;500&amp;quot;,&amp;quot;muzi&amp;quot;,&amp;quot;music&amp;quot;,&amp;quot;3&amp;quot;],[&amp;quot;600&amp;quot;,&amp;quot;apeach&amp;quot;,&amp;quot;music&amp;quot;,&amp;quot;2&amp;quot;]] 2&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/42890&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/42890&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bfHU1d/hyMuAlb9iv/4XpqkZSe2VPRvaOk2Kewek/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/b9buj7/hyMuCQQwCZ/mSsRH7ZVWnTdDwIjkaPqK1/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/42890&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/42890&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bfHU1d/hyMuAlb9iv/4XpqkZSe2VPRvaOk2Kewek/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/b9buj7/hyMuCQQwCZ/mSsRH7ZVWnTdDwIjkaPqK1/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;100&quot;,&quot;ryan&quot;,&quot;music&quot;,&quot;2&quot;],[&quot;200&quot;,&quot;apeach&quot;,&quot;math&quot;,&quot;2&quot;],[&quot;300&quot;,&quot;tube&quot;,&quot;computer&quot;,&quot;3&quot;],[&quot;400&quot;,&quot;con&quot;,&quot;computer&quot;,&quot;4&quot;],[&quot;500&quot;,&quot;muzi&quot;,&quot;music&quot;,&quot;3&quot;],[&quot;600&quot;,&quot;apeach&quot;,&quot;music&quot;,&quot;2&quot;]] 2&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;h3 data-ke-size=&quot;size23&quot;&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;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1637853592891&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import itertools

def solution(relation):
    row = len(relation)
    col = len(relation[0])
    idx = [i for i in range(col)]
    combinations = []

    for i in range(1, col+1):
        combinations.extend(itertools.combinations(idx, i))  # 모든 속성 인덱스의 조합

    unique = []
    for combination in combinations:
        values = []  # 속성에 해당하는 값

        for row in relation:
            tmp = []  # 조합에 해당하는 속성의 값을 리스트로 묶음
            for i in range(len(combination)):
                tmp.append(row[combination[i]])
            values.append(tmp)

        cnt = True  # 유일성 체크
        for value in values:
            if values.count(value) != 1:
                cnt = False
                break

        if cnt:  # 유일성이 만족되면 최소성 체크
            flag = True
            for key in unique:
                if set(key).issubset(combination):  # 조합이 유일성을 만족하는 키들 중에 부분집합인지
                    flag = False  # 부분집합이면 최소성 불만족
            if flag:  # 최소성 만족
                unique.append(combination)

    return len(unique)&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;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;extend와 append의 차이&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1637854091687&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ex1 = [1, 2, 3] 
ex1.append([4, 5]) 
print(ex1) # [1, 2, 3, [4, 5]) 

ex2 = [1, 2, 3] 
ex2.extend([4, 5]) 
print(ex2) # [1, 2, 3, 4, 5]​&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm/Programmers</category>
      <category>programmers</category>
      <category>Python</category>
      <category>파이썬</category>
      <category>프로그래머스</category>
      <category>후보키</category>
      <author>Dev.sohee</author>
      <guid isPermaLink="true">https://hapbbying.tistory.com/169</guid>
      <comments>https://hapbbying.tistory.com/169#entry169comment</comments>
      <pubDate>Fri, 26 Nov 2021 00:27:06 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 헤비 유저가 소유한 장소 - MySQL</title>
      <link>https://hapbbying.tistory.com/168</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/77487&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://programmers.co.kr/learn/courses/30/lessons/77487&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1637831754760&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;PLACES 테이블은 공간 임대 서비스에 등록된 공간의 정보를 담은 테이블입니다. PLACES 테이블의 구조는 다음과 같으며 ID, NAME, HOST_ID는 각각 공간의 아이디, 이름, 공간을 소유한 유저의 아이디를 &quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/77487&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/77487&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bD4xk8/hyMtzapVX7/GXd6HK2AzbUvEmqJAG0ABK/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/duUkBD/hyMtDDUp0S/Ga1qZaZtzCz6KnexydZsy0/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/77487&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/77487&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bD4xk8/hyMtzapVX7/GXd6HK2AzbUvEmqJAG0ABK/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/duUkBD/hyMtDDUp0S/Ga1qZaZtzCz6KnexydZsy0/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;PLACES 테이블은 공간 임대 서비스에 등록된 공간의 정보를 담은 테이블입니다. PLACES 테이블의 구조는 다음과 같으며 ID, NAME, HOST_ID는 각각 공간의 아이디, 이름, 공간을 소유한 유저의 아이디를&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;pre id=&quot;code_1637831780156&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT ID, NAME, HOST_ID
FROM PLACES
WHERE HOST_ID IN (
    SELECT HOST_ID
    FROM PLACES
    GROUP BY HOST_ID 
    HAVING COUNT(HOST_ID) &amp;gt;= 2
)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm/Programmers</category>
      <category>MySQL</category>
      <category>SQL</category>
      <category>프로그래머스</category>
      <author>Dev.sohee</author>
      <guid isPermaLink="true">https://hapbbying.tistory.com/168</guid>
      <comments>https://hapbbying.tistory.com/168#entry168comment</comments>
      <pubDate>Thu, 25 Nov 2021 18:17:31 +0900</pubDate>
    </item>
    <item>
      <title>[GitHub] git push할 때 발생하는  권한 오류 해결 방법, Personal access token을 이용한 로그인</title>
      <link>https://hapbbying.tistory.com/167</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;remote: Please see&amp;nbsp;&lt;a style=&quot;color: #ee2323;&quot; href=&quot;https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/&quot;&gt;https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/&lt;/a&gt;&amp;nbsp;for more information.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;fatal: unable to access&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;-&amp;gt; 2021.8.13일부터 비밀번호 인증이 없어지고 토큰이나 ssh로 인증을 해야하기 때문에 발생하는 오류&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;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해결 방법&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&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: #000000;&quot;&gt;1. GitHub에서 Personal Access Token 생성하기 -&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;토큰 저장 필수!&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a href=&quot;https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1636715867015&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Creating a personal access token - GitHub Docs&quot; data-og-description=&quot;Note: If you use GitHub CLI to authenticate to GitHub on the command line, you can skip generating a personal access token and authenticate via the web browser instead. For more information about authenticating with GitHub CLI, see gh auth login. Personal &quot; data-og-host=&quot;docs.github.com&quot; data-og-source-url=&quot;https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token&quot; data-og-url=&quot;https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hrKZ7/hyMkztY7ml/2s4upSjZPD5vdrAfPBCzCK/img.png?width=1200&amp;amp;height=1200&amp;amp;face=0_0_1200_1200&quot;&gt;&lt;a href=&quot;https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hrKZ7/hyMkztY7ml/2s4upSjZPD5vdrAfPBCzCK/img.png?width=1200&amp;amp;height=1200&amp;amp;face=0_0_1200_1200');&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;Creating a personal access token - GitHub Docs&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Note: If you use GitHub CLI to authenticate to GitHub on the command line, you can skip generating a personal access token and authenticate via the web browser instead. For more information about authenticating with GitHub CLI, see gh auth login. Personal&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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: #000000;&quot;&gt;2. GitHub 자격 증명 토큰 설정하기 (윈도우)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a href=&quot;https://velog.io/@rimo09/Github-%EC%9C%88%EB%8F%84%EC%9A%B0-git-credential-access-token-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velog.io/@rimo09/Github-%EC%9C%88%EB%8F%84%EC%9A%B0-git-credential-access-token-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1636716057351&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Github] 윈도우 git credential - access token 적용하기&quot; data-og-description=&quot;8월 13일 부터 깃헙의 비밀번호 방식 인증이 사라지고, personal access token을 이용해야 한다는 메세지였다.&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@rimo09/Github-%EC%9C%88%EB%8F%84%EC%9A%B0-git-credential-access-token-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0&quot; data-og-url=&quot;https://velog.io/@rimo09/Github-윈도우-git-credential-access-token-적용하기&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/jJC4O/hyMkDb5Pve/3XV2UYQi84XzOpUx4RtuPk/img.jpg?width=655&amp;amp;height=131&amp;amp;face=0_0_655_131,https://scrap.kakaocdn.net/dn/9GFzY/hyMkDb5PsO/wme6nkNUGlIlPokl3ouT90/img.jpg?width=655&amp;amp;height=131&amp;amp;face=0_0_655_131&quot;&gt;&lt;a href=&quot;https://velog.io/@rimo09/Github-%EC%9C%88%EB%8F%84%EC%9A%B0-git-credential-access-token-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@rimo09/Github-%EC%9C%88%EB%8F%84%EC%9A%B0-git-credential-access-token-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/jJC4O/hyMkDb5Pve/3XV2UYQi84XzOpUx4RtuPk/img.jpg?width=655&amp;amp;height=131&amp;amp;face=0_0_655_131,https://scrap.kakaocdn.net/dn/9GFzY/hyMkDb5PsO/wme6nkNUGlIlPokl3ouT90/img.jpg?width=655&amp;amp;height=131&amp;amp;face=0_0_655_131');&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;[Github] 윈도우 git credential - access token 적용하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;8월 13일 부터 깃헙의 비밀번호 방식 인증이 사라지고, personal access token을 이용해야 한다는 메세지였다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;velog.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. git push할 때 아래 명령어로 입력&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1636715258348&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git push https://{token}@github.com/{username}/{repo_name}.git&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;매번 token 입력하기 귀찮기 때문에 gitconfig 설정을 해준다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. git bash를 관리자 권한으로 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 아래 명령어 입력 -&amp;gt; credential 정보 삭제하기&lt;/p&gt;
&lt;pre id=&quot;code_1636714836036&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git config --global --unset credential.helper&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. git push 하면 뜨는 창에 이름, 비밀번호 입력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 비밀번호에 Personal Access Token 입력하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 이후에는 git push만으로 잘 됨!!&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&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;color: #ee2323;&quot;&gt;&lt;b&gt;remote: No anonymous write access&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;-&amp;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;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해결방법 &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;-&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 파일의 권한 변경해주기&amp;nbsp;&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;size16&quot;&gt;1. 해당 파일의 [속성] - [보안] - [편집] - 권한 수정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) .gitconfig 파일의 사용자 권한을 모든 권한으로 바꿔주기&lt;/p&gt;</description>
      <category>Troubleshooting</category>
      <category>Authentication</category>
      <category>Git</category>
      <category>git push</category>
      <category>git push 오류</category>
      <category>Git 오류</category>
      <category>remote</category>
      <category>깃허브</category>
      <category>깃허브 인증</category>
      <author>Dev.sohee</author>
      <guid isPermaLink="true">https://hapbbying.tistory.com/167</guid>
      <comments>https://hapbbying.tistory.com/167#entry167comment</comments>
      <pubDate>Fri, 12 Nov 2021 20:14:59 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 방금그곡 - Python, Java</title>
      <link>https://hapbbying.tistory.com/166</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/17683&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://programmers.co.kr/learn/courses/30/lessons/17683&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1636709390401&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;코딩테스트 연습 - [3차] 방금그곡&quot; data-og-description=&quot;방금그곡 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 '방금그곡' 서비스를 이용하곤 한다. 방금그곡에서는 TV, &quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/17683&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/17683&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/mR0zG/hyMjDkdoq6/WKIbso67PJCvfGGdNdrgg1/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/uKSEm/hyMjxddVYO/z83ACOxzEBRioPYHu54yqk/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/17683&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/17683&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/mR0zG/hyMjDkdoq6/WKIbso67PJCvfGGdNdrgg1/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/uKSEm/hyMjxddVYO/z83ACOxzEBRioPYHu54yqk/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;코딩테스트 연습 - [3차] 방금그곡&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;방금그곡 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 '방금그곡' 서비스를 이용하곤 한다. 방금그곡에서는 TV,&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;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;풀이과정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 음악이 시작한 시각, 끝난 시각, 음악 제목, 악보 정보로 분리하기 -&amp;gt; ',' 구분자로 분리&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 재생 시간 구하기&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. C#, D# 등 코드 소문자 알파벳으로 바꾸기 -&amp;gt; 함수로 작성 (replace_code())&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3-1. 악보 정보 바꾸기 -&amp;gt; replace_code(&lt;span style=&quot;color: #000000;&quot;&gt;악보 정보)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3-2. 네오가 기억한 멜로디(m) 바꾸기 -&amp;gt; replace_code(네오가 기억한 멜로디)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. 재생 시간만큼의 코드 구하기&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5. 네오가 기억한 멜로디(m)가 구한 코드에 포함되는지 확인&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5-1. Python 풀이의 경우)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;- 포함되면 새로운 배열에 제목과 시간을 저장&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;- 배열의 길이가 1이면 첫번째 인덱스의 제목 리턴&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;- 배열의 길이가 0이면 (None) 리턴&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;- 배열의 길이가 2 이상이면 재생 시간 순으로 정렬하고 첫번째 인덱스의 제목 리턴 (먼저 입력되는 순서대로 저장됐기 때문에 재생 시간 순으로만 정렬해도 상관없음)&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;5-2. Java 풀이의 경우)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - 최대 재생 시간 비교를 위한 변수 필요 -&amp;gt; max&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - 포함되고 max보다 더 크면 answer 갱신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - 최종 answer이 빈 문자열이면 (None) 리턴&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Python&lt;/p&gt;
&lt;pre id=&quot;code_1636709427212&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(m, musicinfos):
    answer = ''
    result = []
    
    for musicinfo in musicinfos:
        info = musicinfo.split(',')
        start = info[0].split(':')
        end = info[1].split(':')
        
        time = (int(end[0]) - int(start[0])) * 60 + int(end[1]) - int(start[1])

        code = replace_code(info[3])
        code = code * (time // len(code)) + code[:time%len(code)]
        
        if replace_code(m) in code:
            result.append([info[2], time])

    if len(result) == 0:
        return &quot;(None)&quot;
    
    else:
        result = sorted(result, key = lambda x: (-x[1]))
        return result[0][0]
    
def replace_code(code):
    code = code.replace('C#', 'c')
    code = code.replace('D#', 'd')
    code = code.replace('F#', 'f')
    code = code.replace('G#', 'g')
    code = code.replace('A#', 'a')
    
    return code&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;2. Java&lt;/p&gt;
&lt;pre id=&quot;code_1636709418342&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    public String solution(String m, String[] musicinfos) {
        String answer = &quot;&quot;;
        int max = 0;
            
        for (String musicinfo: musicinfos) {
            String[] info = musicinfo.split(&quot;,&quot;);
        
            String[] start = info[0].split(&quot;:&quot;);
            String[] end = info[1].split(&quot;:&quot;);
            int time = (Integer.parseInt(end[0]) - Integer.parseInt(start[0])) * 60 + Integer.parseInt(end[1]) - Integer.parseInt(start[1]);
            
            String replaced_code = replace_code(info[3]);
            String code = &quot;&quot;;
            
            for (int i = 0; i &amp;lt; time / replaced_code.length(); i++)
                code += replaced_code;
            
            code += replaced_code.substring(0, time % replaced_code.length());
            
            if (code.contains(replace_code(m))) {
                if (max &amp;lt; time) {
                    max = time;
                    answer = info[2];
                }
            }
        }
        
        if (answer == &quot;&quot;)
            answer = &quot;(None)&quot;;
        
        return answer;
    }
    
    public String replace_code(String code) {
        code = code.replaceAll(&quot;C#&quot;, &quot;c&quot;);
        code = code.replaceAll(&quot;D#&quot;, &quot;d&quot;);
        code = code.replaceAll(&quot;F#&quot;, &quot;f&quot;);
        code = code.replaceAll(&quot;G#&quot;, &quot;g&quot;);
        code = code.replaceAll(&quot;A#&quot;, &quot;a&quot;);

        return code;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm/Programmers</category>
      <category>Java</category>
      <category>kakao</category>
      <category>programmers</category>
      <category>Python</category>
      <category>문자열</category>
      <category>자바</category>
      <category>파이썬</category>
      <category>프로그래머스</category>
      <author>Dev.sohee</author>
      <guid isPermaLink="true">https://hapbbying.tistory.com/166</guid>
      <comments>https://hapbbying.tistory.com/166#entry166comment</comments>
      <pubDate>Fri, 12 Nov 2021 18:48:51 +0900</pubDate>
    </item>
  </channel>
</rss>