<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>hyunjin.log</title>
        <link>https://velog.io/</link>
        <description>유연하고 의연하게, 꾸준히</description>
        <lastBuildDate>Sat, 27 Aug 2022 06:56:57 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. hyunjin.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/hyunjin3_3" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[나의 파이썬 코딩테스트 여정_1]]></title>
            <link>https://velog.io/@hyunjin3_3/%EB%82%98%EC%9D%98-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%97%AC%EC%A0%951</link>
            <guid>https://velog.io/@hyunjin3_3/%EB%82%98%EC%9D%98-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%97%AC%EC%A0%951</guid>
            <pubDate>Sat, 27 Aug 2022 06:56:57 GMT</pubDate>
            <description><![CDATA[<p>왜 파이썬인가
동일한 구현에 필요하며 코드가 짧은 편이라 시간이 제한적인 상황에서 용이하며, 특정한 서버로 요청을 보내는 request 라이브러리와 반환된 Json파일을 읽어오는 Json 라이브러리가 있어 API와 통신과 같은 부분을 개발할 때 효율적이다. </p>
<p>1차 문제풀이 충족 순서</p>
<ol>
<li>답맞추기</li>
<li>성능 복잡도 줄이기</li>
<li>시각적인 복잡도 줄이기</li>
</ol>
<p>2차 문제풀이 충족 순서</p>
<ol>
<li>지문 파악 및 복잡도 분석</li>
<li>풀이 설계</li>
<li>풀이 작성</li>
</ol>
<p>마스터 유형 순서</p>
<ol>
<li>BFS/DFS</li>
<li>그리디
...</li>
</ol>
<p>성능평가(코테 문제는 명시되어있지않다면 시간제한이 1~5초)
복잡도</p>
<ul>
<li>시간복잡도 : 입력에 대한 수행시간 </li>
<li>공간복잡도 : 입력에 대한 메모리 사용량</li>
<li>시각적인 측면이 아닌 성능적 측면에서의 복잡도를 말함</li>
<li>빅오 표기법 : 가장 빠르게 증가하는 항만을 고려</li>
<li>상수시간, 로그시간, 선형시간, 로그선형시간, 이차시간, 삼차시간, 지수시간 등 존재</li>
</ul>
<p>알고리즘 설계</p>
<ul>
<li>일반 CPU 기반 개인 컴퓨터나 채점용 컴퓨터에서 연산 횟수가 5억을 넘어가는 경우 : C언어는 1<del>3초 가량, Python은 5</del>15초 가량 소요, PyPy의 경우 때로는 C언어보다 빠르게 동작하는 경우도 존재</li>
<li>시간제한 1초 기준으로 알고리즘 설계 기준</li>
<li>N 범위가 500 : O(N3)</li>
<li>N 범위가 2000 : O(N2)</li>
<li>N 범위가 100,000 : O(NlogN)</li>
<li>N 범위가 10,000,000 : O(N)</li>
</ul>
<p>지수표현방식 공부하기</p>
<ul>
<li>e 또는 E 다음에 오는 수 : 10의 지수부</li>
<li>1e9 = 10의 9제곱(1,000,000,000)</li>
<li>유효숫자e지수제곱 = 유효숫자 * 10지수제곱</li>
<li>임의의 큰 수를 표현할 때 자주 사용</li>
<li>최단 경로 알고리즘에서는 도달할 수 없는 노드에 대한 최단거리를 무한(INF)로 설정</li>
<li>가능한 최댓값이 10억 미만이라면 무한(INF)의 값으로 1e9이용가능</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Algorithms] 문자열 뒤집기 Review]]></title>
            <link>https://velog.io/@hyunjin3_3/Algorithms-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%92%A4%EC%A7%91%EA%B8%B0-Review</link>
            <guid>https://velog.io/@hyunjin3_3/Algorithms-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%92%A4%EC%A7%91%EA%B8%B0-Review</guid>
            <pubDate>Mon, 28 Feb 2022 19:18:56 GMT</pubDate>
            <description><![CDATA[<pre><code>s = input()
# count = 0
allzero, allone = 0, 0

def solution(s):    
    # global count
    global allzero, allone

    # for i in range(0, len(s) - 1):
        # if s[i] != s[i+1]:
            # k = i + 1
            # for j in range(k, len(s) - 1):
                # if s[j] != s[j+1]:
                    # m = j + 1
                    # before = s[k:m]
                    # after = s[k-2] * len(before)                
                    # s = s.replace(before, after)
                    # TypeError: &#39;str&#39; object does not support item assignment
                    # count += 1
    # return print(count)

    if s[0] == 0:
        allone += 1
    else:
        allzero += 1

    for i in range(0, len(s) - 1):
        if s[i] != s[i + 1]:
            if s[i + 1] == 1: 
                allzore += 1
            else:
                allone += 1
    return print(min(allzero, allone))

solution(s)</code></pre></br>

<h2 id="🐥-hyunjins-pick-시사점">🐥 HYUNJIN&#39;s PICK 시사점</h2>
</br>

<h3 id="1-해법">1. 해법</h3>
<p>해법으로 문자열을 순차적으로 확인하며 앞과 뒤가 다른 구간마다 앞의 문자열로 해당 구간을 변경하는 방법을 사용하려했다. 순차적으로 돌기때문에 count 변수가 1개 필요했고, 문자열을 그대로 써 인덱싱과 슬라이싱, replace 메서드를 사용하려했다. 하지만, 예제는 원하는 답이 나왔으나 그 외의 문자열을 테스트했을 때 원치않는 답이 출력됐고 구간마다 print를 넣어 출력해보니 아예 잘못된 로직임을 깨닳았다. 특히 로직을 작성한 나 조차도 2중 for문의 흐름을 따라갈 수 없었다.</p>
<p>모든 수가 0이 될 때와 1이 될 때로 count 변수를 2가지로 센 후, 문제에서 원하는 최소값을 선택해 출력하는 아이디어를 제시한 예시를 보았다. <strong>컴퓨팅 사고</strong>를 해야하는데 무작정 휴리스틱 알고리즘을 내세운 오류다.</p>
</br>

<h3 id="2-첫문자-검열">2. 첫문자 검열</h3>
<p><strong>문자열 전체를 0으로 할 것인지, 1로 할 것인지로 기준</strong>을 잡았다면 첫 문자열이 무엇인지부터 카운트해야할 것이다. 그 이후부터는 for문을 통해 앞과 뒤가 다른 문자열일 때 뒤의 문자열의 값에 따라 0 또는 1 카운트를 올리면 된다.</p>
</br>

<h3 id="3-연속된-하나-이상의-숫자-모두-뒤집기">3. 연속된 하나 이상의 숫자 모두 뒤집기</h3>
<p>앞 서 말했듯 문제풀이에 타인의 아이디어인 전체0 또는 1만들기 중 최소값 가져오기를 사용했고 여기엔 for문이 들어간다. 그 전에 나는 2중 for문 오류를 범했다. 그리고 반복적으로 내가 이해하지 못하는 부분은 <strong>앞과 다른 연속적인 뒷 문자들을 묶는 방법</strong>이다. 앞 뒤가 다른 문자열을 다루는 방법을 확인하려고 print(s[i], s[i + 1])를 사용해 확인하니, for문으로 정확하게 앞과 뒤가 달라지는 구간이 출력되는 것을 확인했다. 그리고 뒤의 문자의 종류에 따라 그에 맞는 count가 올라가는 것을 확인했다. 즉, <strong>s[i + 1]인 뒷 문자를 기준으로 count하기 때문에 연속적인 숫자들을 한 덩어리로 잡을 수 있는 것</strong>이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Algorithms] 곱하기 혹은 더하기 Review]]></title>
            <link>https://velog.io/@hyunjin3_3/Algorithms-%EA%B3%B1%ED%95%98%EA%B8%B0-%ED%98%B9%EC%9D%80-%EB%8D%94%ED%95%98%EA%B8%B0-Review</link>
            <guid>https://velog.io/@hyunjin3_3/Algorithms-%EA%B3%B1%ED%95%98%EA%B8%B0-%ED%98%B9%EC%9D%80-%EB%8D%94%ED%95%98%EA%B8%B0-Review</guid>
            <pubDate>Mon, 28 Feb 2022 15:39:45 GMT</pubDate>
            <description><![CDATA[<pre><code># 0 or 1은 더하기, 나머지는 곱하기

s = input()
# print(type(s)) &lt;Class &#39;str&#39;&gt;
#result = 0
result = int(s[0])
# result가 0이면 이후 곱하기 조건에서 값으로 0이 출력되므로,
# 0 =&gt; 전역 변수는 더하기에만 사용 =&gt; 순서대로 진행해야하므로 사용 불가
# 다른 방법 =&gt; 문자열 인덱스0을 넣고 result 액세스 하자마자 계산식행

def multiply_or_add(s):
    global result
    for i in range(1, len(s)):
    # &#39;TypeError: string indices must be integers&#39;
        if result == 0 or result == 1 or s[i] == 0 or s[i] == 1:
            result += int(s[i])
            # TypeError: unsupported operand type(s) for +=: &#39;int&#39; and &#39;str&#39;
        else:
            result = result * int(s[i])
            #TypeError: can&#39;t multiply sequence by non-int of type &#39;str&#39;
    return print(result)

multiply_or_add(s)</code></pre></br>

<h2 id="🐥-hyunjins-pick-시사점">🐥 HYUNJIN&#39;s PICK 시사점</h2>
</br>

<h3 id="1-시작값-검열">1. 시작값 검열</h3>
<p>순차적으로 연산하며 마지막에 결과값이라고 부르는 변수는 result라고 정했다. result를 전역 변수로 선언하며 0을 부여했고 테스트 결과값이 0이 나왔다. 이를 통해 result에 0을 부여하면 전역 변수의 첫번째 연산은 무조건 더하기를 넣어야하므로 불필요한 로직을 작성해함을 깨닳았고 숫자로만 이루어진 문자열S의 0번째 숫자를 부여했다.</p>
<p>이후 첫 번째 숫자가 0이 아니고 두 번째 숫자가 0 또는 1이 아닐 때는 곱하기를 하는 것이 가장 큰 수를 구하는 방법이라 판단해 이를 기준으로 로직을 작성했다.</p>
</br>

<h3 id="2-자료형-파악">2. 자료형 파악</h3>
<p>(입력값 자료형 확인)
입력받은 값의 타입을 프린트했더니 &#39;str&#39; 클래스임을 확인했다. 자연스럽게 string index사용을 떠올릴 수 있었다. </p>
<p>(for문 입력 오류)
하지만, 연산을 시도하자 &#39;TypeError: string indices must be integers&#39;이 출력됐다. for [i] in s로 for문의 파라미터를 잘못넣었다. for문에서는 연속적인 인덱스를 돌리고 아래 조건문에 연속적인 인덱스를 사용해 코드를 작성해야했는데, 나사가 빠져있던 것이다^_ㅠ. </p>
<p>(연산을 위한 자료형 변환)
for문을 정정했으나, &#39;TypeError: unsupported operand type(s) for +=: &#39;int&#39; and &#39;str&#39;, TypeError: can&#39;t multiply sequence by non-int of type &#39;str&#39;&#39;이 출력됐다. str 값은 연산할 수 없다는 뜻으로 연산이 필요한 srt값들에 int()을 사용해 해결했다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Algorithms] 모험가 길드 Review]]></title>
            <link>https://velog.io/@hyunjin3_3/Algorithms-%EB%AA%A8%ED%97%98%EA%B0%80-%EA%B8%B8%EB%93%9C-Review</link>
            <guid>https://velog.io/@hyunjin3_3/Algorithms-%EB%AA%A8%ED%97%98%EA%B0%80-%EA%B8%B8%EB%93%9C-Review</guid>
            <pubDate>Mon, 28 Feb 2022 14:00:38 GMT</pubDate>
            <description><![CDATA[<pre><code>n = int(input())
x = list(map(int, input().split()))
# list : &#39;map&#39; object has no attribute &#39;sort&#39;
x.sort()
group = 0
person = 0
# group, person 제거 -&gt; NameError: name &#39;group&#39;, &#39;person&#39; is not defined

def solution(n, x):
    for i in x:
        global person
        person += 1
        # 1. UnboundLocalError: local variable &#39;person&#39; referenced before assignment.
        # 2. global person += 1 -&gt; syntaxError: invalid syntax
        if person &gt;= i:
            global group
            group += 1
            person = 0
     return print(group)
     # IndentationError: unindent does not match any outer indentation level

solution(n, x)</code></pre></br>

<h2 id="🐥-hyunjins-pick-시사점">🐥 HYUNJIN&#39;s PICK 시사점</h2>
</br>

<h3 id="1-자료형-변경list">1. 자료형 변경(list)</h3>
<p>문제에서 x값과 그룹 구성 인원은 비례하고 그룹 수의 최댓값을 출력해야 하므로, x값을 오름차순으로 정렬하여 작은 x값부터 인원수를 채워야 가장 많은 그룹 수를 구할 수 있다.</p>
<p>따라서 x값을 오름차순으로 정렬해야하므로 list메서드인 sort를 사용하기 위해 map object에 list()를 사용해 자료형을 변경해주었다.</p>
</br>

<h3 id="2-로컬-변수">2. 로컬 변수</h3>
<p><strong>파이썬은 기본적으로 변수를 로컬 변수로 간주</strong>한다. 따라서 함수 코드 내에서 전역 변수를 지정하지않으면, 함수 내의 전역 변수를 로컬 변수로 간주한다. 이 때문에 함수 내의 코드가 전역 변수에 액세스할 때 &#39;UnboundLocalError&#39; 즉, 할당 전 참조된 지역변수라는 오류가 발생한 것이다. </p>
<p>해결을 위해 함수 내에서 전역 변수를 사용하기 전, <strong>global 키워드</strong>를 통해 변수를 전역으로 선언해주면 된다.</p>
<p>Ref : <a href="https://www.delftstack.com/ko/howto/python/python-local-variable-referenced-before-assignment/">(Python) UnboundLocalError: local variable referenced before assignment.</a></p>
<p><strong>🌈 전역 변수란?</strong>
함수 밖에서 만들어진 변수로 함수의 실행과 관계없이 <strong>지속적으로 유지</strong>되는 변수이다.</p>
<p><strong>🌈 로컬 변수란?</strong>
<strong>함수 안에서 일시적</strong>으로 만들어진 변수로 함수가 실행되면 만들어지고 종료되면 함께 소멸된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Ref]The Art of Clean Code]]></title>
            <link>https://velog.io/@hyunjin3_3/The-Art-of-Clean-Code</link>
            <guid>https://velog.io/@hyunjin3_3/The-Art-of-Clean-Code</guid>
            <pubDate>Sun, 20 Feb 2022 15:29:54 GMT</pubDate>
            <description><![CDATA[<p>클린 코드의 7가지 기술</p>
<ol>
<li><p>80/20의 기술(Pareto Principle)
<a href="https://blog.finxter.com/the-80-20-principle-in-programming/?tl_inbound=1&amp;tl_target_all=1&amp;tl_form_type=1&amp;tl_period_type=3">The 80/20 Principle in Programming</a></p>
</li>
<li><p>단순하게(Minimalism in Programming)
<a href="https://blog.finxter.com/minimalism-in-programming/?tl_inbound=1&amp;tl_target_all=1&amp;tl_form_type=1&amp;tl_period_type=3">Keep It Simple, Stupid!</a></p>
</li>
<li><p>최소한의 실행 가능한 제품 구축(Build a Minimum Viable Product)
<a href="https://blog.finxter.com/minimum-viable-product-mvp-in-software-development-or-why-stealth-sucks/?tl_inbound=1&amp;tl_target_all=1&amp;tl_form_type=1&amp;tl_period_type=3">MVP(Minimum Viable Product) in Software Development - Why Stealth Sucks</a></p>
</li>
<li><p>깨끗하고 간단한 코드 작성(Write Clean and Simple Code)
<a href="https://blog.finxter.com/tips-to-write-clean-code/?tl_inbound=1&amp;tl_target_all=1&amp;tl_form_type=1&amp;tl_period_type=3">7 Tips to Write Clean Code</a></p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Ref] Terraform]]></title>
            <link>https://velog.io/@hyunjin3_3/Ref-Terraform</link>
            <guid>https://velog.io/@hyunjin3_3/Ref-Terraform</guid>
            <pubDate>Wed, 16 Feb 2022 04:43:10 GMT</pubDate>
            <description><![CDATA[<p><a href="https://acloudguru.com/blog/engineering/the-ultimate-terraform-cheatsheet?utm_source=marketo&amp;utm_medium=email&amp;utm_campaign=ecomm_b2c&amp;mkt_tok=MTk0LVVIUC02MDkAAAGB_QZ7v1Nyjk0LSnnLUiNokBySiEcaTEGQdH5aUO5lf8fpfbf3gaSG5ufGF1Jp4xA6XkWFh_1F8ZNdECI3nHt6WX3ve3h5tyALHx9NIwQKeTMAcOM">https://acloudguru.com/blog/engineering/the-ultimate-terraform-cheatsheet?utm_source=marketo&amp;utm_medium=email&amp;utm_campaign=ecomm_b2c&amp;mkt_tok=MTk0LVVIUC02MDkAAAGB_QZ7v1Nyjk0LSnnLUiNokBySiEcaTEGQdH5aUO5lf8fpfbf3gaSG5ufGF1Jp4xA6XkWFh_1F8ZNdECI3nHt6WX3ve3h5tyALHx9NIwQKeTMAcOM</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Ref] Open API(gRPC)와 Rest API]]></title>
            <link>https://velog.io/@hyunjin3_3/Open-APIgRPC%EC%99%80-Rest-API</link>
            <guid>https://velog.io/@hyunjin3_3/Open-APIgRPC%EC%99%80-Rest-API</guid>
            <pubDate>Sat, 05 Feb 2022 09:27:36 GMT</pubDate>
            <description><![CDATA[<p><a href="https://cloud.google.com/blog/products/api-management/understanding-grpc-openapi-and-rest-and-when-to-use-them">https://cloud.google.com/blog/products/api-management/understanding-grpc-openapi-and-rest-and-when-to-use-them</a>
<a href="https://stackoverflow.com/questions/48123867/open-api-vs-rest-api-difference">https://stackoverflow.com/questions/48123867/open-api-vs-rest-api-difference</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Overview_concept]]></title>
            <link>https://velog.io/@hyunjin3_3/Overviewconcept</link>
            <guid>https://velog.io/@hyunjin3_3/Overviewconcept</guid>
            <pubDate>Thu, 27 Jan 2022 16:24:33 GMT</pubDate>
            <description><![CDATA[<p>프로그래밍 언어를 사용한다면 기본적으로 알고 있어야하는 지식: 자료구조와 알고리즘</p>
<p>프로그래밍 언어란 다양한 결과값을 만들기 위해 여러가지 명령어들을 모아놓은 집합, 컴퓨터 프로그래밍에서 어떠한 알고리즘을 구현하기 위해 사용하는 언어를 일컬음(HTML과 CSS은 해당X).</p>
<p>현업에서는 언어sk 프레임워크, 라이브러리에서 잘 만들어진 기능을 가져와 만들고자 하는 기능을 가장 적합하고 효과적으로 가져와 사용하는 경우가 대부분</p>
<hr>
<h3 id="코딩-테스트의-목적">코딩 테스트의 목적</h3>
<p>얼마나 정확하고 효율적으로 코드를 작성하는가</p>
<p>작성한 알고리즘을 통한 질의응답으로 자료구조와 알고리즘 및 시간과 공간 복잡도에 대한 이해도 확인</p>
<p>알고리즘 작성 후 알고리즘 선택 이유와 장단점, 다른 알고리즘과의 차이 등에 대한 의견을 나누며 진행</p>
<hr>
<h3 id="자료구조">자료구조</h3>
<p>서비스나 어플리케이션에서 필요한 데이터를 메모리에 어떻게 구조적으로 잘 정리해 담고 관리하고, 최종적으로 가장 효율적인 방식으로 필요한 데이터에 빠르게 접근해 필요한 수정, 삽입, 삭제를 할 수 있도록 설계</p>
<p>서비스에서 클라이언트에게 데이터를 제공하거나 어플리케이션에서 사용자에게 필요한 데이터를 보요주거나 수정할 때 효율적으로 이를 사용하기 위해서는 기능에 적합한 알맞은 자료구조를 사용하는 것이 중요함</p>
<p>종류 - 배열, 단일 연결 리스트, 이중 연결 리스트, 스택, 해쉬 테이블 등 다양함</p>
<p>공부 포인트 - 자료구조안의 데이터 순서가 보장되는지, 중복된 데이터가 들어갈 수 있는지, 검색할 때 얼마나 효율적인지, 원하는 기능에 따라 수정할 때 얼마나 효율적인지 위주로 학습</p>
<hr>
<h3 id="알고리즘">알고리즘</h3>
<p>제한된 공간과 시간 안에서 데이터를 어떻게 처리할 것인지를 정해놓은 로직으로 주어진 인풋으로 정의된 계산을 수행한 다음에 아웃풋 결과값을 내는 것</p>
<p>동일한 알고리즘의 로직인 Big O를 통해 인풋의 사이즈가 커질수록, 시간이 얼마나 더 많이 걸리느냐를 정의해 시간 복잡도를 표기하는 방법 존재</p>
<p>주어진 데이터를 검색하거나 정렬 또는 총점 등 다양한 계산</p>
<p>제공된 데이터를 정말 작은 공간과 빠른 시간 안에 효율적으로 처리하는 알고리즘이 베스트</p>
<p>공부 포인트 - 인풋 사이즈가 커질수록 BigO가 어떻게 변화하는지, 공간과 시간의 복잡도는 어떤지, 알고리즘마다 어떤 자료 구조를 이용하는게 좋을지</p>
<hr>
<p>추천 도서 - overview_concept.md in local</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[NETWORKS] 물리적인 구성]]></title>
            <link>https://velog.io/@hyunjin3_3/Networks-%EB%AC%BC%EB%A6%AC%EC%A0%81%EC%9D%B8-%EA%B5%AC%EC%84%B1</link>
            <guid>https://velog.io/@hyunjin3_3/Networks-%EB%AC%BC%EB%A6%AC%EC%A0%81%EC%9D%B8-%EA%B5%AC%EC%84%B1</guid>
            <pubDate>Mon, 17 Jan 2022 15:16:55 GMT</pubDate>
            <description><![CDATA[<h3 id="네트워크-서비스-분류">네트워크 서비스 분류</h3>
<p><strong>사용자</strong> : 인터넷 접속을 통해 활동하는 자</p>
<p><strong>제공자</strong> : 클라우드, 데이터 센터, 회사 기계실 등 서버를 놓고 고객 또는 내부 직원에게 서비스를 제공하는 자</p>
<p>제공 시 고려사항 : 접속한 구성원 수, 필요한 네트워크의 속도 등</p>
<br/>

<h3 id="홈-네트워크">홈 네트워크</h3>
<p><strong>인터넷</strong>=케이블=<strong>모뎀</strong>=케이블=<strong>공유기</strong>=케이블/매체=<strong>단말(노트북/스마트폰/태블릿/데스크톱)</strong></p>
<ul>
<li>인터넷 회선(FTTH, 케이블 인터넷, VDSL) 종류에 상관없음</li>
<li><strong>모뎀, 공유기, 단말 간에 물리적 연결</strong>이 필요</li>
<li><ul>
<li>모뎀: 전송선에 디지털 신호를 바로 보내면 신호 전달이 잘 되지 않기 때문에 컴퓨터의 디지털 신호를 아날로그 신호로 바꾸어 전송하고, 아날로그 신호를 받아 디지털 신호로 읽어내는 정보 전달을 위한 신호 변조 송신 및 신호 복조 장치(데이터가 같은 비트로 연속되면 전송특성상 신호 전달에 문제가 발생하므로 전송선의 특성에 맞추어 변조해야 함).</li>
</ul>
</li>
<li><ul>
<li>공유기(라우터): WAN포트와 LAN포트로 나뉘어져 있으며 인터넷 망, 회선 혹은 모뎀 등의 인터넷 신호를 WAN으로 받아서 LAN으로 뿌려주는 콘센트 역할을 함(ex. iptime)</li>
</ul>
</li>
</ul>
<h4 id="홈네트워크의-물리적-연결의-종류">홈네트워크의 물리적 연결의 종류</h4>
<ol>
<li><strong>무선</strong> 연결: 무선 랜 카드와 무선신호를 보낼 수 있는 매체(공기)가 필요</li>
</ol>
<p>-- 무선 랜 카드: 공유기에서 나온 인터넷 신호를 수신하는 역할(노트북의 랜카드가 고장났을 때 일체형인 메인보드를 뜯어 수리하면 비용이 많이 나오는데, 2~3만원의 무선 랜 카드로 이를 단기적으로 해결할 수 있음)</p>
<ol start="2">
<li>*<em>유선 *</em>연결: 유선 랜 카드(이더넷 랜 카드: 일반적으로 보드에 내장)와 랜 케이블(랜선)가 필요</li>
</ol>
<p>-- 유선 랜 카드: 경량화 된 노트북에서 없어진 랜선 포트 대용품으로 인터넷 속도 향상을 기대할 수 있음(바이트 지원 스펙 확인 필요)
-- 랜 케이블: 유선 인터넷 사용을 위한 케이블</p>
<br/>

<h3 id="데이터-센터-네트워크">데이터 센터 네트워크</h3>
<ul>
<li>목표 : <strong>안정적이고 빠른 대용량 서비스</strong> 제공</li>
<li>안정적인 서비스 제공을 위해 <strong>다양한 이중화 기술</strong> 사용</li>
<li>많은 서버와 서비스를 위해 <strong>높은 통신량 수용</strong> 가능해야 함(이를 위해 고속 이더넷 기술 사용됌)</li>
<li>가상화 기술과 높은 대역폭을 요구하는 스케일 아웃 기반의 애플리케이션과 서비스의 등장으로 3계층 디자인에서 <strong>2계층 디자인(Spine-Leaf) 구성으로 변화</strong>됌</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Git 토큰 인증(Git Personal access token)]]></title>
            <link>https://velog.io/@hyunjin3_3/Git-%ED%86%A0%ED%81%B0-%EC%9D%B8%EC%A6%9DGit-Personal-access-token</link>
            <guid>https://velog.io/@hyunjin3_3/Git-%ED%86%A0%ED%81%B0-%EC%9D%B8%EC%A6%9DGit-Personal-access-token</guid>
            <pubDate>Sat, 15 Jan 2022 15:36:45 GMT</pubDate>
            <description><![CDATA[<h3 id="포스팅-목적">포스팅 목적</h3>
<p>본인은 개인 레파지토리는 Git Bash, 팀 레파지토리는 IDE를 사용해서 Push를 한다.
개인보다 팀 레파지토리 사용 빈도가 많다보니 Git Bash Push Login이 자주 헷갈려서 이를 위해 포스팅을 한다.</p>
<h3 id="결론">결론</h3>
<p>👉🏻 Password란에 발급받은 개인 토큰을 사용해야한다. 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 발급을 도와줄 링크는 해결방법에 있다.
Username : Username
Password : <strong>Personal access token</strong></p>
<h3 id="원인">원인</h3>
<p><img src="https://images.velog.io/images/hyunjin3_3/post/9da77db4-3a37-4947-b889-48b21fd4a914/image.png" alt="">Push를 하면 위의 이미지와 같은 문구가 뜬다(새로 만든 레파지토리 푸시: git push -u origin master/ 기존 레파지토리 푸시: git push -u). 
문구는 비밀번호를 통한 인증 이용 서비스가 2021년 8월 13일부로 종료되었으니 토큰 인증을 사용하기를 권한다는 내용과 더 자세한 정보를 원한다면 해당 블로그 링크를 참고하라는 내용이다.</p>
<h3 id="해결방법">해결방법</h3>
<p><a href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token#creating-a-token">Git Creating a personal access token</a>
위의 링크에 접속해서 Creating a token의 내용을 보면 이미지와 함께 상세한 설명이 명시되어있다.
해당 내용을 참조하여 개인 토큰을 생성하고 토큰을 잘 저장해두었다가 사용하면 된다.
생성 버튼을 누르면 토큰이 다시 보이지않으니, 누르기 전 토큰을 미리 저장해두어야 한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[URL]URL Ref]]></title>
            <link>https://velog.io/@hyunjin3_3/URLURL-Ref</link>
            <guid>https://velog.io/@hyunjin3_3/URLURL-Ref</guid>
            <pubDate>Sun, 19 Dec 2021 18:06:11 GMT</pubDate>
            <description><![CDATA[<p>출처📜 O&#39;REILLY - HTTP: THE DEFINITIVE GUIDE(인사이트 - HTTP 완벽 가이드)
&quot;본 포스팅은 책에서 소개한 페이지를 틈틈히 읽어보고자 기록한 책 내용 중 일부입니다.&quot;
<br/></p>
<h3 id="1-httpwwww3orgaddressing">1. <a href="http://www.w3.org/Addressing/">http://www.w3.org/Addressing/</a></h3>
<p>URI와 URL의 작명 및 할당에 대한 W3C 웹페이지</p>
<h3 id="2-httpwwwietforgrfcrfc1738">2. <a href="http://www.ietf.org/rfc/rfc1738">http://www.ietf.org/rfc/rfc1738</a></h3>
<p>RFC 1738, &quot;Uniform Resource Locators (URL),&quot; by T.Berners-Lee, L. Masinter and M. McCahill.</p>
<h3 id="3-httpwwwietforgrfcrfc2396txt">3. <a href="http://www.ietf.org/rfc/rfc2396.txt">http://www.ietf.org/rfc/rfc2396.txt</a></h3>
<p>RFC 2396, &quot;Uniform Resource Identifiers (URI): Generic Syntax,&quot; by T.berners-Lec, R. Fielding, and L. Masinter.</p>
<h3 id="4-httpwwwietforfrfcrfc2141txt">4. <a href="http://www.ietf.orf/rfc/rfc2141.txt">http://www.ietf.orf/rfc/rfc2141.txt</a></h3>
<p>RFC 2141, &quot;URN Sybtax,&quot; by R.Moats.</p>
<h3 id="5-httppurloclcorg">5. <a href="http://purl.oclc.org">http://purl.oclc.org</a></h3>
<p>지속 통합 자원 지시자(persistent uniform resource locator, PURL) 웹 사이트.</p>
<h3 id="6-httpwwwietforgrfc1808txt">6. <a href="http://www.ietf.org/rfc1808.txt">http://www.ietf.org/rfc1808.txt</a></h3>
<p>RFC 1808, &quot;Relative Uniform Resource Locators,&quot; by R.Fielding.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Protocol] HTTP Protocol Ref]]></title>
            <link>https://velog.io/@hyunjin3_3/Ref-HTTP-Protocol</link>
            <guid>https://velog.io/@hyunjin3_3/Ref-HTTP-Protocol</guid>
            <pubDate>Sun, 19 Dec 2021 15:31:30 GMT</pubDate>
            <description><![CDATA[<p>출처📜 O&#39;REILLY - HTTP: THE DEFINITIVE GUIDE(인사이트 - HTTP 완벽 가이드)
&quot;본 포스팅은 책에서 소개한 페이지를 틈틈히 읽어보고자 기록한 책 내용 중 일부입니다.&quot;
<br/></p>
<h1 id="정보">정보</h1>
<h3 id="1-http-pocket-reference">1. HTTP Pocket Reference</h3>
<p>클린턴 윙(Clinton Wong), 오라일리 출판사(O&#39;Reilly &amp; Associates, Inc). 이 작은 책은 HTTP에 대해 간략하게 소개하며, HTTP 트랜잭션을 구성하는 각 헤더와 상태코드에 대한 설명을 찾아보기 쉬운 형태로 제공한다.</p>
<h3 id="2-httpwwww3orgprotocols">2. <a href="http://www.w3.org/Protocols/">http://www.w3.org/Protocols/</a></h3>
<p>이 W3C 웹페이지는 HTTP 프로토콜에 대한 여러 훌륭한 링크를 포함한다.</p>
<h3 id="3-httpwwwietforgrfcrfc2616txt">3. <a href="http://www.ietf.org/rfc/rfc2616.txt">http://www.ietf.org/rfc/rfc2616.txt</a></h3>
<p>RFC 2616, &quot;Hypertext Transfer Protocol-HTTP/1.1&quot;은 HTTP/1.1의 현재 버전에 대한 공식 명세다. 이 명세는 HTTP에 대한 잘 쓰였고 잘 조직된 상세한 참고문서이지만, HTTP의 근간이 되는 개념 및 계기나 이론과 실제의 차이를 배우길 원하는 독자에게는 이상적이지 않다. 우리는 이 책이 그러한 개념을 채워주어 독자가 이 명세를 더 잘 활용하게 되기를 희망한다.</p>
<h3 id="4-httpwwwietforgrfcrfc1945txt">4. <a href="http://www.ietf.org/rfc/rfc1945.txt">http://www.ietf.org/rfc/rfc1945.txt</a></h3>
<p>RFC 1945, &quot;Hypertext Transfer Protocol-HTTP/1.0&quot;은 오늘날 HTTP의 초석이 된 HTTP/1.0을 서술한 정보성(informational) RFC이다. 이 명세가 쓰일 당시를 기준으로, 공식적으로 허용되는 동시에 모범이 될 만한 웹 애플리케이션의 행동방식들에 대해 자세히 설명한다. 또한 HTTP/1.1에서는 더 이상 사용하지 않게 되었지만 여전히 구식 애플리케이션에서는 널리 구현되어 있는 동작들에 대한 유용한 설명도 포함한다.</p>
<h3 id="5-httpwwww3orgprotocolshttpaslmplementedhtml">5. <a href="http://www.w3.org/Protocols/HTTP/Aslmplemented.html">http://www.w3.org/Protocols/HTTP/Aslmplemented.html</a></h3>
<p>이 웹페이지에는 GET 요청만이 구현되어 있고 내용 유형 개념도 없는 1991년의 HTTP/0.9프로토콜에 대한 설명이 담겨있다.</p>
<br/>
<br/>

<h1 id="역사">역사</h1>
<h3 id="1-httpwwww3orgprotocolswhyhttphtml">1. <a href="http://www.w3.org/Protocols/WhyHTTP.html">http://www.w3.org/Protocols/WhyHTTP.html</a></h3>
<p>1991년에 HTTP의 저자에 의해 만들어진 이 간략한 웹페이지는, HTTP의 최소주의적인 본래 목표 중의 일부를 강조한다.</p>
<h3 id="2-httpwwww3orghistoryhtml">2. <a href="http://www.w3.org/History.html">http://www.w3.org/History.html</a></h3>
<p>&quot;A Little History of the World Wide Web&quot;은 월드 와이드 웹과 HTTP의 초기 목표와 탄생에 대한 짧지만 재미있는 시각을 제공한다.</p>
<h3 id="3-httpwwww3orgdesignlssuesarchitexturehtml">3. <a href="http://www.w3.org/Designlssues/Architexture.html">http://www.w3.org/Designlssues/Architexture.html</a></h3>
<p>&quot;Web Architecture from 50,000 Feet&quot;는 HTTP를 비롯한 관련 웹 기술에영향을 미친 설계 원리와 월드 와이드 웹에 대해 폭넓고도 대담한 시각으로 서술한다.</p>
<br/>
<br/>

<h1 id="기타-월드-와이드-웹-정보">기타 월드 와이드 웹 정보</h1>
<h3 id="1-httpwwww3org">1. <a href="http://www.w3.org">http://www.w3.org</a></h3>
<p>월드 와이드 웹 컨소시엄(W3C)은 웹을 기술적으로 주도하는 팀이다. W3C는 진화하는 웹을 위한 상호 교환이 가능한 기술(명세, 가이드라인, 소프트웨어, 도구)을 개발한다. W3C사이트는 웹 기술에 대한 자세한 문서와 입문 자료의 보고다.</p>
<h3 id="2-httpwwwieftorgrfcrfc2396txt">2. <a href="http://www.ieft.org/rfc/rfc2396.txt">http://www.ieft.org/rfc/rfc2396.txt</a></h3>
<p>RFC2396, &quot;Uniform Resource Idenrifiers (URI): Generic Syntax&quot;는 URI와 URL에 대한 자세한 참고서다.</p>
<h3 id="3-httpwwwietforgrfcrfc2141txt">3. <a href="http://www.ietf.org/rfc/rfc2141.txt">http://www.ietf.org/rfc/rfc2141.txt</a></h3>
<p>RFC 2141, &quot;URN Syntax&quot;는 URN 문법을 묘사한 1997년의 명세다.</p>
<h3 id="4-httpwwwietforgrfcrfc2046txt">4. <a href="http://www.ietf.org/rfc/rfc2046/txt">http://www.ietf.org/rfc/rfc2046/txt</a></h3>
<p>RFC 2046, &quot;MIME part 2: Media Types&quot;은 멀티미디어 콘텐츠 관리를 위한 다목적 인터넷 메일 확장 표준의 다섯 인터넷 명세 중 두 번째 것이다.</p>
<h3 id="5-httpwwwwrecorgdraftsdraft-ietf-wrec-taxonomy-06txt">5. <a href="http://www.wrec.org/Drafts/draft-ietf-wrec-taxonomy-06.txt">http://www.wrec.org/Drafts/draft-ietf-wrec-taxonomy-06.txt</a></h3>
<p>인터넷 초안 &quot;Internet Web Replication and Caching Taxonomy&quot;는 웹 구성요소에 대한 표준 용어집이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Network] REST API + RESTful API Concept🐱‍🏍]]></title>
            <link>https://velog.io/@hyunjin3_3/NetworkREST-API-RESTful-API-Concept</link>
            <guid>https://velog.io/@hyunjin3_3/NetworkREST-API-RESTful-API-Concept</guid>
            <pubDate>Mon, 22 Nov 2021 16:35:05 GMT</pubDate>
            <description><![CDATA[<h1 id="rest">REST</h1>
<p>👉 프로토콜이나 표준이 아닌 웹 서비스와 모바일 애플리케이션 경량화의 필요에 맞춘 아키텍처 원칙 세트 (소프트웨어 아키텍처)</p>
<p>👉 가이드라인이므로 개발자는 REST를 다양한 방식으로 구현 가능함</p>
<h1 id="rest-api">REST API</h1>
<p>👉 &#39;REST 아키텍처&#39;의 제약조건을 준수하는 애플리케이션 프로그래밍 인터페이스</p>
<p>👉 URI(자원) + HTTP Method(행위) + 표현으로 구성</p>
<p>👉 데이터 요청은 일반적으로 HTTP(하이퍼텍스트 전송 프로토콜)을 기반으로 구현하므로 이루어짐</p>
<ul>
<li>HTTP Method<ul>
<li>GET(Read)</li>
<li>POST(Create)<ul>
<li>PUT(Update)</li>
</ul>
</li>
<li>DELETE(Delete)</li>
</ul>
</li>
</ul>
<p>👉 요청을 수신하면 RESTful API 또는 RESTful 웹 서비스가 HTML, XML, 일반텍스트, JSON과 같은 형식의 메시지를 반환함.</p>
<p>※ REST = Representational State Transfer</p>
<h1 id="restful-api">RESTful API</h1>
<p>👉 REST API를 단순하고 사용하기 쉽게 한 것</p>
<p>👉 6가지 아키텍처 가이드라인을 준수한 애플리케이션</p>
<ol>
<li><p><strong>Client-Server</strong> : 클라이언트 + 서버 + 리소스 구성의 &#39;클라이언트-서버 아키텍처&#39;</p>
</li>
<li><p><strong>Stateless</strong> : Stateless클라이언트-서버 커뮤니케이션(단, 세션의 상태에 대한 정보가 클라이언트에 저장됌)</p>
</li>
<li><p><strong>Cacheable</strong> : 일부 커뮤니케이션(request, response)에서 캐시 데이터 사용이 필요함</p>
</li>
<li><p><strong>Uniform Inerface</strong> : 커뮤니케이션 시 전체적인 아키텍처를 잘 파악할 수 있는 일관된 인터페이스(요구사항) 필요</p>
</li>
<li><p><strong>Layered System</strong> : 클라이언트-서버 간의 계층적인 상호작용을 위한 시스템 제약 필요 (클라이언트가 서버의 정보를 알 수 없도록)</p>
</li>
<li><p><strong>Self-Descriptiveness</strong> : 선택적 코드 온디맨드(서버가 실행 가능한 코드를 응답해 클라이언트에서 실행할 수 있도록 하는 행위)</p>
</li>
</ol>
<h1 id="naming-convention">Naming Convention</h1>
<ul>
<li><p>소문자 사용</p>
</li>
<li><p>계층 관계는 슬래시(/)로 표현</p>
</li>
<li><p>리소스명은 명사 사용</p>
</li>
<li><p>하이픈(-) 사용 (언더스코 사용❌)</p>
</li>
<li><p>URI의 마지막은 슬래시❌</p>
</li>
</ul>
<br/>

<h4 id="-api는-소스코드들-간-데이터-전송-rest-api는-웹의-프로토콜-내에서-데이터-전송">=&gt; API는 소스코드들 간 데이터 전송/ REST API는 웹의 프로토콜 내에서 데이터 전송!</h4>
<hr>
<p>Ref 📚 </p>
<ol>
<li><p><a href="https://www.redhat.com/ko/topics/integration/whats-the-difference-between-soap-rest">RedHat - REST와 SOAP 비교</a></p>
</li>
<li><p><a href="https://jy-tblog.tistory.com/24">jy.log - [ Network ] REST란? / Rest API와 Restful API의 차이점 / REST 규칙</a></p>
</li>
<li><p><a href="https://rural-mouse.tistory.com/34">촌쥐 - RESTful API 개념정리</a></p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[CI/CD] Cloud CI/CD Ref📚]]></title>
            <link>https://velog.io/@hyunjin3_3/CICD-Cloud-CICD-Ref</link>
            <guid>https://velog.io/@hyunjin3_3/CICD-Cloud-CICD-Ref</guid>
            <pubDate>Mon, 15 Nov 2021 13:49:36 GMT</pubDate>
            <description><![CDATA[<p><a href="https://www.slideshare.net/jesangyoon/aws-lambda-cicd">🌞 AWS Lambda CI/CD</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Repository]Harbor⚓]]></title>
            <link>https://velog.io/@hyunjin3_3/RepositoryHarbor</link>
            <guid>https://velog.io/@hyunjin3_3/RepositoryHarbor</guid>
            <pubDate>Mon, 15 Nov 2021 13:47:55 GMT</pubDate>
            <description><![CDATA[<h2>open source private docker registry</h2>

<p>역할기반접근제어, 이미지취약점스캐닝, 이미지서명 등의 기능 제공</p>
<p><a href="https://goharbor.io/">🌞 CNCF Harbor io</a>
<a href="https://github.com/goharbor/harbor">🌞 Github Harbor</a>
<a href="https://engineering.linecorp.com/ko/blog/harbor-for-private-docker-registry/">🌞 Line Engineering Posting</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Architecture]Architecture Ref📚]]></title>
            <link>https://velog.io/@hyunjin3_3/ArchitectureArchitecture-Ref</link>
            <guid>https://velog.io/@hyunjin3_3/ArchitectureArchitecture-Ref</guid>
            <pubDate>Mon, 15 Nov 2021 13:38:01 GMT</pubDate>
            <description><![CDATA[<p><a href="https://medium.com/zenuml/zenuml-sequence-diagram-examples-4e54e3bdca3b">🌞 ZenUML sequence diagram examples</a>
<a href="https://mychartguide.com/deployment-diagram/">🌞 Deployment Diagram Guide</a>
<a href="https://www.uml-diagrams.org/examples/deployment-example-clusters.png">🌞 uml diagram - clusters</a>
<a href="https://sites.google.com/site/mrsdproject201415teame/_/rsrc/1416432046009/project-development/physical-architecture/cyberphysical%20arch.png">🌞 Physical Architecture</a>
<a href="https://www.slideshare.net/wweinmeyer79/an-introduction-to-fundamental-architecture-concepts-25828722">🌞 An Introduction to Fundamental Architecture Concepts</a>
<a href="https://www.slideshare.net/powerhan96/sw-29177655">🌞 [SW Architecture Conference]Cloud Architecture</a>
<a href="https://forum.huawei.com/enterprise/en/data-movement-in-data-lake-architecture/thread/763915-891">🌞 Data Lake Architecture</a>
<a href="https://www.kai-waehner.de/blog/2021/09/23/real-time-kappa-architecture-mainstream-replacing-batch-lambda/">🌞 Kappa Architecture</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Architecture]Kappa Architecture🌠]]></title>
            <link>https://velog.io/@hyunjin3_3/ArchitectureKappa-Architecture</link>
            <guid>https://velog.io/@hyunjin3_3/ArchitectureKappa-Architecture</guid>
            <pubDate>Mon, 15 Nov 2021 13:15:37 GMT</pubDate>
            <description><![CDATA[<p><a href="https://www.kai-waehner.de/blog/2021/09/23/real-time-kappa-architecture-mainstream-replacing-batch-lambda/">🌞 KAI WAEHNER : Kappa Architecture</a></p>
<h1>Kappa Architecture</h1>
<h3>"이벤트 스트리밍" + "단순성"</h3>
카파 아키텍처는 이벤트 기반 및 트랜잭션 및 분석 워크로드에 실시간으로 모든 규모에서 모든 데이터를 처리할 수 있는 소프트웨어 아키텍처(= 이벤트 스트리밍 아키텍처)이다.
<br/>
<br/>

<h4>단순성에 중점을 둔 단일 정보 소스 활용 아키텍처</h4>

<ul>
<li>단일 아키텍처로 모든 사용 사례(스트리밍, 배치, RPC) 처리</li>
<li>항상 동기화되는 하나의 코드 베이스</li>
<li>하나의 인프라 및 기술 세트</li>
<li>인프라의 핵심은 실시간, 확장 가능 및 안전성</li>
<li>순서가 보장되고 불일치가 없는 향상된 데이터 품질</li>
<li>새로운 사용 사레를 위해 재설계 필요없음<br/>

</li>
</ul>
<h4>내부 관점 : 데이터 관리</h4>

<ul>
<li>데이터 가용성/보존</li>
<li>데이터 일관성 및 내결함성</li>
<li>늦게 도착하는 데이터 처리</li>
<li>데이터 재처리</li>
<li>데이터 통합<br/>

</li>
</ul>
<h4>외부 관점 : 애플리케이션 및 데이터 저장소</h4>

<ul>
<li>데이터 소비</li>
<li>데이터 저장</li>
<li>데이터 처리</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[알고리즘&자료구조] 병렬 알고리즘 + 반복 심화 탐색 + 역인덱스]]></title>
            <link>https://velog.io/@hyunjin3_3/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EB%B3%91%EB%A0%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B0%98%EB%B3%B5-%EC%8B%AC%ED%99%94-%ED%83%90%EC%83%89-%EC%97%AD%EC%9D%B8%EB%8D%B1%EC%8A%A4</link>
            <guid>https://velog.io/@hyunjin3_3/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EB%B3%91%EB%A0%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B0%98%EB%B3%B5-%EC%8B%AC%ED%99%94-%ED%83%90%EC%83%89-%EC%97%AD%EC%9D%B8%EB%8D%B1%EC%8A%A4</guid>
            <pubDate>Mon, 19 Jul 2021 11:24:36 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="병렬-알고리즘-parallel-algorithm">병렬 알고리즘 (parallel algorithm)</h2>
</blockquote>
<br>

<p><img src="https://images.velog.io/images/hyunjin3_3/post/7995eb6d-7ef5-4942-9ccc-0a29178fa4ab/parallel%20algorithm.gif" alt=""></p>
<br>

<ul>
<li><p><strong>문제를 나누어</strong> 각 부분을 (대략)같은 시간 내에 처리 👉 <strong>결과 취합</strong> 방식</p>
</li>
<li><p>😇<strong>장점</strong>😇 : 분업으로 시간단축</p>
</li>
<li><p>👿<strong>단점</strong>👿 : 업무 분할과 취합에 시간 소요, 병렬 처리가 어렵거나 불가능한 알고리즘도 있음.</p>
</li>
<li><p>일을 <strong>독립적인 단위로 분할 + 취합</strong> 👉 <strong>효율성</strong>🔥</p>
</li>
<li><p>무엇이 더 효율적인 방식인지 잘 생각해야 함🌞🌈</p>
<br>
<br>

</li>
</ul>
<blockquote>
<h2 id="반복-심화-탐색-iterative-deepening">반복 심화 탐색 (iterative deepening)</h2>
</blockquote>
<p><img src="https://images.velog.io/images/hyunjin3_3/post/7d167659-2314-448a-9aa1-114a5b3eaec3/Qaz.jpg" alt=""></p>
<ul>
<li><p>깊이 우선 탐색의 변형</p>
</li>
<li><p>깊이가 제한된 <strong>깊이 우선 탐색</strong>을 <strong>반복</strong>해서 수행</p>
</li>
<li><p>k번째 반복 때 탐색할 수 있는 최대 깊이를 k로 제한해서 깊이 제한 탐색을 수행</p>
</li>
<li><p>😇<strong>장점</strong>😇 : <strong>메모리 용량</strong>이 적게 듦(깊이 우선 탐색 장점) + 최악의 경우를 피하고 <strong>최단 거리</strong> 서치(너비 우선 탐색 장점)</p>
</li>
<li><p>👿<strong>단점</strong>👿 : 탐색 진행할수록 더 <strong>멀리</strong> + 회를 반복할수록 <strong>여러 번 중복</strong>해서 탐색 👉 <strong>시간과 노력</strong>이 많이 듦</p>
<br>
<br>

</li>
</ul>
<blockquote>
<h2 id="역-인덱스-inverted-index">역 인덱스 (inverted index)</h2>
</blockquote>
<ul>
<li>책 뒷면에 용어와 페이지를 실은 인덱스와 비슷한 역할을 하는 자료구조</li>
</ul>
<p><img src="https://images.velog.io/images/hyunjin3_3/post/726f5ab3-65ba-46b4-93ea-7757fe474771/indexindex.jpg" alt=""></p>
<ul>
<li><p>목푯값들의 위치 알림 👉 탐색 목표가 데이터의 여러 곳에 등장할 때 유용</p>
</li>
<li><p>실행 시간과 메모리 사용 사이에 존재하는 하나를 얻으면 다른 하나를 잃는 상충관계</p>
</li>
<li><p>😇<strong>장점</strong>😇 : 인덱스가 추가되어 <strong>새로운 기준</strong>으로 훨씬 효과적으로 <strong>탐색</strong>가능 👉 <strong>탐색 실행 시간 단축</strong></p>
</li>
<li><p>👿<strong>단점</strong>👿 : 전체 복사 후 새로운 <strong>인덱스를 추가</strong> 👉 <strong>메모리</strong> 사용량, <strong>시간적 비용</strong> 증가</p>
</li>
</ul>
<p><code>cf. 지출기입장 역인덱스</code>
<code>기록된 순번으로 오름차순 정렬된 지출기입장은 특정 장소 또는 금액을 찾는 데는 도움이 되지 않음.</code>
<code>지출한 곳을 기준으로 항목들 재정렬 또는 해당 기준으로 새로운 자료구조 추가 👉 &quot;역인덱스&quot;</code></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[내가 보려고 정리하는 Python 기초 자료형 문법 2]]></title>
            <link>https://velog.io/@hyunjin3_3/%EB%82%B4%EA%B0%80-%EB%B3%B4%EB%A0%A4%EA%B3%A0-%EC%A0%95%EB%A6%AC%ED%95%98%EB%8A%94-Python-%EA%B8%B0%EC%B4%88-%EC%9E%90%EB%A3%8C%ED%98%95-%EB%AC%B8%EB%B2%95-2</link>
            <guid>https://velog.io/@hyunjin3_3/%EB%82%B4%EA%B0%80-%EB%B3%B4%EB%A0%A4%EA%B3%A0-%EC%A0%95%EB%A6%AC%ED%95%98%EB%8A%94-Python-%EA%B8%B0%EC%B4%88-%EC%9E%90%EB%A3%8C%ED%98%95-%EB%AC%B8%EB%B2%95-2</guid>
            <pubDate>Mon, 05 Jul 2021 02:01:28 GMT</pubDate>
            <description><![CDATA[<p><br/><br/></p>
<h1 id="문자열-포매팅formatting">문자열 포매팅(Formatting)</h1>
<br/>
💗 숫자 대입

<p>💗 문자열 대입</p>
<p>💗 변수 대입</p>
<p>💗 혼합 대입</p>
<p><br/><br/><br/></p>
<hr>
<h1 id="문자열-포맷-코드">문자열 포맷 코드</h1>
<p><img src="https://images.velog.io/images/hyunjin3_3/post/32651b4a-2b28-4632-8ebf-b9c1743495fb/%EB%AC%B8%EC%9E%90%EC%97%B4%20%ED%8F%AC%EB%A7%B7%20%EC%BD%94%EB%93%9C.jpg" alt=""></p>
<ul>
<li>%s(문자열) 사용 시 정수, 소수점 등 생각❌<br/></li>
<li>포매팅 연산자 %d와 %를 같이 쓸 때는 %%
<br/><br/><br/></li>
</ul>
<hr>
<h1 id="왼쪽-정렬">왼쪽 정렬</h1>
<ul>
<li>:&lt;n 표현식 👉 문자열을 왼쪽으로 정렬 + 문자열의 총 자릿수를 n</li>
</ul>
<blockquote>
<pre><code class="language-python">print&quot;{0:&lt;10}&quot;.format(&quot;hi&quot;)
&#39;hi        &#39; </code></pre>
</blockquote>
<p><br/><br/></p>
<hr>
<h1 id="오른쪽-정렬">오른쪽 정렬</h1>
<ul>
<li>:&gt;n 표현식 👉 문자열을 왼쪽으로 정렬 + 문자열의 총 자릿수를 n</li>
</ul>
<blockquote>
<pre><code class="language-python">print &quot;{0:&gt;10}&quot;.format(&quot;hi&quot;)
&#39;        hi&#39;</code></pre>
</blockquote>
<p><br/><br/><br/></p>
<hr>
<h1 id="가운데-정렬">가운데 정렬</h1>
<ul>
<li>:^  👉 가운데 정렬</li>
</ul>
<blockquote>
<pre><code class="language-python">print&quot;{0:^10}&quot;.format(&quot;hi&quot;)
&#39;    hi    &#39;</code></pre>
</blockquote>
<p><br/><br/><br/></p>
<hr>
<h1 id="공백-채우기">공백 채우기</h1>
<ul>
<li>공백 문자 대신 다른 문자로 채우기 가능함
&nbsp; &nbsp; (문자 값은 정렬 문자 &lt;, &gt;, ^ 바로 앞에) </li>
</ul>
<blockquote>
<pre><code class="language-python">print&quot;{0:=^10}&quot;.format(&quot;hi&quot;)   # ^ : 가운데 정렬, = : 빈공간 문자 
&#39;====hi====&#39;
print&quot;{0:!&lt;10}&quot;.format(&quot;hi&quot;)   # &lt; : 왼쪽 정렬, ! : 빈공간 문자
&#39;hi!!!!!!!!&#39;</code></pre>
</blockquote>
<p><br/><br/><br/></p>
<hr>
<h1 id="소수점-표현하기">소수점 표현하기</h1>
<ul>
<li>format 함수 👉 소수점을 4자리까지만 표현하는 방법</li>
</ul>
<blockquote>
<pre><code class="language-python">y = 3.42134234
print&quot;{0:0.4f}&quot;.format(y)  # 0.4f 표현식 사용
&#39;3.4213&#39;</code></pre>
</blockquote>
<ul>
<li>자릿수 10으로</li>
</ul>
<blockquote>
<pre><code class="language-python">print&quot;{0:10.4f}&quot;.format(y) # 10.4f 표현식 사용
&#39;    3.4213&#39;</code></pre>
</blockquote>
<p><br/><br/><br/></p>
<hr>
<h1 id="-또는--문자-표현하기">{ 또는 } 문자 표현하기</h1>
<ul>
<li>format 함수 문자열 포매팅 👉 중괄호({}, brace) 문자 👉 {{ }}처럼 2개 연속 사용</li>
</ul>
<blockquote>
<pre><code class="language-python">print&quot;{{ and }}&quot;.format()
&#39;{ and }&#39;</code></pre>
</blockquote>
<p><br/><br/><br/></p>
<hr>
<h1 id="f-문자열-포매팅">f 문자열 포매팅</h1>
<ul>
<li>f 접두사 👉 f 문자열 포매팅 기능</li>
</ul>
<blockquote>
<pre><code class="language-python">name = &#39;홍길동&#39;
age = 30
printf&#39;나의 이름은 {name}입니다. 나이는 {age}입니다.&#39;
&#39;나의 이름은 홍길동입니다. 나이는 30입니다.&#39;</code></pre>
</blockquote>
<ul>
<li>f 문자열 포매팅은 표현식을 지원</li>
</ul>
<blockquote>
<pre><code class="language-python">age = 30
print(f&#39;나는 내년이면 {age+1}살이 된다.&#39;)
&#39;나는 내년이면 31살이 된다.&#39;</code></pre>
</blockquote>
<h1 id="표현식이란-문자열-안에서-변수와---와-같은-수식을-함께-사용하는-것을-말한다">표현식이란 문자열 안에서 변수와 +, -와 같은 수식을 함께 사용하는 것을 말한다.</h1>
<ul>
<li>f 문자열 포매팅에서 딕셔너리</li>
</ul>
<blockquote>
<pre><code class="language-python">d = {&#39;name&#39;:&#39;홍길동&#39;, &#39;age&#39;:30}
print(f&#39;나의 이름은 {d[&quot;name&quot;]}입니다. 나이는 {d[&quot;age&quot;]}입니다.&#39;)
&#39;나의 이름은 홍길동입니다. 나이는 30입니다.&#39;</code></pre>
</blockquote>
<ul>
<li>정렬</li>
</ul>
<blockquote>
<pre><code class="language-python">f&#39;{&quot;hi&quot;:&lt;10}&#39;  # 왼쪽 정렬
&#39;hi        &#39;
f&#39;{&quot;hi&quot;:&gt;10}&#39;  # 오른쪽 정렬
&#39;        hi&#39;
 f&#39;{&quot;hi&quot;:^10}&#39;  # 가운데 정렬
&#39;    hi    &#39;</code></pre>
</blockquote>
<ul>
<li>공백 채우기</li>
</ul>
<blockquote>
<pre><code class="language-python">f&#39;{&quot;hi&quot;:=^10}&#39;  # 가운데 정렬하고 &#39;=&#39; 문자로 공백 채우기
&#39;====hi====&#39;
f&#39;{&quot;hi&quot;:!&lt;10}&#39;  # 왼쪽 정렬하고 &#39;!&#39; 문자로 공백 채우기
&#39;hi!!!!!!!!&#39;</code></pre>
</blockquote>
<ul>
<li>소수점</li>
</ul>
<blockquote>
<pre><code class="language-python">y = 3.42134234
f&#39;{y:0.4f}&#39;  # 소수점 4자리까지만 표현
&#39;3.4213&#39;
f&#39;{y:10.4f}&#39;  # 소수점 4자리까지 표현하고 총 자리수를 10으로 맞춤
&#39;    3.4213&#39;</code></pre>
</blockquote>
<ul>
<li>f 문자열에서 { } 문자 표시</li>
</ul>
<blockquote>
<pre><code class="language-python">f&#39;{{ and }}&#39;
&#39;{ and }&#39;</code></pre>
</blockquote>
<p><br/><br/><br/></p>
<hr>
<h1 id="문자-개수-세기count">문자 개수 세기(count)</h1>
<blockquote>
<pre><code class="language-python">a = &quot;hobby&quot;
a.count(&#39;b&#39;)
2</code></pre>
</blockquote>
<p><br/><br/></p>
<hr>
<h1 id="위치find">위치(find)</h1>
<blockquote>
<pre><code class="language-python">a = &quot;Python is the best choice&quot;
a.find(&#39;b&#39;)
14
a.find(&#39;k&#39;)
-1</code></pre>
</blockquote>
<p><br/><br/></p>
<hr>
<h1 id="위치index">위치(index)</h1>
<blockquote>
<pre><code class="language-python">a = &quot;Life is too short&quot;
a.index(&#39;t&#39;)
8
a.index(&#39;k&#39;)
Traceback (most recent call last):
File &quot;&lt;stdin&gt;&quot;, line 1, in &lt;module&gt;
ValueError: substring not found</code></pre>
</blockquote>
<h2 id="brbr"><br/><br/></h2>
<h1 id="문자열-삽입join">문자열 삽입(join)</h1>
<ul>
<li>문자열, 리스트, 튜플 입력 가능</li>
</ul>
<blockquote>
<pre><code class="language-python">&quot;,&quot;.join(&#39;abcd&#39;) #문자열
&#39;a,b,c,d&#39;</code></pre>
</blockquote>
<blockquote>
<pre><code class="language-python">&quot;,&quot;.join([&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;]) #리스트 자료형
&#39;a,b,c,d&#39;</code></pre>
</blockquote>
<h2 id="brbrbr">  <br/><br/><br/></h2>
<h1 id="소문자를-대문자로-바꾸기upper">소문자를 대문자로 바꾸기(upper)</h1>
<blockquote>
<pre><code class="language-python">a = &quot;hi&quot;
a.upper()
&#39;HI&#39;</code></pre>
</blockquote>
<h2 id="brbr-1"><br/><br/></h2>
<h1 id="대문자를-소문자로-바꾸기lower">대문자를 소문자로 바꾸기(lower)</h1>
<blockquote>
<pre><code class="language-python">a = &quot;HI&quot;
a.lower()
&#39;hi&#39;</code></pre>
</blockquote>
<h2 id="brbr-2"><br/><br/></h2>
<h1 id="왼쪽-공백-지우기lstrip">왼쪽 공백 지우기(lstrip)</h1>
<ul>
<li><p>left-strip 의미</p>
</li>
<li><p>문자열 왼쪽 모든 공백 제거 </p>
</li>
</ul>
<blockquote>
<pre><code class="language-python">a = &quot; hi &quot;
a.lstrip()
&#39;hi &#39;</code></pre>
</blockquote>
<h2 id="brbr-3"><br/><br/></h2>
<h1 id="오른쪽-공백-지우기rstrip">오른쪽 공백 지우기(rstrip)</h1>
<ul>
<li><p>right-strip 의미</p>
</li>
<li><p>문자열 오른쪽 모든 공백 제거 </p>
</li>
</ul>
<blockquote>
<pre><code class="language-python">a= &quot; hi &quot;
a.rstrip()
&#39; hi&#39;</code></pre>
</blockquote>
<h2 id="brbr-4"><br/><br/></h2>
<h1 id="양쪽-공백-지우기strip">양쪽 공백 지우기(strip)</h1>
<ul>
<li>모든 공백 제거</li>
</ul>
<blockquote>
<pre><code class="language-python">a = &quot; hi &quot;
a.strip()
&#39;hi&#39;</code></pre>
</blockquote>
<p><br/><br/></p>
<hr>
<h1 id="문자열-바꾸기replace">문자열 바꾸기(replace)</h1>
<blockquote>
<pre><code class="language-python">a = &quot;Life is too short&quot;
a.replace(&quot;Life&quot;, &quot;Your leg&quot;)
&#39;Your leg is too short&#39;</code></pre>
</blockquote>
<p><br/><br/></p>
<hr>
<h1 id="문자열-나누기split">문자열 나누기(split)</h1>
<blockquote>
<pre><code class="language-python">a = &quot;Life is too short&quot;
a.split()
[&#39;Life&#39;, &#39;is&#39;, &#39;too&#39;, &#39;short&#39;]
b = &quot;a:b:c:d&quot;
b.split(&#39;:&#39;)
[&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;]</code></pre>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[자료구조] stack🥀과 queue🌱]]></title>
            <link>https://velog.io/@hyunjin3_3/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-stack%EA%B3%BC-queue</link>
            <guid>https://velog.io/@hyunjin3_3/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-stack%EA%B3%BC-queue</guid>
            <pubDate>Sun, 04 Jul 2021 23:14:32 GMT</pubDate>
            <description><![CDATA[<br/>

<blockquote>
<h2 id="스택stack과-큐queue">스택(stack)과 큐(queue)</h2>
</blockquote>
<p>🥗 <strong>데이터</strong>를 <strong>저장</strong>하는 간단한 <strong>구조</strong></p>
<p>🥗 값을 저장하는 평범한 <strong>목록</strong></p>
<p>🥗 <strong>데이터 추가, 제거 방식에서 차이</strong></p>
<p><img src="https://images.velog.io/images/hyunjin3_3/post/a2abd78d-3d98-44fe-936e-4729d0ce3c84/onequue%20stack%20and%20queue.png" alt=""><code>First In First Out and Last In First Out</code>
<br/><br/></p>
<blockquote>
<h2 id="스택stack">스택(STACK)</h2>
</blockquote>
<p>🥀 <strong>후입선출식 자료구조 (NOT FRESH)</strong></p>
<p><img src="https://images.velog.io/images/hyunjin3_3/post/cdce04c9-53ff-4cc0-a32e-2699bae2facf/dishes.jpg" alt=""><code>cf. 쌓은 순서와 반대로 가져가는 급식판</code>
<br/>
🥀 <strong>PUSG(푸시)</strong>: 새항목은 스택의 맨 위로 + <strong>POP(팝)</strong>: 항목은 맨 위부터
&nbsp; &nbsp; &nbsp; <strong>cf. 1, 2, 3, 4, 5 &gt; 5, 4, 3, 2, 1</strong>
<br/></p>
<p>🥀 <strong>추가➕</strong> <strong>맨 위 인덱스+1</strong>인 위치에 새 항목 <strong>추가</strong>
<br/></p>
<p>🥀 <strong>제거➖</strong> <strong>맨 위 인덱스</strong> 값을 배열에서 <strong>제거</strong>, 인덱스 값 정리
<br/></p>
<blockquote>
<h2 id="큐queue">큐(QUEUE)</h2>
</blockquote>
<p>🌱 <strong>선입선출식 자료구조 (FRESH)</strong>
<br/>
<img src="https://images.velog.io/images/hyunjin3_3/post/5ed9b886-624b-44b0-9bed-5faacc4ab6ac/food.jpeg" alt="">
<code>cf. 첫 트레이 배식이 끝나면 두 번째 트레이 가져와 배식하는 선입선출 시스템의 단체급식 (필자는 중학교 영양사 출신(. ❛ ᴗ ❛.))</code>
<br/>
🌱 새로운 항목이 <strong>맨 뒤</strong>에 추가 + 항목 제거는 <strong>맨 앞</strong>부터 
&nbsp; &nbsp; &nbsp; <strong>cf. 1, 2, 3, 4, 5 &gt; 1, 2, 3, 4, 5 **
<br/>
🌱 첫 번째와 마지막 항목의 인덱스를 모두 기록해야 하므로 변수 두 개가 필요
<br/>
🌱 **추가➕</strong> 가장 <strong>마지막</strong>에 있는 항목 뒤에 <strong>추가</strong>, 맨 뒤 인덱스의 값 + 1
<br/>
🌱 <strong>제거➖</strong> <strong>맨 앞</strong>의 항목을 <strong>제거</strong>, 맨 앞 인덱스의 값을 + 1
<br/></p>
<blockquote>
<h2 id="자료구조-활용">자료구조 활용</h2>
</blockquote>
<p>🤍 효율적인 알고리즘의 핵심은 정보</p>
<p>🤍 정보를 어떻게 조직하느냐, 어떤 자료구조를 사용하느냐 👉 알고리즘의 효율성 + 기능 영향 </p>
<p>🤍 알고리즘이 제대로 작동할 수 있게 도와주는 자료구조 선택
&nbsp; &nbsp; &nbsp; cf. 너비 우선 탐색(queque), 깊이 우선 탐색(stack)
&nbsp; &nbsp; &nbsp; cf. 배열(이진 탐색), 그래프(완전 탐색)</p>
]]></description>
        </item>
    </channel>
</rss>