<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Sujin's Log</title>
    <link>https://suucong.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Tue, 19 May 2026 21:12:45 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>rohsuujin</managingEditor>
    <image>
      <title>Sujin's Log</title>
      <url>https://tistory1.daumcdn.net/tistory/5887482/attach/61cd0edac3004e3fa114263e2e752e17</url>
      <link>https://suucong.tistory.com</link>
    </image>
    <item>
      <title>[백준] 최단경로(골드4)</title>
      <link>https://suucong.tistory.com/105</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제 링크&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1753&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/1753&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;힙큐&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;힙큐는 우선순위 큐라고도 하는데, 제일 작은 수를 제일 먼저 pop 할 수 있도록 해주는 큐이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 항상 pop을 하면 제일 작은 수가 먼저 pop이 되기 때문에 greedy 탐욕적이라고 불리기도 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;다익스트라 알고리즘 이용 문제&lt;/b&gt;&lt;/h2&gt;
&lt;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_1759312135327&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;V, E = map(int, input().split())
K = int(input())
graph = [[] for _ in range(V + 1)]
for _ in range(E):
    u, v, w = map(int, input().split())
    graph[u].append((v, w))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래프는 이런식으로 코드를 구현하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1759312208659&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;weights = [float('inf')] * (V + 1)
weights[K] = 0
wq = [(0, K)]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 시작점인 K를 기준으로 각 노드까지의 최단 거리를 담은 weights 배열을 생성하였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;힙큐를 돌면서&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미 더 좋은 경로를 찾았을 경우&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;groovy&quot;&gt;&lt;code&gt;if weights[cnt_node] &amp;lt; cnt_weight:
    continue&lt;/code&gt;&lt;/pre&gt;
&lt;/div&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;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;inform7&quot;&gt;&lt;code&gt;for neighbor, weight in graph[cnt_node]:
    weight = cnt_weight + weight

    if weight &amp;lt; weights[neighbor]:
        weights[neighbor] = weight
        heapq.heappush(wq, (weight, neighbor))
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;inform7&quot;&gt;&lt;code&gt;for neighbor, weight in graph[cnt_node]:
    weight = cnt_weight + weight

    if weight &amp;lt; weights[neighbor]:
        weights[neighbor] = weight
        heapq.heappush(wq, (weight, neighbor))&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;연결 노드들을 탐색하며 끝까지 돈다&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;for i in range(1, V + 1):
    if weights[i] == float('inf'):
        print('INF')
    else:
        print(weights[i])&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과를 출력한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;전체 코드&lt;/b&gt;&lt;/h2&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;import sys
import heapq

input = sys.stdin.readline

V, E = map(int, input().split())
K = int(input())
graph = [[] for _ in range(V + 1)]
for _ in range(E):
    u, v, w = map(int, input().split())
    graph[u].append((v, w))

weights = [float('inf')] * (V + 1)
weights[K] = 0
wq = [(0, K)]

while wq:
    cnt_weight, cnt_node = heapq.heappop(wq)

    if weights[cnt_node] &amp;lt; cnt_weight:
        continue

    for neighbor, weight in graph[cnt_node]:
        weight = cnt_weight + weight

        if weight &amp;lt; weights[neighbor]:
            weights[neighbor] = weight
            heapq.heappush(wq, (weight, neighbor))

for i in range(1, V + 1):
    if weights[i] == float('inf'):
        print('INF')
    else:
        print(weights[i])&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category> Programming/Algorithm</category>
      <author>rohsuujin</author>
      <guid isPermaLink="true">https://suucong.tistory.com/105</guid>
      <comments>https://suucong.tistory.com/105#entry105comment</comments>
      <pubDate>Wed, 1 Oct 2025 19:12:41 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 이분 그래프(골드4)</title>
      <link>https://suucong.tistory.com/104</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제 링크&amp;nbsp;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/7569&quot;&gt;https://www.acmicpc.net/problem/7569&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;이분 그래프(Bipartite Graph)의 정의&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 정점을 두 그룹으로 나눌 수 있는 그래프&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 이분 그래프가 될 수 있는 조건: 같은 그룹 안에는 간선이 없어야함&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 즉 모든 간선은 다르 그룹을 연결&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;그룹 1: {A, B} &lt;br /&gt;그룹 2: {C, D} &lt;br /&gt;간선: A-C, A-D, B-C, B-D &lt;br /&gt;&amp;rarr; 가능 ✅&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;간선: A-B &lt;br /&gt;&amp;rarr; A와 B가 같은 그룹 &amp;rarr; ❌&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;bfs 이용 문제&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- is_bipartite 함수에서 전체 for 문을 도는 이유: 그래프가 연결 그래프가 아닐 수도 있기 때문에 &amp;lt;- 만약 연결 그래프라는 보장이 있으면 굳이 for문 돌 필요 x&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- bfs 구현 코드&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;gt; 바로 return False&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;구현 코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1757496103298&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
import sys
input = sys.stdin.readline

def bfs(start, graph, color):
    q = deque([start])
    color[start] = 1

    while q:
        v = q.popleft()
        for nxt in graph[v]:
            if color[nxt] == 0:
                color[nxt] = -color[v]
                q.append(nxt)
            elif color[nxt] == color[v]:
                return False
    return True

def is_bipartite(v, graph):
    color = [0] * (v + 1)
    for i in range(1, v+1):
        if color[i] == 0:
            if not bfs(i, graph, color):
                return False
    return True

k = int(input())
for _ in range(k):
    v, e = map(int, input().split())
    graph = [[] for _ in range(v+1)]
    for _ in range(e):
        a, b = map(int, input().split())
        graph[a].append(b)
        graph[b].append(a)

    print(&quot;YES&quot; if is_bipartite(v, graph) else &quot;NO&quot;)&lt;/code&gt;&lt;/pre&gt;</description>
      <category> Programming/Algorithm</category>
      <category>1707</category>
      <category>백준</category>
      <category>이분그래프</category>
      <author>rohsuujin</author>
      <guid isPermaLink="true">https://suucong.tistory.com/104</guid>
      <comments>https://suucong.tistory.com/104#entry104comment</comments>
      <pubDate>Wed, 10 Sep 2025 18:30:45 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 토마토(골드5)</title>
      <link>https://suucong.tistory.com/103</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제 링크&amp;nbsp;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/7569&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/7569&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;bfs(그중에서도 멀티소스 bfs) 이용 문제&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 시작이 맨 첫번째 인덱스에서가 아님&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 3중 for문을 돌며 익은 토마토를 모두 큐에 삽입&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 큐를 돌며 익은 토마토의 아래 위 왼쪽 오른쪽 앞 뒤를 현재 익은 토마토 값 + 1 을 해서 넣어줌 -&amp;gt; 최소 일수를 구하는 핵심 포인트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 값이 최소 일수를 의미&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 큐 요소들이 모두 소진되면 3중 for문을 통해 그래프를 돌며 모든 토마토가 익었는지 답이 무엇인지 확인함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 여기서 max를 통해 일수를 찾는데 왜 최소 일수를 찾으면서 최대 일수를 구하나 라는 의문이 생길 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;- 모든 토마토가 익는 순간을 구하려면, &lt;b&gt;가장 늦게 익은 토마토가 익은 날짜를 알아야함&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;구현 코드&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1757419841597&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
import sys
input = sys.stdin.readline

def bfs(m, n, h, graph):
    q = deque()

    # 익은 토마토 모두 큐에 삽입
    for z in range(h):
        for y in range(n):
            for x in range(m):
                if graph[z][y][x] == 1:
                    q.append((x, y, z))

    dx_dy_dz = [(0, 0, 1), (0, 0, -1), (-1, 0, 0), (1, 0, 0), (0, -1, 0), (0, 1, 0)]

    while q:
        x, y, z = q.popleft()
        for dx, dy, dz in dx_dy_dz:
            nx, ny, nz = x + dx, y + dy, z + dz
            if 0 &amp;lt;= nx &amp;lt; m and 0 &amp;lt;= ny &amp;lt; n and 0 &amp;lt;= nz &amp;lt; h:
                if graph[nz][ny][nx] == 0:
                    graph[nz][ny][nx] = graph[z][y][x] + 1
                    q.append((nx, ny, nz))

    # 모두 탐색이 끝난 후 날짜 계산
    days = 0
    for z in range(h):
        for y in range(n):
            for x in range(m):
                if graph[z][y][x] == 0:
                    return -1
                days = max(days, graph[z][y][x])
    return days - 1

m, n, h = map(int, input().split())
box = [[list(map(int, input().split())) for _ in range(n)] for _ in range(h)]
print(bfs(m, n, h, box))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category> Programming/Algorithm</category>
      <author>rohsuujin</author>
      <guid isPermaLink="true">https://suucong.tistory.com/103</guid>
      <comments>https://suucong.tistory.com/103#entry103comment</comments>
      <pubDate>Tue, 9 Sep 2025 21:17:47 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 벽 부수고 이동하기(골드3)</title>
      <link>https://suucong.tistory.com/102</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제 링크&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2206&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/2206&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;BFS 이용 문제&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. q에 넣는 정보: y, x, &amp;lt;한번 이미 벽을 부순 적이 있는지 여부&amp;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;2. 현재 인덱스에서 dy, dx 변수를 이용하여 상하좌우를 이동하며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음에 q에 넣어줄 인덱스(y, x)가 배열의 인덱스 범위를 벗어나지 않는지 확인&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;3. 벽이 아니고 아직 방문하지 않은 경우 / 벽이고 아직 벽을 부순적이 없는 경우로&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나누어&amp;nbsp; q에 삽입&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&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;4. 답을 return&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;y, x가 n-1, m-1에 도달했을 경우 dist 변수 return&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;while문이 종료되었는데 dist가 return 되지 않은 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 0, 0에서 n-1, m-1로 가는 경로가 존재하지 않으니 -1 return&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* 왜 visited 배열이 3차원 배열이어야 하는지?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 번 벽을 부순 적이 있는 경우인지, 없는 경우인지 구분해야 하기 때문에&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;구현 코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1757323901870&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
import sys
input = sys.stdin.readline

def bfs(n, m, graph):
    visited = [[[False]*2 for _ in range(m)] for _ in range(n)]
    visited[0][0][0] = True
    q = deque([(0, 0, 0, 1)])

    while q:
        y, x, broken, dist = q.popleft()
        if (y, x) == (n-1, m-1):
            return dist

        for dy, dx in [(1, 0), (-1, 0), (0, 1), (0, -1)]:
            ny, nx = y + dy, x + dx
            if 0 &amp;lt;= ny &amp;lt; n and 0 &amp;lt;= nx &amp;lt; m:
                # 벽이 아니고 아직 방문 안한 경우
                if graph[ny][nx] == 0 and not visited[ny][nx][broken]:
                    visited[ny][nx][broken] = True
                    q.append((ny, nx, broken, dist+1))
                # 벽이고 아직 벽을 부순 적이 없는 경우
                elif graph[ny][nx] == 1 and broken == 0 and not visited[ny][nx][1]:
                    visited[ny][nx][1] = True
                    q.append((ny, nx, 1, dist+1))

    return -1

n, m = map(int, input().split())
graph = [list(map(int, input().strip())) for _ in range(n)]
print(bfs(n, m, graph))&lt;/code&gt;&lt;/pre&gt;</description>
      <category> Programming/Algorithm</category>
      <author>rohsuujin</author>
      <guid isPermaLink="true">https://suucong.tistory.com/102</guid>
      <comments>https://suucong.tistory.com/102#entry102comment</comments>
      <pubDate>Mon, 8 Sep 2025 18:31:46 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 트리의 지름(골드4)</title>
      <link>https://suucong.tistory.com/101</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제 링크&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1967&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/1967&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;트리의 지름 알고리즘 구현&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. 아무 노드에서 시작해서 가장 먼 노드를 찾는다. (DFS 이용) 여기서는 1&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 예를 들어서 1번 노드에서 DFS/BFS 를 돌려서 가장 먼 노드를 찾고, 그게9라고 하자&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 이때 9번 노드는 트리의 한쪽 끝(leaf)임 &amp;lt;- 트리 구조에서 가장 먼 노드는 항상 leaf이므로&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. 가장 먼 노드 9에서 다시한번 DFS&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;9에서 가장 먼 노드를 찾으면 그게 다른 쪽 끝 노드임 -&amp;gt; 지름 의미&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;트리의 특징을 이용 -&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;어떤 노드에서 가장 멀리 있는 노드는 항상 지름의 양 끝 중 하나가 된다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;코드&lt;/h2&gt;
&lt;pre id=&quot;code_1756797686448&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline

n = int(input())
graph = [[] for _ in range(n+1)]

for _ in range(n-1):
    a, b, w = map(int, input().split())
    graph[a].append((b, w))
    graph[b].append((a, w))

def dfs(node, dist):
    visited[node] = True
    far_node, max_dist = node, dist

    for nxt, weight in graph[node]:
        if not visited[nxt]:
            n_node, n_dist = dfs(nxt, dist + weight)
            if n_dist &amp;gt; max_dist:
                far_node, max_dist = n_node, n_dist

    return far_node, max_dist

visited = [False] * (n+1)
node, _ = dfs(1, 0)

visited = [False] * (n+1)
_, diameter = dfs(node, 0)

print(diameter)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category> Programming/Algorithm</category>
      <author>rohsuujin</author>
      <guid isPermaLink="true">https://suucong.tistory.com/101</guid>
      <comments>https://suucong.tistory.com/101#entry101comment</comments>
      <pubDate>Tue, 2 Sep 2025 16:25:27 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] N으로 표현(level3)</title>
      <link>https://suucong.tistory.com/100</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;문제 링크&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42895&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/42895&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1756453976268&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;SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42895&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dIinrK/hyZF7YuMbe/gVSSRr4LGtEuzRxtSgSc71/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/fGhlW/hyZDMBkak4/XWbvKtotGPNG4HqYGjSZZ0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42895&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42895&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dIinrK/hyZF7YuMbe/gVSSRr4LGtEuzRxtSgSc71/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/fGhlW/hyZDMBkak4/XWbvKtotGPNG4HqYGjSZZ0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&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;SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&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;b&gt;동적계획법(Dynamic Programming) 이용 문제&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 점화식 의미 정의&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dp[i]: N을 정확히 i번 사용하여 만들 수 있는 모든 수들의 집합&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. dp 초기화&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;N을 한 번 사용하면 표현할 수 있는 수는 N뿐&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dp[1] = {N}&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 반복구성 i = 2 ~ 8&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dp[i]에 숫자를 이어붙인 값 int(str(N) * i)을 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1~i까지 j 변수를 통해 돌면서 dp[j]와 dp[i-j]를 이용해 + , -, *, // 사칙연산&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;i 반복문마다 dp[i] 배열에 number을 가지고 있는지 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 있으면 바로 반환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;i를 끝까지 돌았는데도 없으면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-1 반환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1756454224660&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(N, number):
    if N == number:
        return 1
    
    dp = [set() for _ in range(9)]
    dp[1].add(N)
    
    for i in range(2, 9):
        dp[i].add(int(str(N) * i))
        
        for j in range(1, i):
            for x in dp[j]:
                for y in dp[i-j]:
                    dp[i].add(x + y)
                    dp[i].add(x - y)
                    dp[i].add(x * y)
                    if y != 0:
                        dp[i].add(x // y)
        
        if number in dp[i]:
            return i
        
    return -1&lt;/code&gt;&lt;/pre&gt;</description>
      <category> Programming/Algorithm</category>
      <author>rohsuujin</author>
      <guid isPermaLink="true">https://suucong.tistory.com/100</guid>
      <comments>https://suucong.tistory.com/100#entry100comment</comments>
      <pubDate>Fri, 29 Aug 2025 16:57:55 +0900</pubDate>
    </item>
    <item>
      <title>[Data Science] 데이터 사이언스에 사용되는 파이썬 패키지 정리(numpy, matplotlib, pandas)</title>
      <link>https://suucong.tistory.com/99</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Numpy&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수치적인 연산에 최적화된 파이썬 도구이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;u&gt;개발자는 파이썬 문법을 이용해 사용하지만 내부적으로는 C언어로 엄청난 최적화가 되어있어&lt;/u&gt;&lt;/i&gt; 더 효율적인 메모리 관리와&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;u&gt;더 효율적인 연산이 가능하도록 알고리즘 설계&lt;/u&gt;&lt;/i&gt;가 되어있다. 또한 컴퓨터 하드웨어를 효율적으로 활용한다는 장점이 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 한국의 년도별 gdp가 달러로 표현된 배열을 원화로 환산하고싶다면,&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;Python만 이용&lt;/h4&gt;
&lt;pre id=&quot;code_1727465518629&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for i in range(len(gdp_korea_array)):
    gdp_korea_array[i] = gdp_korea_array[i] * 1335
gdp_korea_array&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;파이썬에서는 배열 안의 모든 요소에 곱하기를 하고 싶을 때 이렇게 for문을 사용해서 하나하나 넣어주어야 하지만,&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;numpy 이용&lt;/h4&gt;
&lt;pre id=&quot;code_1727465560769&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;gdp_korea_array * 1335&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;numpy를 사용하면 이 한줄로 해결이된다. (심지어 속도도 더 빠르다.)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;Matplotlib&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 가진 데이터를 &quot;시각화&quot;하는데 중점을 둔 패키지이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약에 배열을 numpy로 표현한다고 했을 때,&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;numpy&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2482&quot; data-origin-height=&quot;498&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQuiEy/btsJPyy2zQO/XOno7TD5k6MyTz5ci74LA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQuiEy/btsJPyy2zQO/XOno7TD5k6MyTz5ci74LA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQuiEy/btsJPyy2zQO/XOno7TD5k6MyTz5ci74LA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQuiEy%2FbtsJPyy2zQO%2FXOno7TD5k6MyTz5ci74LA0%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;2482&quot; height=&quot;498&quot; data-origin-width=&quot;2482&quot; data-origin-height=&quot;498&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;별로 직관적으로 와닿지 않는다. 하지만 maplotlib을 사용한다면,&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;matplotlib&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2478&quot; data-origin-height=&quot;1022&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bi8uHH/btsJQyxQAjX/dY3Y2fx3FmCI5or6ifQU10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bi8uHH/btsJQyxQAjX/dY3Y2fx3FmCI5or6ifQU10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bi8uHH/btsJQyxQAjX/dY3Y2fx3FmCI5or6ifQU10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbi8uHH%2FbtsJQyxQAjX%2FdY3Y2fx3FmCI5or6ifQU10%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;2478&quot; height=&quot;1022&quot; data-origin-width=&quot;2478&quot; data-origin-height=&quot;1022&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 훨씬더 직관적으로 표현이 가능하다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;pandas&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 데이터 사이언스를 할 때, 여러 숫자들을 표로 정리하는 것이 필수적인데, numpy만 이용해서는 직관적으로 여러 변수들 사이의 상관관계를 알아내기 어렵다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, numpy를 사용해 배열을 표현하면 한 타입만 배열에 넣을 수 있기 때문에 배열안의 요소에 숫자값과 문자값을 동시에 넣고 싶더라도 한가지 타입만 사용해야한다는 치명적인 단점이 존재한다. 따라서 numpy 배열의 단점을 정리하자면,&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;numpy array의 단점&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;가독성이 떨어짐&lt;/li&gt;
&lt;li&gt;요소들에 대한 레이블 삽입이 불가 -&amp;gt; 직관적이지 못함&lt;/li&gt;
&lt;li&gt;한 가지 데이터 타입만 사용 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 해서 나온 라이브러리가 &quot;pandas&quot;이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pandas는 numpy를 기반으로 해서 나온 대표적인 데이터 분석 라이브러리이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pandas를 이용한다면,&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 불러오기&lt;/li&gt;
&lt;li&gt;데이터 가공&lt;/li&gt;
&lt;li&gt;데이터 분석&lt;/li&gt;
&lt;li&gt;데이터 시각화&lt;/li&gt;
&lt;/ul&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;Numpy = 복잡한 수학 연산을 할 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pandas = &quot;표 형태&quot;의 데이터를 간편하게 다루고 싶을 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용한다고 정리가 가능하다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;pandas 사용 예시&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1224&quot; data-origin-height=&quot;624&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbhpK5/btsJQXqAArx/57tRjn04nKSqXZLWwKikv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbhpK5/btsJQXqAArx/57tRjn04nKSqXZLWwKikv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbhpK5/btsJQXqAArx/57tRjn04nKSqXZLWwKikv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbhpK5%2FbtsJQXqAArx%2F57tRjn04nKSqXZLWwKikv1%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;589&quot; height=&quot;300&quot; data-origin-width=&quot;1224&quot; data-origin-height=&quot;624&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category> Programming/Data Science</category>
      <author>rohsuujin</author>
      <guid isPermaLink="true">https://suucong.tistory.com/99</guid>
      <comments>https://suucong.tistory.com/99#entry99comment</comments>
      <pubDate>Sat, 28 Sep 2024 04:40:33 +0900</pubDate>
    </item>
    <item>
      <title>[JupyterNotebook] 주피터 노트북(확장자 ipynb)에서 .py로 파일 저장하는 법</title>
      <link>https://suucong.tistory.com/98</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;ipynb파일이 있는 폴더에서 터미널 열거나 혹은&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_1725915834206&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;jupyter nbconvert --to script 파일이름.ipynb&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;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;438&quot; data-origin-height=&quot;236&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pZYN0/btsJwPNQAVp/cBBYn046T00zOadk7zGwiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pZYN0/btsJwPNQAVp/cBBYn046T00zOadk7zGwiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pZYN0/btsJwPNQAVp/cBBYn046T00zOadk7zGwiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpZYN0%2FbtsJwPNQAVp%2FcBBYn046T00zOadk7zGwiK%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;351&quot; height=&quot;189&quot; data-origin-width=&quot;438&quot; data-origin-height=&quot;236&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <author>rohsuujin</author>
      <guid isPermaLink="true">https://suucong.tistory.com/98</guid>
      <comments>https://suucong.tistory.com/98#entry98comment</comments>
      <pubDate>Tue, 10 Sep 2024 06:04:40 +0900</pubDate>
    </item>
    <item>
      <title>[Exchange Student] 미국 비자(J-1) 신청 후에 DS-160 변경</title>
      <link>https://suucong.tistory.com/97</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;DS-160을 작성해본 사람이라면 알겠지만 굉장히 쓸게 많다. 정말 꼼꼼히 확인하고 틀린 것 하나 없이 내려면 3시간까지도 걸릴 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 나는 DS-160을 모두 작성 후 확인서까지 발급받고, 그걸 이용해 비자 신청 후 비자 인터뷰 날짜까지 잡은 상황에,,,,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 전날 오후 9시에 DS-160에 잘못된 정보를 입력한걸 알게되었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 사람들의 여러 후기를 찾아본 결과, &lt;b&gt;&lt;u&gt;DS-160은 확인서까지 발급된 이후에는 정보 수정이 불가하다.&amp;nbsp;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, 이미 신청된 &lt;b&gt;&lt;u&gt;비자 인터뷰에서 DS-160 번호를 변경 불가능하다.&amp;nbsp;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 상황에서 어떻게 해야할까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;새로운 DS-160을 발급 후, 비자 인터뷰 당일 면접 전에 말씀드리면 된다.&lt;/b&gt;&lt;/u&gt; 여기까지만 보면 이게 왜 글까지 쓸일인가 싶지만,,,,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;DS-160 사이트는 정말 에러가 잘 발생한다..&lt;/u&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무튼 아무리 새로운 DS-160을 신청하려고 해도,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2154&quot; data-origin-height=&quot;1884&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Sw461/btsIpGdnKkd/defr2TlPxT7p6igKldDmnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Sw461/btsIpGdnKkd/defr2TlPxT7p6igKldDmnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Sw461/btsIpGdnKkd/defr2TlPxT7p6igKldDmnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSw461%2FbtsIpGdnKkd%2Fdefr2TlPxT7p6igKldDmnK%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;549&quot; height=&quot;480&quot; data-origin-width=&quot;2154&quot; data-origin-height=&quot;1884&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계속 이런 화면으로 가는 오류가 몇시간이고 발생했다,,, 내 노트북 문제인가 싶어서 쿠키도 지우고 별짓을 다했다. 근데 결과는 같았다. 새벽까지 반복을 해보았지만 내가 볼 수 있는 건 이 화면 뿐이었다. 다음날 비자인터뷰 시간 3시간 전까지도 입력이 되지 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 잘못 입력한 정보는, 중학교 이상의 교육기관에서 교육을 받은적이 있는지였다.. 나는 교육을 받았다. 근데 나는 왜 아니라고체크했을까...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 전까지 검정고시봤다고 거짓말할까... 잘못입력했다고 싹싹 빌어볼까.. 별생각을 다하고, 중고등학교 졸업증명서까지 뽑은 상태에서&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;집을 떠나기 직전까지 서치하다가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.reddit.com/r/USCIS/comments/1drqdkn/is_the_ceac_website_down/?rdt=58288&quot;&gt;https://www.reddit.com/r/USCIS/comments/1drqdkn/is_the_ceac_website_down/?rdt=58288&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외국인들도 나랑 같은 문제를 겪고있는걸 발견했고, 딱 인터뷰 2시간 전에 어떤 외국인이 댓글을 달아 마이크로소프트 엣지를 사용하고, 설정을 바꾸어 하는 방법을 찾았다는것이다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;말이많죠?&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;u&gt;&lt;b&gt;새로 생성 완료. retrieve해서 새로 생성하면 이미 정보가 입력되어있어서 빛의 속도로 했다. 바로 달려가서 비자인터뷰 하는데 가서 DS-160이 변경되었다고 말했더니 별 문제 없이 변경 되었다.&lt;/b&gt; &lt;b&gt;꼭 새로 생성한 DS-160 Confirmation을 새로 뽑아가서 제출해야한다.&lt;/b&gt;&lt;/u&gt; 대사관에서 어떤 직책이신 분인지 모르겠지만, 비자 인터뷰 신청서 확인해주시는 분께 이거 사이트 오류나는거 아시냐고 했더니 &quot;거기 오류 원래 자주나요~&quot;이러고 끝.... 하 어이가없었지만 결론은 문제없이 approved되었다!!! 휴..&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일 전부터 DS-160 재검토하시기를,, 찾아보니 일주일에 한두번은 꼭 에러가 나는거 같더라구요.. 심지어 이틀 연속해서 나는 경우도 있습니다.. 저는 심지어 이틀째에 제가 계속 시도한거였는데 사이트 오류가 해결되어서 생성에 성공한게아니라 우회 방법으로 성공한겁니다.. 제가 그런케이스에 다시 신청을 하려고 한거고요. 다들 꼭 조심하시길!&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> Exchange Student</category>
      <author>rohsuujin</author>
      <guid isPermaLink="true">https://suucong.tistory.com/97</guid>
      <comments>https://suucong.tistory.com/97#entry97comment</comments>
      <pubDate>Fri, 5 Jul 2024 16:51:51 +0900</pubDate>
    </item>
    <item>
      <title>[Algorithm] BFS, DFS (with Python)</title>
      <link>https://suucong.tistory.com/96</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;BFS(Breadth First Search, 너비 우선 탐색)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 알고리즘의 핵심은 큐(Queue)를 사용하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노드를 방문하면서 인접한 노드 중 방문하지 않았던 노드의 정보를 큐에 넣어 큐에 먼저 들어있던 노드부터 방문.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;list 형식을 사용해 큐를 구현할 수도 있지만, list.pop(0)은 시간복잡도가 O(N)이므로 비효율적. -&amp;gt; collections 라이브러리의 deque를 사용. 방문하지 않았던 노드를 큐에 넣을때는 set타입을 사용.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;DFS(Depth First Search, 깊이 우선 탐색)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 알고리즘의 핵심은 스택(Stack)을 사용하는 것.&lt;/p&gt;</description>
      <category> Programming/Algorithm</category>
      <author>rohsuujin</author>
      <guid isPermaLink="true">https://suucong.tistory.com/96</guid>
      <comments>https://suucong.tistory.com/96#entry96comment</comments>
      <pubDate>Fri, 28 Jun 2024 16:03:29 +0900</pubDate>
    </item>
  </channel>
</rss>