<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>super-d.log</title>
        <link>https://velog.io/</link>
        <description>인프라 + 개발</description>
        <lastBuildDate>Sun, 03 Jan 2021 15:08:27 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. super-d.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/super-d" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[알고리즘] 이진 탐색]]></title>
            <link>https://velog.io/@super-d/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%9D%B4%EC%A7%84-%ED%83%90%EC%83%89</link>
            <guid>https://velog.io/@super-d/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%9D%B4%EC%A7%84-%ED%83%90%EC%83%89</guid>
            <pubDate>Sun, 03 Jan 2021 15:08:27 GMT</pubDate>
            <description><![CDATA[<p>오늘은 이진 탐색 알고리즘을 공부했다.</p>
<pre><code>import random

def binary_search(data, search):
    if len(data) == 1 and search == data[0]:
        return True
    elif len(data) == 1 and search != data[0]:
        return False
    elif len(data) == 0:
        return False

    index = len(data)//2
    find = data[index]
    if search == find:
        return True
    else: 
        if search &lt; find:
            return binary_search(data[:index], search)
        elif search &gt; find:
            return binary_search(data[index+1:],search)

data = random.sample(range(100), 5)
search = random.sample(range(100), 1)
print(binary_search(sorted(data), search[0]))</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[알고리즘] 병합 정렬]]></title>
            <link>https://velog.io/@super-d/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B3%91%ED%95%A9-%EC%A0%95%EB%A0%AC</link>
            <guid>https://velog.io/@super-d/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B3%91%ED%95%A9-%EC%A0%95%EB%A0%AC</guid>
            <pubDate>Sat, 02 Jan 2021 13:28:26 GMT</pubDate>
            <description><![CDATA[<p>오늘은 병합 정렬 알고리즘에 대해 공부하였다. 
병합 정렬은 배열을 작게 분해하여 이를 병합하면서 순서를 맞춰가며 정렬된 알고리즘을 만드는 정렬 방법이다.</p>
<p>병합을 하기 위해서 먼저 주어진 숫자 리스트를 작은 단위로 쪼개 주어야 한다.</p>
<pre><code>def split(data):
    if len(data) &lt;= 1:
        return data

    medium = int(len(data)/2)
    left = split(data[:medium])
    right = split(data[medium:])

    return merge(left, right)</code></pre><p>가장 작은 단위(길이가 1인 리스트)로 쪼개진 리스트를 비교하여 병합해 주면서 순서를 맞춰가게 된다.</p>
<pre><code>def merge(left, right):
    result = list()
    left_point, right_point = 0, 0
    while len(left) &gt; left_point and len(right) &gt; right_point: 
        if left[left_point] &lt; right[right_point]:
            result.append(left[left_point])
            left_point += 1
        else:
            result.append(right[right_point])
            right_point += 1

    while len(left) &gt; left_point:
         result.append(left[left_point])
         left_point += 1

    while len(right) &gt; right_point:
        result.append(right[right_point])
        right_point += 1

    return result</code></pre><p>전체 코드는 아래와 같다.</p>
<pre><code>import random
def split(data):
    if len(data) &lt;= 1:
        return data

    medium = int(len(data)/2)
    left = split(data[:medium])
    right = split(data[medium:])

    return merge(left, right)

def merge(left, right):
    result = list()
    left_point, right_point = 0, 0
    while len(left) &gt; left_point and len(right) &gt; right_point: 
        if left[left_point] &lt; right[right_point]:
            result.append(left[left_point])
            left_point += 1
        else:
            result.append(right[right_point])
            right_point += 1

    while len(left) &gt; left_point:
         result.append(left[left_point])
         left_point += 1

    while len(right) &gt; right_point:
        result.append(right[right_point])
        right_point += 1

    return result


data = random.sample(range(100), 5)
print(split(data))
</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[알고리즘] 퀵정렬]]></title>
            <link>https://velog.io/@super-d/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%ED%80%B5%EC%A0%95%EB%A0%AC</link>
            <guid>https://velog.io/@super-d/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%ED%80%B5%EC%A0%95%EB%A0%AC</guid>
            <pubDate>Wed, 30 Dec 2020 11:45:56 GMT</pubDate>
            <description><![CDATA[<p>오늘은 퀵정렬에 대해 알아보려고 한다.
퀵정렬은 기준값을 정하고 그 값과 비교하여 더 작은 원소는 기준값의 왼쪽에 큰 값은 기준값의 오른쪽에 배치하여 이 과정을 반복하여 정렬을 완성하는 알고리즘 이다. </p>
<ol>
<li>기준값을 정한다.<pre><code> pivot = data[0]</code></pre></li>
<li>기준값보다 작은 원소는 기준값의 왼쪽에 배치한다.<pre><code> left = list()
 for number in range(1, len(data)):
     if number &lt; pivot:
         left.append(number)</code></pre></li>
<li>기준값보다 큰 원소는 기준값의 오른쪽에 배치한다.<pre><code> right = list()
 for number in range(1, len(data)):
     if number &gt;= pivot:
         right.append(number)</code></pre></li>
<li>위의 과정들을 반복하여 정렬을 완성한다.<pre><code> def quick_sort1(data):
     if len(data) &lt;= 1:
         return data
     pivot = data[0]
     left,right = list(), list()
     for i in range(1, len(data)):
         if pivot &gt;= data[i]:
              left.append(data[i])
         else:
              right.append(data[i])
     return quick_sort1(left) + [pivot] + quick_sort1(right)</code></pre></li>
</ol>
<p> 또 다른 방법으로 구현 가능하다. </p>
<pre><code>def quick_sort2(data):
    if len(data) &lt;= 1:
        return data
    pivot = data[0]
    left = [number for number in data[1:] if number &lt; pivot]
    right = [number for number in data[1:] if number &gt;= pivot]
    return quick_sort2(left) + [pivot] + quick_sort2(right)</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[알고리즘] 재귀 함수 연습]]></title>
            <link>https://velog.io/@super-d/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%9E%AC%EA%B7%80-%ED%95%A8%EC%88%98-%EC%97%B0%EC%8A%B5</link>
            <guid>https://velog.io/@super-d/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%9E%AC%EA%B7%80-%ED%95%A8%EC%88%98-%EC%97%B0%EC%8A%B5</guid>
            <pubDate>Tue, 29 Dec 2020 11:01:29 GMT</pubDate>
            <description><![CDATA[<p>오늘은 재귀 함수를 연습입니다. </p>
<ol>
<li><p>Factorial </p>
<pre><code> def factorial1(n):
     if n &gt; 1:
         return n*factorial(n-1)
     return n

 def factorial2(n):
     if n == 1:
         return n
     return n*factorial2(n-1)
</code></pre></li>
<li><p>Palindrome</p>
<pre><code> def palindrome(sentence):
     if len(sentence) &lt;= 1:
         return True

     if sen[0] == sentence[-1]:
         return palindrome(sentence[1:-1])
     else : 
         return False</code></pre></li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[알고리즘] 삽입 정렬]]></title>
            <link>https://velog.io/@super-d/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%82%BD%EC%9E%85-%EC%A0%95%EB%A0%AC</link>
            <guid>https://velog.io/@super-d/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%82%BD%EC%9E%85-%EC%A0%95%EB%A0%AC</guid>
            <pubDate>Mon, 28 Dec 2020 14:54:59 GMT</pubDate>
            <description><![CDATA[<p><strong>삽입 정렬</strong>은 정렬이 안된 배열의 원소를 차례대로 앞에 이미 정렬이 완료 된 원소들과 비교하여 자신의 자리를 찾아 삽입하여 정렬하는 알고리즘 이다. </p>
<ol>
<li><p>정렬이 안된 배열의 두번째 원소를 바로 앞 원소와 비교한다. 더 작은 원소가 앞에 위치하도록 위치를 바꿔준다.
 [<strong>70</strong>, <strong>31</strong>, 3, 72, 20] -&gt; [<strong>31</strong>, <strong>70</strong>, 3, 72, 20]</p>
<pre><code>if data[j] &lt; data[j-1]:
    data[j], data[j-1] = data[j-1], data[j]</code></pre></li>
<li><p>자신보다 큰 원소를 찾기 전까지 위의 과정을 반복한다. </p>
<pre><code>for j in range(i, 0, -1):
    if data[j] &lt; data[j-1]:
        data[j], data[j-1] = data[j-1], data[j]
    else:
        break</code></pre></li>
<li><p>정렬이 안된 배열의 원소를 차례대로 1번과 2번 과정을 반복한다.
 [31, <strong>70</strong>, <strong>3</strong>, 72, 20] -&gt; [31, <strong>3, 70</strong>, 72, 20]</p>
<p>[<strong>31, 3</strong>, 70, 72, 20] -&gt; [<strong>3, 31</strong>, 70, 72, 20]</p>
<p>[3, 31, 70, <strong>72, 20</strong>] -&gt; [3, 31, 70, <strong>20, 72</strong>]</p>
<p>[3, 31, <strong>70, 20</strong>, 72] -&gt; [3, 31, <strong>20, 70</strong>, 72]</p>
<pre><code>def insert(data):
    for i in range(1, len(data)):
        for j in range(i, 0, -1):
            if data[j] &lt; data[j-1]:
                data[j], data[j-1] = data[j-1], data[j]
            else:
                break
    return data</code></pre></li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[알고리즘] 선택 정렬]]></title>
            <link>https://velog.io/@super-d/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%84%A0%ED%83%9D-%EC%A0%95%EB%A0%AC</link>
            <guid>https://velog.io/@super-d/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%84%A0%ED%83%9D-%EC%A0%95%EB%A0%AC</guid>
            <pubDate>Mon, 28 Dec 2020 12:44:17 GMT</pubDate>
            <description><![CDATA[<p>오늘은 <strong>선택 정렬</strong>에 대해 알아보려고 한다. 
선택 정렬은 배열의 가장 작은 숫자를 선택하여, 정렬이 되지 않은 배열의 가장 왼쪽 원소와 교환하는 작업을 반복하여 정렬하는 방법이다. </p>
<ol>
<li><p>정렬이 되지 않은 배열에서 가장 작은 수를 선택한다.
 [70, 31, <strong>3</strong>, 72, 20]</p>
<pre><code> index = 0
 for j in range(len(data)):
     if data[index] &gt; data[j] :
         index = j</code></pre></li>
<li><p>가장 작은 수로 선택 된 원소와 정렬되지 않은 배열의 가장 왼쪽 원소를 교환한다. 
 [<strong>70</strong>, 31, <strong>3,</strong> 72, 20] --&gt; [ <strong>3</strong>, 31, <strong>70</strong>, 72, 20]</p>
<pre><code> index = 0
 for j in range(len(data)):
     if data[index] &gt; data[j] :
         index = j
 data[0], data[index] = data[index], data[0]</code></pre></li>
<li><p>위의 1번 2번 과정을 정렬이 될 때까지 반복한다. 
 [<strong>70</strong>, 31, <strong>3,</strong> 72, 20] --&gt; [ <strong>3</strong>, 31, <strong>70</strong>, 72, 20]</p>
<p> [ 3, <strong>31</strong>, 70, 72, <strong>20</strong>] --&gt; [ 3, <strong>20</strong>, 70, 72, <strong>31</strong>]</p>
<p> [ 3, 20, <strong>70</strong>, 72, <strong>31</strong>] --&gt; [ 3, 20, <strong>31</strong>, 72, <strong>70</strong>]</p>
<p> [ 3, 20, 31, <strong>72</strong>, <strong>70</strong>] --&gt; [ 3, 20, 31, <strong>70</strong>, <strong>72</strong>]</p>
<pre><code> def select(data):
     for i in range(len(data)-1):
         index = i
         for j in range(i+1, len(data)):
             if data[index] &gt; data[j]:
                 index = j
         if i != index:
             data[i], data[index] = data[index], data[i]
     return data</code></pre></li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[알고리즘] 버블 정렬]]></title>
            <link>https://velog.io/@super-d/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B2%84%EB%B8%94-%EC%A0%95%EB%A0%AC</link>
            <guid>https://velog.io/@super-d/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B2%84%EB%B8%94-%EC%A0%95%EB%A0%AC</guid>
            <pubDate>Sun, 27 Dec 2020 11:42:02 GMT</pubDate>
            <description><![CDATA[<p>무작위 하게 배치되어 있는 숫자들을 정해진 순서대로 나열하는 것을 <strong>정렬</strong>이라고 한다. </p>
<p>다양한 정렬 알고리즘 중 버블 정렬에 대해 정리해보고자 한다.</p>
<p><strong>버블 정렬</strong>은 인접한 앞뒤 원소를 비교하여 앞에 있는 원소의 크기가 뒤에 있는 원소의 크기보다 더 클 경우 두 원소의 위치를 교환한다. </p>
<ol>
<li><p>앞뒤 원소를 비교하여 앞에 있는 원소의 크기가 뒤에 있는 원소의 크기보다 더 클 경우 두 원소의 위치를 교환한다. 
[70, 31, 3, 72, 20] -&gt; [31, 70, 3, 72, 20]</p>
<pre><code>if data[i] &gt; data[i+1]:
   data[i], data[i+1] = data[i+1], data[i]</code></pre></li>
<li><p>가장 큰 원소가 배열의 가장 오른쪽에 위치하도록 1번의 과정을 반복한다.
[<strong>70, 31,</strong> 3, 72, 20] -&gt; [<strong>31, 70,</strong> 3, 72, 20]</p>
<p>[31, <strong>70, 3,</strong> 72, 20] -&gt; [31, <strong>3, 70,</strong> 72, 20]</p>
<p>[31, 3, 70, <strong>72, 20</strong>] -&gt; [31, 3, 70, <strong>20, 72</strong>]</p>
<pre><code>for i in range(len(data) - 1):
   # 1번 코드 
   if data[i] &gt; data[i+1]:
       data[i], data[i+1] = data[i+1], data[i]</code></pre></li>
<li><p>위의 1번 2번 과정을 모든 원소들이 정렬 될 때까지 반복한다.</p>
<pre><code> for j in range(len(data) - 1):
     # 2번 코드
     for i in range(len(data) - 1):
       # 1번 코드 
       if data[i] &gt; data[i+1]:
           data[i], data[i+1] = data[i+1], data[i]</code></pre><ol start="4">
<li>최적화 단계, 2번 과정이 끝나면 가장 큰 원소가 가장 오른쪽에 위치하기 때문에 마지막 원소는 비교할 필요가 없다. 또한, 이미 정렬이 완료 되었을 경우 반복문을 종료한다. <pre><code>def bubblesort(data):
# 3번 코드
for j in range(len(data) - 1):
    # 최적화
    swap = False
    # 2번 코드, 최적화 len(data) - j - 1
    for i in range(len(data) - j - 1):
        # 1번 코드 
        if data[i] &gt; data[i+1]:
            data[i], data[i+1] = data[i+1], data[i]
            swap = True
    if not swap:
        break
return data
</code></pre></li>
</ol>
<p>```</p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[ 그냥 하자]]></title>
            <link>https://velog.io/@super-d/%EA%B7%B8%EB%83%A5-%ED%95%98%EC%9E%90</link>
            <guid>https://velog.io/@super-d/%EA%B7%B8%EB%83%A5-%ED%95%98%EC%9E%90</guid>
            <pubDate>Sat, 12 Sep 2020 04:20:59 GMT</pubDate>
            <description><![CDATA[<p>최근 6개월 나에게 많은 변화가 있었다. </p>
<p>삶에 대한 생각과 업무에 대한 나의 태도를 돌아보게 되었고, 
많은 시도를 통해 성장을 하였다. 나는 그전의 내가 많이 낯설다.</p>
<p>새로운 마음으로, 블로그 플랫폼을 이전하였다. 
개인적인 목표는 github에 나만의 블로그를 만드는 것인데,
우선 당장 글을 쓰는 습관을 기르는 것이 목표이기에 
미디엄과 깃허브 블로그, velog 중 velog를 택하게 되었다. (티스토리 블로그는 이미 있다) 
미디엄은 정기 구독으로 글을 읽을만큼 나의 관심사에 대한 글이 많은 플랫폼이지만,
velog의 디자인이 나에게 더 매력적이라 느껴져 그냥 선택했다. 
물론 간편한 사용 방법과 가독성 또한 뛰어난 것 같다. 
아마도, front-end에 대해 더 관심이 가게 되면, github로 이전하지 않을까 싶다. </p>
<p>과거의 나는 블로그 플랫폼에 관한 모든 글을 읽고 
서로의 장단점을 분석하고, 결국 고민고민하다 플랫폼을 선택하면
아이디를 수천번 고민하다 결국 지쳐 &#39;글은 내일부터 써야지..&#39; 했겠지만
&quot;우선 시작하자&quot;라는 생각들이 내 삶에 가져온 긍정적인 변화들 덕분에 
이 블로드 또한 우선 시작하게 되었다. 
(실제로 정확히 1년전 위의 일을 반복하다 새로운 블로그 개설을 포기했다)</p>
]]></description>
        </item>
    </channel>
</rss>