<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Barrer. better</title>
    <link>https://barrer.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Thu, 2 Jul 2026 12:46:14 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Barrer</managingEditor>
    <image>
      <title>Barrer. better</title>
      <url>https://tistory1.daumcdn.net/tistory/5373276/attach/38664756ee0a44c184eeed091a99fc55</url>
      <link>https://barrer.tistory.com</link>
    </image>
    <item>
      <title>99클럽 코테 스터디 32/99일차 TIL #리코쳇 로봇(미들러)</title>
      <link>https://barrer.tistory.com/198</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dbIO4I/btsJfCtMZ2b/XVendKu4MBfj0eOsa50t60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dbIO4I/btsJfCtMZ2b/XVendKu4MBfj0eOsa50t60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dbIO4I/btsJfCtMZ2b/XVendKu4MBfj0eOsa50t60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdbIO4I%2FbtsJfCtMZ2b%2FXVendKu4MBfj0eOsa50t60%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;500&quot; height=&quot;500&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 출처 : 프로그래머스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제링크: &lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/169199&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/169199&lt;/a&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1724464014326&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from collections import deque

def solution(board):
    # 보드의 크기
    n, m = len(board), len(board[0])
    
    # 시작점과 목표점 찾기
    start = None
    goal = None
    for i in range(n):
        for j in range(m):
            if board[i][j] == 'R':
                start = (i, j)
            elif board[i][j] == 'G':
                goal = (i, j)
    
    # BFS 초기화
    queue = deque([(start[0], start[1], 0)])  # (x, y, 이동 횟수)
    visited = [[False] * m for _ in range(n)]
    visited[start[0]][start[1]] = True
    
    # 네 방향 (상, 하, 좌, 우)
    directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]
    
    while queue:
        x, y, dist = queue.popleft()
        
        # 목표에 도달한 경우
        if (x, y) == goal:
            return dist
        
        # 네 방향에 대해 이동 시도
        for dx, dy in directions:
            nx, ny = x, y
            
            # 장애물 또는 경계에 닿을 때까지 이동
            while 0 &amp;lt;= nx + dx &amp;lt; n and 0 &amp;lt;= ny + dy &amp;lt; m and board[nx + dx][ny + dy] != 'D':
                nx += dx
                ny += dy
            
            # 이동한 위치가 방문되지 않았을 경우 큐에 추가
            if not visited[nx][ny]:
                visited[nx][ny] = True
                queue.append((nx, ny, dist + 1))
    
    # 목표 지점에 도달하지 못한 경우
    return -1&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Career/Coding Test</category>
      <author>Barrer</author>
      <guid isPermaLink="true">https://barrer.tistory.com/198</guid>
      <comments>https://barrer.tistory.com/198#entry198comment</comments>
      <pubDate>Sat, 24 Aug 2024 10:47:48 +0900</pubDate>
    </item>
    <item>
      <title>99클럽 코테 스터디 30/99일차 TIL #점프점프(미들러)</title>
      <link>https://barrer.tistory.com/197</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1gm80/btsJaL6TXyc/gIOJMuBwKUEgKoA1gCVke1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1gm80/btsJaL6TXyc/gIOJMuBwKUEgKoA1gCVke1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1gm80/btsJaL6TXyc/gIOJMuBwKUEgKoA1gCVke1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1gm80%2FbtsJaL6TXyc%2FgIOJMuBwKUEgKoA1gCVke1%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;500&quot; height=&quot;500&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 출처: 백준&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/14248&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/14248&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1724290403519&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)

n = int(input().rstrip())
bridge = list(map(int, input().split()))
s = int(input().rstrip()) - 1  # 0-indexed로 변경
visited = [False] * n
cnt = 0

def dfs(x):
    global cnt
    visited[x] = True
    cnt += 1
    
    for direction in [1, -1]:
        nx = x + direction * bridge[x]
        if 0 &amp;lt;= nx &amp;lt; n and not visited[nx]:
            dfs(nx)

dfs(s)
print(cnt)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Career/Coding Test</category>
      <author>Barrer</author>
      <guid isPermaLink="true">https://barrer.tistory.com/197</guid>
      <comments>https://barrer.tistory.com/197#entry197comment</comments>
      <pubDate>Thu, 22 Aug 2024 10:39:02 +0900</pubDate>
    </item>
    <item>
      <title>99클럽 코테 스터디 29/99일차 TIL #Find Right Interval(미들러)</title>
      <link>https://barrer.tistory.com/196</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bni2EY/btsJamLLHBu/YhBTOM1X4fld8avpI5Q1V1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bni2EY/btsJamLLHBu/YhBTOM1X4fld8avpI5Q1V1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bni2EY/btsJamLLHBu/YhBTOM1X4fld8avpI5Q1V1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbni2EY%2FbtsJamLLHBu%2FYhBTOM1X4fld8avpI5Q1V1%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;500&quot; height=&quot;500&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/find-right-interval/description/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://leetcode.com/problems/find-right-interval/description/&lt;/a&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1724205156711&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import bisect

def findRightInterval(intervals):
    n = len(intervals)
    # 구간의 시작점을 기준으로 정렬합니다.
    start_points = sorted((interval[0], i) for i, interval in enumerate(intervals))
    result = []
    
    for interval in intervals:
        # 현재 구간의 끝점을 기준으로 이진 탐색 수행
        end = interval[1]
        idx = bisect.bisect_left(start_points, (end,))
        
        # 만약 이진 탐색 결과가 리스트 길이보다 작다면, 해당 인덱스의 시작점이 구간의 끝점보다 큽니다.
        if idx &amp;lt; n:
            result.append(start_points[idx][1])
        else:
            result.append(-1)
    
    return result&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Career/Coding Test</category>
      <author>Barrer</author>
      <guid isPermaLink="true">https://barrer.tistory.com/196</guid>
      <comments>https://barrer.tistory.com/196#entry196comment</comments>
      <pubDate>Wed, 21 Aug 2024 10:53:11 +0900</pubDate>
    </item>
    <item>
      <title>99클럽 코테 스터디 29/99일차 TIL #이분탐색(미들러)</title>
      <link>https://barrer.tistory.com/195</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eQHj7D/btsI9dagTvk/3Gyu3UqaG7VJxR120xfkXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eQHj7D/btsI9dagTvk/3Gyu3UqaG7VJxR120xfkXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eQHj7D/btsI9dagTvk/3Gyu3UqaG7VJxR120xfkXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeQHj7D%2FbtsI9dagTvk%2F3Gyu3UqaG7VJxR120xfkXk%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;500&quot; height=&quot;500&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/longest-increasing-subsequence/description/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://leetcode.com/problems/longest-increasing-subsequence/description/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1724117610684&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution:
    def lengthOfLIS(self, nums: List[int]) -&amp;gt; int:
    # def lengthOfLIS(nums):
        if not nums:
            return 0
        
        dp = [1] * len(nums)
        
        for j in range(1, len(nums)):
            for i in range(j):
                if nums[j] &amp;gt; nums[i]:
                    dp[j] = max(dp[j], dp[i] + 1)
        
        return max(dp)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Career/Coding Test</category>
      <author>Barrer</author>
      <guid isPermaLink="true">https://barrer.tistory.com/195</guid>
      <comments>https://barrer.tistory.com/195#entry195comment</comments>
      <pubDate>Tue, 20 Aug 2024 10:33:46 +0900</pubDate>
    </item>
    <item>
      <title>99클럽 코테 스터디 28/99일차 TIL #괄호 회전하기(미들러)</title>
      <link>https://barrer.tistory.com/194</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqgRe8/btsI7pWwbKc/T63HY8gndYtuyNZygyeHjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqgRe8/btsI7pWwbKc/T63HY8gndYtuyNZygyeHjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqgRe8/btsI7pWwbKc/T63HY8gndYtuyNZygyeHjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqgRe8%2FbtsI7pWwbKc%2FT63HY8gndYtuyNZygyeHjk%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;500&quot; height=&quot;500&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제: &lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/76502&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/76502&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1724029713760&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/76502&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dcCyLJ/hyWOrmNIWh/GolKEl3cPVWjXcxtPf5ICK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/WB90x/hyWShJzWon/kwdphY1Pc9xl1ilmxlTO40/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/76502&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/76502&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dcCyLJ/hyWOrmNIWh/GolKEl3cPVWjXcxtPf5ICK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/WB90x/hyWShJzWon/kwdphY1Pc9xl1ilmxlTO40/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;p data-ke-size=&quot;size16&quot;&gt;]&lt;/p&gt;
&lt;pre id=&quot;code_1724029718065&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def is_valid_bracket_string(s):
    stack = []
    bracket_map = {')': '(', ']': '[', '}': '{'}
    
    for char in s:
        if char in bracket_map.values():  # 여는 괄호
            stack.append(char)
        elif char in bracket_map.keys():  # 닫는 괄호
            if stack and stack[-1] == bracket_map[char]:
                stack.pop()
            else:
                return False
    return len(stack) == 0

def solution(s):
    valid_count = 0
    
    for i in range(len(s)):
        rotated_s = s[i:] + s[:i]  # 문자열을 왼쪽으로 i칸 회전
        if is_valid_bracket_string(rotated_s):
            valid_count += 1
    
    return valid_count&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Career/Coding Test</category>
      <author>Barrer</author>
      <guid isPermaLink="true">https://barrer.tistory.com/194</guid>
      <comments>https://barrer.tistory.com/194#entry194comment</comments>
      <pubDate>Mon, 19 Aug 2024 10:08:59 +0900</pubDate>
    </item>
    <item>
      <title>99클럽 코테 스터디 27/99일차 TIL #할인 행사(미들러)</title>
      <link>https://barrer.tistory.com/193</link>
      <description>&lt;pre id=&quot;code_1723945201444&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;'''
일정 금액 지불 -&amp;gt; 10일간 회원
회원: 매일 한 가지 할인 -&amp;gt; 하루에 하나만 구매 가능
자신이 원하는 제품과 수량이 할인하는 날짜랑 10일 연속으로 일치할 경우 회원가입

discount=[&quot;chicken&quot;, &quot;apple&quot;, &quot;apple&quot;, &quot;banana&quot;, &quot;rice&quot;, &quot;apple&quot;, &quot;pork&quot;, &quot;banana&quot;, &quot;pork&quot;, &quot;rice&quot;, &quot;pot&quot;, &quot;banana&quot;, &quot;apple&quot;, &quot;banana&quot;]	
want=[&quot;banana&quot;, &quot;apple&quot;, &quot;rice&quot;, &quot;pork&quot;, &quot;pot&quot;]	
number=[3, 2, 2, 2, 1]	
=&amp;gt; want_dict = dict(zip(want, number))


'''

from collections import Counter

def solution(want, number, discount):
    # 필요한 제품과 수량을 딕셔너리로 저장
    want_dict = dict(zip(want, number))
    days = len(discount) - 9  # 10일 연속 기간을 검사할 수 있는 시작 지점 수
    
    valid_days = 0
    
    for i in range(days):
        # 현재 10일간의 할인 제품 리스트
        current_window = discount[i:i+10]
        # 이 구간의 제품 수량을 카운트
        current_count = Counter(current_window)
        
        # 모든 제품이 원하는 수량만큼 있는지 확인
        if all(current_count[item] &amp;gt;= want_dict[item] for item in want_dict):
            valid_days += 1
    
    return valid_days&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Career/Coding Test</category>
      <author>Barrer</author>
      <guid isPermaLink="true">https://barrer.tistory.com/193</guid>
      <comments>https://barrer.tistory.com/193#entry193comment</comments>
      <pubDate>Sun, 18 Aug 2024 10:40:23 +0900</pubDate>
    </item>
    <item>
      <title>99클럽 코테 스터디 26/99일차 TIL #달리기 경주(미들러)</title>
      <link>https://barrer.tistory.com/192</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjCpYr/btsI4SrHtFD/vrlkINCP80zQoxnre0wO5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjCpYr/btsI4SrHtFD/vrlkINCP80zQoxnre0wO5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjCpYr/btsI4SrHtFD/vrlkINCP80zQoxnre0wO5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjCpYr%2FbtsI4SrHtFD%2FvrlkINCP80zQoxnre0wO5k%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;500&quot; height=&quot;500&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/178871&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/178871&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1723777532226&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/178871&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/gl8VC/hyWOjaQchA/utRgC5KxtQuGlyI4cDMI5K/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/wC2Mn/hyWSjNNckS/gXcawwA6Uqg4tYHJoIK2C0/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/178871&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/178871&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/gl8VC/hyWOjaQchA/utRgC5KxtQuGlyI4cDMI5K/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/wC2Mn/hyWSjNNckS/gXcawwA6Uqg4tYHJoIK2C0/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;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;br /&gt;얀에서는 매년 달리기 경주가 열립니다. 해설진들은 선수들이 자기 바로 앞의 선수를 추월할 때 추월한 선수의 이름을 부릅니다. 예를 들어 1등부터 3등까지 &quot;mumu&quot;, &quot;soe&quot;, &quot;poe&quot; 선수들이 순서대로 달리고 있을 때, 해설진이 &quot;soe&quot;선수를 불렀다면 2등인 &quot;soe&quot; 선수가 1등인 &quot;mumu&quot; 선수를 추월했다는 것입니다. 즉 &quot;soe&quot; 선수가 1등, &quot;mumu&quot; 선수가 2등으로 바뀝니다.&lt;br /&gt;선수들의 이름이 1등부터 현재 등수 순서대로 담긴 문자열 배열&amp;nbsp;players와 해설진이 부른 이름을 담은 문자열 배열&amp;nbsp;callings가 매개변수로 주어질 때, 경주가 끝났을 때 선수들의 이름을 1등부터 등수 순서대로 배열에 담아 return 하는 solution 함수를 완성해주세요.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1223&quot; data-origin-height=&quot;860&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAy6q5/btsI5yy7QnR/FjILT5R2uVW90GairYeb5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAy6q5/btsI5yy7QnR/FjILT5R2uVW90GairYeb5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAy6q5/btsI5yy7QnR/FjILT5R2uVW90GairYeb5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAy6q5%2FbtsI5yy7QnR%2FFjILT5R2uVW90GairYeb5k%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;1223&quot; height=&quot;860&quot; data-origin-width=&quot;1223&quot; data-origin-height=&quot;860&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자기&amp;nbsp;바로&amp;nbsp;앞의&amp;nbsp;선수를&amp;nbsp;추월할&amp;nbsp;때&amp;nbsp;추월한&amp;nbsp;선수의&amp;nbsp;이름&amp;nbsp;부름 &lt;br /&gt;&lt;br /&gt;해당&amp;nbsp;이름이&amp;nbsp;불리면&amp;nbsp;index를&amp;nbsp;한&amp;nbsp;칸&amp;nbsp;앞으로&amp;nbsp;당기기 &lt;br /&gt;1등은&amp;nbsp;불리지&amp;nbsp;않음&lt;/p&gt;
&lt;pre id=&quot;code_1723777593718&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(players, callings):
    
    
    for calling in callings:
        idx = players.index(calling)
        players.remove(calling)
        players.insert(idx-1, calling)        
        
    return players&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;시간 초과가 발생하는 이유는 players.index(calling)와 같은 리스트 연산이 호출될 때마다 리스트를 순회하기 때문입니다. index, remove, insert 같은 연산은 리스트의 길이에 비례하는 O(n)의 시간 복잡도를 가지기 때문에, 호출이 많아지면 전체 연산이 매우 느려질 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 해결하기 위해 더 효율적인 방법을 사용해야 합니다. 여기서는 리스트와 딕셔너리를 함께 사용하여 문제를 해결하는 방법을 설명하겠습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;개선된 접근 방법&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;플레이어의 위치를 저장하는 딕셔너리 사용&lt;/b&gt;: 각 플레이어의 현재 인덱스를 기록하는 딕셔너리를 생성합니다. 이렇게 하면 특정 플레이어의 위치를 O(1) 시간 복잡도로 찾을 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;인덱스 업데이트&lt;/b&gt;: 호출된 플레이어와 그 앞에 있는 플레이어의 위치를 서로 바꿉니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1723777573272&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(players, callings):
   
    
    for calling in callings:
    
        idx = players.index(calling)

        players[idx], players[idx-1] = players[idx-1], players[idx]

    
    return players&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리스트에서 index를 찾는 것 역시 O(n)의 연산 복잡도를 가지기 때문에 앞에 방식과 동일한 O(n)이므로 동일하게 시간초과 발생.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 여기서 남은언 index를 list의 함수를 쓰는 것이 아닌 다른 방법을 써야한다는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 중 가장 쉬운 방법이 dictionary를 사용하는 것이다.&lt;/p&gt;
&lt;pre id=&quot;code_1723777631172&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(players, callings):

    position = {player:i for i, player in enumerate(players)}
    
    for calling in callings:
        
        idx = position[calling]
        # players[idx]: current player 
        # players[idx-1]: ahead player 
        
        # players[idx]: ahead player 
        # players[idx-1]: current player 
        players[idx], players[idx-1] = players[idx-1], players[idx]
        
        # current player에 ahead player의 idx로 변경
        position[players[idx]] = idx
        # ahead player에 current player의 idx로 변경
        position[players[idx-1]] = idx-1
    
    
    return players&lt;/code&gt;&lt;/pre&gt;
&lt;div style=&quot;color: #5f7f90;&quot;&gt;정확성 테스트&lt;/div&gt;
&lt;table style=&quot;color: #000000; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-category=&quot;correctness&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;color: #000000;&quot;&gt;
&lt;tr style=&quot;color: #000000;&quot; data-testcase-id=&quot;183013&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #44576c; text-align: right;&quot;&gt;테스트 1 &lt;span style=&quot;color: #000000;&quot;&gt;〉&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #0078ff;&quot;&gt;통과 (0.01ms, 10.2MB)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot; data-testcase-id=&quot;183014&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #44576c; text-align: right;&quot;&gt;테스트 2 &lt;span style=&quot;color: #000000;&quot;&gt;〉&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #0078ff;&quot;&gt;통과 (0.01ms, 10.2MB)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot; data-testcase-id=&quot;183015&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #44576c; text-align: right;&quot;&gt;테스트 3 &lt;span style=&quot;color: #000000;&quot;&gt;〉&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #0078ff;&quot;&gt;통과 (0.04ms, 10.3MB)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot; data-testcase-id=&quot;183016&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #44576c; text-align: right;&quot;&gt;테스트 4 &lt;span style=&quot;color: #000000;&quot;&gt;〉&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #0078ff;&quot;&gt;통과 (0.29ms, 10.1MB)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot; data-testcase-id=&quot;183017&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #44576c; text-align: right;&quot;&gt;테스트 5 &lt;span style=&quot;color: #000000;&quot;&gt;〉&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #0078ff;&quot;&gt;통과 (1.74ms, 10.6MB)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot; data-testcase-id=&quot;183018&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #44576c; text-align: right;&quot;&gt;테스트 6 &lt;span style=&quot;color: #000000;&quot;&gt;〉&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #0078ff;&quot;&gt;통과 (5.89ms, 10.9MB)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot; data-testcase-id=&quot;183019&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #44576c; text-align: right;&quot;&gt;테스트 7 &lt;span style=&quot;color: #000000;&quot;&gt;〉&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #0078ff;&quot;&gt;통과 (34.22ms, 14.3MB)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot; data-testcase-id=&quot;183020&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #44576c; text-align: right;&quot;&gt;테스트 8 &lt;span style=&quot;color: #000000;&quot;&gt;〉&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #0078ff;&quot;&gt;통과 (52.48ms, 18.8MB)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot; data-testcase-id=&quot;183021&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #44576c; text-align: right;&quot;&gt;테스트 9 &lt;span style=&quot;color: #000000;&quot;&gt;〉&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #0078ff;&quot;&gt;통과 (94.79ms, 27.8MB)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot; data-testcase-id=&quot;183022&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #44576c; text-align: right;&quot;&gt;테스트 10 &lt;span style=&quot;color: #000000;&quot;&gt;〉&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #0078ff;&quot;&gt;통과 (277.24ms, 56.7MB)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot; data-testcase-id=&quot;183023&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #44576c; text-align: right;&quot;&gt;테스트 11 &lt;span style=&quot;color: #000000;&quot;&gt;〉&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #0078ff;&quot;&gt;통과 (563.33ms, 91.6MB)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot; data-testcase-id=&quot;183024&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #44576c; text-align: right;&quot;&gt;테스트 12 &lt;span style=&quot;color: #000000;&quot;&gt;〉&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #0078ff;&quot;&gt;통과 (552.90ms, 91.6MB)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot; data-testcase-id=&quot;183025&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #44576c; text-align: right;&quot;&gt;테스트 13 &lt;span style=&quot;color: #000000;&quot;&gt;〉&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #0078ff;&quot;&gt;통과 (616.09ms, 91.5MB)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot; data-testcase-id=&quot;202780&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #44576c; text-align: right;&quot;&gt;테스트 14 &lt;span style=&quot;color: #000000;&quot;&gt;〉&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #0078ff;&quot;&gt;통과 (0.01ms, 10.2MB)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot; data-testcase-id=&quot;202781&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #44576c; text-align: right;&quot;&gt;테스트 15 &lt;span style=&quot;color: #000000;&quot;&gt;〉&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #0078ff;&quot;&gt;통과 (0.01ms, 10.3MB)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot; data-testcase-id=&quot;202782&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #44576c; text-align: right;&quot;&gt;테스트 16 &lt;span style=&quot;color: #000000;&quot;&gt;〉&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #0078ff;&quot;&gt;통과 (0.01ms, 10MB)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;color: #98a8b9;&quot;&gt;채점 결과&lt;/div&gt;
&lt;div style=&quot;color: #5f7f90;&quot;&gt;정확성: 100.0&lt;/div&gt;
&lt;div style=&quot;color: #5f7f90;&quot;&gt;합계: 100.0 / 100.0&lt;/div&gt;</description>
      <category>Career/Coding Test</category>
      <author>Barrer</author>
      <guid isPermaLink="true">https://barrer.tistory.com/192</guid>
      <comments>https://barrer.tistory.com/192#entry192comment</comments>
      <pubDate>Fri, 16 Aug 2024 12:09:41 +0900</pubDate>
    </item>
    <item>
      <title>99클럽 코테 스터디 25/99일차 TIL #그래프(미들러)</title>
      <link>https://barrer.tistory.com/191</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnPLgl/btsI4uqHDA7/Gi8069KSrX0YGmk7v7WnZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnPLgl/btsI4uqHDA7/Gi8069KSrX0YGmk7v7WnZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnPLgl/btsI4uqHDA7/Gi8069KSrX0YGmk7v7WnZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnPLgl%2FbtsI4uqHDA7%2FGi8069KSrX0YGmk7v7WnZk%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;500&quot; height=&quot;500&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h1&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h1&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h1&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h1&gt;DFS(깊이 우선 탐색) 알고리즘: 기초 개념과 2D 그리드에서의 활용&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;깊이 우선 탐색(DFS, Depth-First Search)은 그래프나 트리에서 널리 사용되는 탐색 알고리즘이다. DFS는 시작 노드에서 출발해 가능한 한 깊이까지 탐색한 후, 더 이상 갈 곳이 없으면 이전 단계로 돌아와 다른 경로를 탐색하는 방식으로 동작한다. 이 글에서는 DFS의 기초 개념과 함께, 2D 그리드에서의 활용 방법을 설명한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. DFS의 기본 개념&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DFS는 그래프나 트리에서 주어진 시작 노드에서 출발하여 모든 노드를 방문하는 알고리즘이다. DFS는 일반적으로 재귀적으로 구현되며, 다음과 같은 기본 구조를 갖는다.&lt;/p&gt;
&lt;pre id=&quot;code_1723769924539&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def dfs(graph, node, visited):
    visited.add(node)
    for neighbor in graph[node]:
        if neighbor not in visited:
            dfs(graph, neighbor, visited)&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;위 코드에서 graph는 그래프를 나타내며, node는 현재 탐색 중인 노드를 의미한다. visited는 이미 방문한 노드를 추적하기 위한 집합(set)이다. DFS는 현재 노드를 방문 처리한 후, 연결된 모든 이웃 노드를 재귀적으로 탐색한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. DFS의 2D 그리드에서의 활용&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DFS는 2D 그리드에서도 유용하게 사용된다. 2D 그리드는 행(row)과 열(column)로 구성된 2차원 배열이며, 각 셀은 특정 좌표 (x, y)로 접근할 수 있다. DFS를 활용하여 그리드 내에서 특정 경로를 탐색하거나, 연결된 영역을 찾는 등의 작업을 수행할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2D 그리드에서의 DFS 구현은 다음과 같은 형태를 갖는다.&lt;/p&gt;
&lt;pre id=&quot;code_1723769962053&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def dfs(grid, x, y, visited):
    if x &amp;lt; 0 or x &amp;gt;= len(grid) or y &amp;lt; 0 or y &amp;gt;= len(grid[0]):
        return
    if (x, y) in visited or grid[x][y] == '#':
        return
    
    visited.add((x, y))
    print(f&quot;Visited: ({x}, {y})&quot;)
    
    dfs(grid, x + 1, y, visited)  # 아래로 이동
    dfs(grid, x - 1, y, visited)  # 위로 이동
    dfs(grid, x, y + 1, visited)  # 오른쪽으로 이동
    dfs(grid, x, y - 1, visited)  # 왼쪽으로 이동&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드는 그리드의 특정 좌표 (x, y)에서 출발하여 상하좌우로 이동하며 탐색을 진행한다. 방문한 셀은 visited 집합에 추가되어 다시 방문하지 않도록 한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 조건문을 통한 유효성 검사&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DFS를 2D 그리드에서 사용할 때는 좌표의 유효성을 확인하는 것이 중요하다. 다음 조건문을 통해 그리드 범위를 벗어난 좌표나 이미 방문했거나 벽으로 표시된 셀에 대한 탐색을 중지할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1723769976444&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if x &amp;lt; 0 or x &amp;gt;= len(grid) or y &amp;lt; 0 or y &amp;gt;= len(grid[0]):
    return&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;x &amp;lt; 0, y &amp;lt; 0: 그리드의 범위를 벗어난 좌표를 처리한다.&lt;br /&gt;x &amp;gt;= len(grid), y &amp;gt;= len(grid[0]): 그리드의 오른쪽 경계 또는 아래쪽 경계를 벗어난 좌표를 처리한다.&lt;br /&gt;이 조건문은 그리드 범위 내에서만 탐색이 이루어지도록 보장한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 탐색 경로의 기록과 반환&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DFS를 수행하면서 탐색한 경로를 기록하고 반환하는 방법도 있다. 이는 경로를 추적하거나 분석할 때 유용하다. 다음은 탐색 경로를 기록하여 반환하는 예제 코드이다.&lt;/p&gt;
&lt;pre id=&quot;code_1723769995860&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def dfs_path(grid, x, y, visited, path):
    if x &amp;lt; 0 or x &amp;gt;= len(grid) or y &amp;lt; 0 or y &amp;gt;= len(grid[0]):
        return
    if (x, y) in visited or grid[x][y] == '#':
        return
    
    visited.add((x, y))
    path.append((x, y))
    
    dfs_path(grid, x + 1, y, visited, path)
    dfs_path(grid, x - 1, y, visited, path)
    dfs_path(grid, x, y + 1, visited, path)
    dfs_path(grid, x, y - 1, visited, path)

    return path

visited = set()
path = dfs_path(grid, 0, 0, visited, [])
print(&quot;DFS 탐색 경로:&quot;, path)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드는 그리드의 (0, 0)에서 출발하여 가능한 경로를 모두 탐색하고, 탐색한 경로를 리스트로 반환한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 결론&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DFS는 그래프와 2D 그리드에서 강력한 탐색 도구이다. 2D 그리드에서의 DFS는 좌표의 유효성 검사와 방문 처리, 경로 기록을 통해 다양한 문제를 해결할 수 있다. 이 글에서 다룬 내용을 통해 DFS의 기본 개념과 2D 그리드에서의 활용 방법을 이해할 수 있을 것이다.&lt;/p&gt;</description>
      <category>Career/Coding Test</category>
      <author>Barrer</author>
      <guid isPermaLink="true">https://barrer.tistory.com/191</guid>
      <comments>https://barrer.tistory.com/191#entry191comment</comments>
      <pubDate>Fri, 16 Aug 2024 10:00:20 +0900</pubDate>
    </item>
    <item>
      <title>99클럽 코테 스터디 24/99일차 TIL #대충 만든 자판(미들러)</title>
      <link>https://barrer.tistory.com/190</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yp8QO/btsI4YLBxP3/vUvm1OawKc3K1nxs6Nij4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yp8QO/btsI4YLBxP3/vUvm1OawKc3K1nxs6Nij4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yp8QO/btsI4YLBxP3/vUvm1OawKc3K1nxs6Nij4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fyp8QO%2FbtsI4YLBxP3%2FvUvm1OawKc3K1nxs6Nij4K%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;500&quot; height=&quot;500&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 이해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1번&amp;nbsp;=&amp;gt;&amp;nbsp;A &lt;br /&gt;2번&amp;nbsp;=&amp;gt;&amp;nbsp;B &lt;br /&gt;3번&amp;nbsp;=&amp;gt;&amp;nbsp;C &lt;br /&gt;&lt;br /&gt;1&amp;lt;=키&amp;nbsp;개수&amp;lt;=100 &lt;br /&gt;같은&amp;nbsp;문자가&amp;nbsp;여러번&amp;nbsp;할당,&amp;nbsp;키&amp;nbsp;하나에&amp;nbsp;같은&amp;nbsp;문자&amp;nbsp;여러번&amp;nbsp;할당 &lt;br /&gt;할당&amp;nbsp;안된&amp;nbsp;경우 &lt;br /&gt;&lt;br /&gt;최소&amp;nbsp;몇번&amp;nbsp;눌러야&amp;nbsp;문자열&amp;nbsp;작성&amp;nbsp;가능한지&amp;nbsp;=&amp;gt;&amp;nbsp;완전&amp;nbsp;탐색 &lt;br /&gt;&lt;br /&gt;keymap&amp;nbsp;=&amp;nbsp;[&quot;ABACD&quot;,&amp;nbsp;&quot;BCEFD&quot;] &lt;br /&gt;0번키&amp;nbsp;누르면&amp;nbsp;나오는&amp;nbsp;배열:&amp;nbsp;ABACD&amp;nbsp; &lt;br /&gt;1번키&amp;nbsp;누르면&amp;nbsp;나오는&amp;nbsp;배열:&amp;nbsp;BCEFD &lt;br /&gt;-&amp;gt;&amp;nbsp;ABCD &lt;br /&gt;(0,1),&amp;nbsp;(1,1),&amp;nbsp;(1,2),&amp;nbsp;(0,5)&amp;nbsp;&amp;nbsp;=&amp;gt;&amp;nbsp;9 &lt;br /&gt;특정&amp;nbsp;문자가&amp;nbsp;특정&amp;nbsp;키에서&amp;nbsp;가장&amp;nbsp;먼저&amp;nbsp;나오는&amp;nbsp;것을&amp;nbsp;찾고&amp;nbsp;그&amp;nbsp;인덱스를&amp;nbsp;반환 &lt;br /&gt;&lt;br /&gt;없는&amp;nbsp;경우&amp;nbsp;-1&amp;nbsp;return &lt;br /&gt;&lt;br /&gt;lst&amp;nbsp;=&amp;nbsp;[] &lt;br /&gt;keymap&amp;nbsp;=&amp;gt;&amp;nbsp;dic으로&amp;nbsp;만들고 &lt;br /&gt;target을&amp;nbsp;돌면서&amp;nbsp; &lt;br /&gt;for&amp;nbsp;words&amp;nbsp;in&amp;nbsp;target: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cnt&amp;nbsp;=&amp;nbsp;0 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;word&amp;nbsp;in&amp;nbsp;words: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;word&amp;nbsp;가&amp;nbsp;있는지 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;없으면&amp;nbsp;-1&amp;nbsp;return &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;있으면&amp;nbsp;두&amp;nbsp;리스트&amp;nbsp;중에&amp;nbsp;인덱스&amp;nbsp;값이&amp;nbsp;가장&amp;nbsp;작은&amp;nbsp;값을&amp;nbsp;cnt&amp;nbsp;+ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lst.append(cnt) &lt;br /&gt;&lt;br /&gt;targets&amp;nbsp;=&amp;nbsp;[&quot;ABCD&quot;,&quot;AABB&quot;] &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1723680471927&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(keymap, targets):
    
#     keymap을 딕셔너리로 만들기
    key_dic = {}
        
    for i in keymap:
        for key in i:
            if key not in key_dic:
                key_dic[key] = i.index(key)
            else:
                key_dic[key] = min(key_dic[key], i.index(key))
    # print(key_dic)
    
    result_dic = []
    for target in targets:
        cnt = 0
        for search_char in target:
            
            # print(search_char, key_dic)
            if search_char in key_dic:
                cnt += key_dic[search_char]+1
            else:
                cnt = -1
                break
        
        
        result_dic.append(cnt)
        
            
    return result_dic&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Career/Coding Test</category>
      <author>Barrer</author>
      <guid isPermaLink="true">https://barrer.tistory.com/190</guid>
      <comments>https://barrer.tistory.com/190#entry190comment</comments>
      <pubDate>Thu, 15 Aug 2024 09:08:10 +0900</pubDate>
    </item>
    <item>
      <title>99클럽 코테 스터디 22/99일차 TIL #멀리 뛰기(미들러)</title>
      <link>https://barrer.tistory.com/189</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIOyDD/btsI1l1N3vc/NEPO25Pky9HRtqlxv6NEK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIOyDD/btsI1l1N3vc/NEPO25Pky9HRtqlxv6NEK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIOyDD/btsI1l1N3vc/NEPO25Pky9HRtqlxv6NEK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIOyDD%2FbtsI1l1N3vc%2FNEPO25Pky9HRtqlxv6NEK0%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;500&quot; height=&quot;500&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1723510197312&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;'''
경우의 수
한 번에 1칸 또는 2칸
1로 개수 만들고,
2개씩 줄이면서 개수 늘리고
2의 위치 개수

1로 만들어진 숫자 1개
2의 개수 = 0~ n//2개


2의 개수 0개~ n/2

total num = n
2의개수, 1의 개수 =  a, n-

'''

import math

def solution(n):
    total_count = 0
    
    for cnt_2 in range(0, n // 2 + 1):
        cnt_1 = n - 2 * cnt_2
        total_steps = cnt_1 + cnt_2
        
        # 조합의 개수 계산: total_steps! / (cnt_2! * cnt_1!)
        combinations = math.factorial(total_steps) // (math.factorial(cnt_2) * math.factorial(cnt_1))
        
        total_count += combinations
    
    return total_count % 1234567&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Career/Coding Test</category>
      <author>Barrer</author>
      <guid isPermaLink="true">https://barrer.tistory.com/189</guid>
      <comments>https://barrer.tistory.com/189#entry189comment</comments>
      <pubDate>Tue, 13 Aug 2024 09:50:07 +0900</pubDate>
    </item>
  </channel>
</rss>