<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>hamo-o.log</title>
        <link>https://velog.io/</link>
        <description>티스토리로 이전했습니다 | https://hamo0.tistory.com/</description>
        <lastBuildDate>Wed, 15 Feb 2023 03:58:32 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>hamo-o.log</title>
            <url>https://velog.velcdn.com/images/hamo-o/profile/14569a2f-9e4a-4f4d-8eec-6fca5c7b6f06/social_profile.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. hamo-o.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/hamo-o" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[알고리즘] 다익스트라]]></title>
            <link>https://velog.io/@hamo-o/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%8B%A4%EC%9D%B5%EC%8A%A4%ED%8A%B8%EB%9D%BC-%EB%A1%9C%EC%A7%81-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@hamo-o/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%8B%A4%EC%9D%B5%EC%8A%A4%ED%8A%B8%EB%9D%BC-%EB%A1%9C%EC%A7%81-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Wed, 15 Feb 2023 03:58:32 GMT</pubDate>
            <description><![CDATA[<p>❓ <strong>다익스트라 알고리즘을 언제 사용할까</strong></p>
<blockquote>
<p>최단 경로 구하기</p>
</blockquote>
<p>❓ <strong>다익스트라 알고리즘 풀이방법 정리</strong></p>
<p>1️⃣ 우선순위 큐 구현을 위해 <code>heapq</code> 가져오기</p>
<pre><code>import sys
import heapq</code></pre><p>2️⃣ 빠른 입력받기와 최대값 저장을 위해 <code>sys</code> 가져오기</p>
<pre><code>input = sys.stdin.readline
INF = sys.maxsize</code></pre><p>3️⃣ 그래프 배열 선언, 입력받기</p>
<p><code>graph[현재노드] = (거리, 다음노드)</code></p>
<pre><code>graph = [[] for _ in range(n+1)]
for i in range(e):
    a, b, w = map(int, input().split())
    graph[a].append((w, b))
    graph[b].append((w, a))</code></pre><p>4️⃣ 최소 거리 값을 저장하는 <code>memo</code> 배열 선언, <code>heap</code> 배열 선언</p>
<pre><code>def dij(start, end):
    memo = [INF] * (n + 1)
    heap = []</code></pre><p>5️⃣ 시작점에서의 <code>memo</code> 배열 저장 &amp; <code>heap</code>에 <code>(0, start)</code> 즉 시작노드 넣기</p>
<pre><code>    memo[start] = 0
    heapq.heappush(heap, (0, start))</code></pre><p>6️⃣ <code>heap</code> 배열이 비지 않는 동안 배열에서 <code>(예전거리, 현재노드)</code> 노드 하나씩 <code>꺼내서</code> 각각 저장하기</p>
<pre><code>    while heap:
        prev_weigh, cur_node = heapq.heappop(heap)</code></pre><p>7️⃣ 만약 저장되어 있는 <code>memo 배열</code> <code>현재 노드</code>의 <code>거리</code>가 <code>예전 거리</code>보다 짧다면 밑에 건너뛰기 <code>continue</code></p>
<pre><code>        if memo[cur_node] &lt; prev_weigh:
            continue</code></pre><p>8️⃣ 현재 노드와 연결되어 있는 노드들 순회
<code>(현재거리, 다음노드)</code>
<code>다음거리 = 이전거리 + 현재거리</code></p>
<pre><code>        for cur_weigh, next_node in graph[cur_node]:
            next_weigh = prev_weigh + cur_weigh</code></pre><p>9️⃣ 만약 저장되어 있는 <code>memo 배열</code> <code>다음 노드</code>의 <code>거리</code>가 <code>다음거리</code>보다 길다면 거리 갱신
<code>memo[다음노드] = 다음거리</code>
<code>heap</code> 배열에 <code>(다음노드, 다음거리)</code> <code>push</code></p>
<pre><code>            if next_weigh &lt; memo[next_node]:
                memo[next_node] = next_weigh
                heapq.heappush(heap, (next_node, next_weigh))

    return memo[end]
</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[알고리즘] 이분탐색]]></title>
            <link>https://velog.io/@hamo-o/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%9D%B4%EB%B6%84%ED%83%90%EC%83%89</link>
            <guid>https://velog.io/@hamo-o/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%9D%B4%EB%B6%84%ED%83%90%EC%83%89</guid>
            <pubDate>Wed, 15 Feb 2023 03:23:29 GMT</pubDate>
            <description><![CDATA[<p>1️⃣ <code>left</code> <code>right</code> 설정하기
2️⃣ <code>while True</code> 반복, <code>mid</code> 설정</p>
<pre><code>while True:
    mid = (left+right)//2</code></pre><p>3️⃣ <code>mid</code> 값을 이용하여 주어진 조건에 만족하는지 체크하기 위한 값 구하기</p>
<pre><code>    count = 0
    for line in lines:
        count += line//mid
</code></pre><p>4️⃣ <code>left &gt; right</code> 면 반복 끝내고 값 출력</p>
<pre><code>    if left &gt; right:
        print(mid)
        break</code></pre><p>5️⃣ 주어진 조건 만족에 따라 <code>left</code>와 <code>right</code> 값을 조절한다</p>
<pre><code>    if count &lt; n:
        right = mid - 1

    else:
        left = mid + 1</code></pre><p><strong>예시 문제</strong>
<a href="https://www.acmicpc.net/problem/1654">BOJ 1654</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[BOJ 6550] 부분 문자열]]></title>
            <link>https://velog.io/@hamo-o/BOJ-6550-%EB%B6%80%EB%B6%84-%EB%AC%B8%EC%9E%90%EC%97%B4</link>
            <guid>https://velog.io/@hamo-o/BOJ-6550-%EB%B6%80%EB%B6%84-%EB%AC%B8%EC%9E%90%EC%97%B4</guid>
            <pubDate>Wed, 15 Feb 2023 03:06:53 GMT</pubDate>
            <description><![CDATA[<pre><code>import sys
input = sys.stdin.readline


def find(s, t):
    i = 0
    for char in t:
        if char == s[i]:
                i += 1
        if i == len(s):
            return &quot;Yes&quot;
    return &quot;No&quot;


while True:
    try:
        line = input()
        s, t = line.split()
        print(find(s, t))

    except:
        break</code></pre><blockquote>
<p>*<em>📝 임의의 여러 줄 입력받기 *</em>
1️⃣ <code>while True</code> 로 계속 입력받기
2️⃣ <code>try exept</code> 문을 <code>while</code> 문 안에 넣어 예외처리</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[BOJ 11727] 2xn 타일링 2]]></title>
            <link>https://velog.io/@hamo-o/BOJ-11727-2xn-%ED%83%80%EC%9D%BC%EB%A7%81-2</link>
            <guid>https://velog.io/@hamo-o/BOJ-11727-2xn-%ED%83%80%EC%9D%BC%EB%A7%81-2</guid>
            <pubDate>Wed, 15 Feb 2023 03:03:31 GMT</pubDate>
            <description><![CDATA[<pre><code>n = int(input())
memo = [0]*1001

memo[1] = 1
memo[2] = 3
for i in range(3, n+1):
    memo[i] = (memo[i-1] + 2*memo[i-2]) % 10007

print(memo[n])</code></pre><p><code>DP</code> 문제에서 <code>memoziation</code> 배열의 크기를 동적으로 <code>(n)</code> 할당하면 미리 할당해 두는 memo의  경우 <code>(n=2)</code> 에러가 발생한다!</p>
<blockquote>
<p><code>DP</code>에서 <code>memo</code> 배열의 크기는 <code>n의 최댓값</code>으로 설정하자</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[알고리즘] 3-1 배열, 리스트, 벡터]]></title>
            <link>https://velog.io/@hamo-o/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-3-1-%EB%B0%B0%EC%97%B4-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EB%B2%A1%ED%84%B0</link>
            <guid>https://velog.io/@hamo-o/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-3-1-%EB%B0%B0%EC%97%B4-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EB%B2%A1%ED%84%B0</guid>
            <pubDate>Sun, 12 Feb 2023 16:37:36 GMT</pubDate>
            <description><![CDATA[<h3 id="벡터">벡터</h3>
<p>C++ STL(표준 라이브러리)에 있는 자료구조 컨테이너</p>
<blockquote>
<p>1️⃣ 크기가 자동으로 늘어난다
2️⃣ 맨 마지막 위치 이외의 데이터의 삽입, 삭제는 배열과 같은 메커니즘
3️⃣ 인덱스로 각 데이터에 접근 가능</p>
</blockquote>
<p>선언</p>
<pre><code>vector&lt;int&gt; A;

// 0이라는 값으로 N개의 원소 할당
vector&lt;int&gt; A(N, 0);</code></pre><p>삽입</p>
<pre><code>// push
A.push_back(1);

// 특정 위치 추가
A.insert(A.begin(), 7);
A.insert(A.begin() + 2, 10);</code></pre><p>삭제</p>
<pre><code>// pop
A.pop_back()

// 특정 위치 삭제
A.erase(A.begin() + 3);

// 모든 값 삭제
A.clear</code></pre><pre><code>// 데이터 개수
A.size()

// 처음, 마지막, 특정 위치 값
A.front()
A.back()
A[3]
A.at(5)

// 데이터의 위치
A.begin()
A.end()</code></pre><p>회전</p>
<pre><code>rotate(start, mid, end)
왼쪽으로 2칸씩 회전시키기 위해서는 2번째 인수로 벡터.begin() + 2
오른쪽으로 3칸씩 회전시키기 위해서는 2번째 인수로 벡터.end() - 3

시간복잡도 O(N)</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[알고리즘] 시간복잡도]]></title>
            <link>https://velog.io/@hamo-o/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%8B%9C%EA%B0%84%EB%B3%B5%EC%9E%A1%EB%8F%84</link>
            <guid>https://velog.io/@hamo-o/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%8B%9C%EA%B0%84%EB%B3%B5%EC%9E%A1%EB%8F%84</guid>
            <pubDate>Sun, 05 Feb 2023 09:51:19 GMT</pubDate>
            <description><![CDATA[<h4 id="📌-특정-원소의-포함-여부를-알고-싶을-때">📌 특정 원소의 포함 여부를 알고 싶을 때</h4>
<p><code>list</code> 에서의 <code>x in s</code> 연산의 평균 시간 복잡도 : <code>O(n)</code>
<code>set</code> 에서의 <code>x in s</code> 연산의 평균 시간 복잡도 : <code>O(1)</code></p>
<blockquote>
<p><code>set</code> 을 사용하자!</p>
</blockquote>
]]></description>
        </item>
    </channel>
</rss>