<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>minolog</title>
        <link>https://velog.io/</link>
        <description>코린이</description>
        <lastBuildDate>Fri, 26 Nov 2021 12:10:26 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. minolog. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/minob_b" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[웹서비스 개발일지 - CORONA TRIP(코로나 트립)]]></title>
            <link>https://velog.io/@minob_b/%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80-CORONA-TRIP%EC%BD%94%EB%A1%9C%EB%82%98-%ED%8A%B8%EB%A6%BD</link>
            <guid>https://velog.io/@minob_b/%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80-CORONA-TRIP%EC%BD%94%EB%A1%9C%EB%82%98-%ED%8A%B8%EB%A6%BD</guid>
            <pubDate>Fri, 26 Nov 2021 12:10:26 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p> <strong>&#39;CORONA TRIP&#39;</strong> 완성</p>
</blockquote>
<p>일단 필요로 한 기능은 모두 구현하는데 성공했다.
하지만 배포를 하기 위해서는 조금 부족한 부분이 있어
완성도를 높혀 배포를 할 생각이다.</p>
<p>배포 후 자세한 후기를 작성하도록 하겠다.</p>
<p><a href="https://youtu.be/whNuymQ6eE8">CORONA TRIP 설명 영상</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[웹서비스 개발일지 - 코로나 해외여행 중간 점검]]></title>
            <link>https://velog.io/@minob_b/%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80-%EC%BD%94%EB%A1%9C%EB%82%98-%ED%95%B4%EC%99%B8%EC%97%AC%ED%96%89-%EC%A4%91%EA%B0%84-%EC%A0%90%EA%B2%80</link>
            <guid>https://velog.io/@minob_b/%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80-%EC%BD%94%EB%A1%9C%EB%82%98-%ED%95%B4%EC%99%B8%EC%97%AC%ED%96%89-%EC%A4%91%EA%B0%84-%EC%A0%90%EA%B2%80</guid>
            <pubDate>Mon, 22 Nov 2021 11:17:19 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>&#39;코로나 해외여행 현황&#39;</strong> 중간 점검</p>
</blockquote>
<h4 id="구현한-기능">구현한 기능</h4>
<ol>
<li><p>나라 이름, 확진자 수, 사망자 수, 검색 카운트 DB에 저장</p>
</li>
<li><p>나라 검색 시 DB에 없는 나라 -&gt; 검색 실패
 나라 검색 시 DB에 있는 나라 -&gt; 검색 성공</p>
</li>
<li><p>검색 성공 시 확진자 수, 사망자 수, 해외 여행 정보 제공, 검색 카운트 + 1 (인기 검색어에 필요)</p>
</li>
</ol>
<h4 id="구현해야-할-기능">구현해야 할 기능</h4>
<ol>
<li>나라 별 확진자 수, 사망자 수 매일 17:00에 DB에 저장하는 기능 ( 과부하 방지 )</li>
</ol>
<p>-&gt; <code>cronjob (https://jdm.kr/blog/2)</code>
2. 인기 검색 나라 클릭 시 검색 결과 제공
-&gt; <code>a href 태그</code> 
3. 디자인</p>
<blockquote>
<p><strong>&#39;코로나 해외여행 현황&#39;</strong> 메인 페이지</p>
</blockquote>
<p><img src="https://images.velog.io/images/minob_b/post/84f67270-2866-4358-96bc-8973e8bd4223/image.png" alt=""></p>
<blockquote>
<p><strong>&#39;코로나 해외여행 현황&#39;</strong> 검색 성공 시</p>
</blockquote>
<p><img src="https://images.velog.io/images/minob_b/post/869cb386-5eb2-462a-ac8c-aa55795eb8dc/image.png" alt=""></p>
<blockquote>
<p><strong>&#39;코로나 해외여행 현황&#39;</strong> 검색 실패 시</p>
</blockquote>
<p><img src="https://images.velog.io/images/minob_b/post/b7a2a32c-0adc-4752-91fc-dbff308bd6ac/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[웹서비스 개발일지 - 코로나 해외여행 현황 기획안]]></title>
            <link>https://velog.io/@minob_b/%EC%BD%94%EB%A1%9C%EB%82%98-%ED%95%B4%EC%99%B8%EC%97%AC%ED%96%89-%ED%98%84%ED%99%A9-%EA%B8%B0%ED%9A%8D%EC%95%88</link>
            <guid>https://velog.io/@minob_b/%EC%BD%94%EB%A1%9C%EB%82%98-%ED%95%B4%EC%99%B8%EC%97%AC%ED%96%89-%ED%98%84%ED%99%A9-%EA%B8%B0%ED%9A%8D%EC%95%88</guid>
            <pubDate>Sun, 14 Nov 2021 06:45:16 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>&#39;코로나 해외여행 현황&#39; 소개</strong></p>
</blockquote>
<p>코로나로 인해 많은 사람들이 해외여행을 갈 수 없어 아쉽다고 말한다.
최근, 위드코로나로 전환되는 나라가 많아지면서 해외여행을 갈 수 있는 나라도 점차 늘어나고 있다.
그래서 해외여행을 갈 수 있는 나라에 대한 정보를 한눈에 쉽게 알아볼 수 있는 웹사이트를 만들어보고 싶었다.</p>
<blockquote>
<p><strong>레이아웃</strong></p>
</blockquote>
<p><img src="https://images.velog.io/images/minob_b/post/8cb119d0-71d0-4558-a684-63701588bfcf/%EB%A0%88%EC%9D%B4%EC%95%84%EC%9B%83.jpg" alt=""></p>
<blockquote>
<p><strong>구현 기능</strong></p>
</blockquote>
<p><strong>1. OpenAPI</strong>
사용자가 나라 이름을 검색하면, OpenAPI를 통해 <strong>해당 국가 해외입국자 조치현황</strong>을 받아오고 사용자 화면에 출력한다.
<a href="https://www.data.go.kr/data/15085787/openapi.do">API Link</a></p>
<p><strong>2. DB 구축</strong>
나라 이름을 검색할 때마다 검색 수를 +1 하여 인기 검색 순위를 출력한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[웹개발 종합반 4주차]]></title>
            <link>https://velog.io/@minob_b/%EC%9B%B9%EA%B0%9C%EB%B0%9C-%EC%A2%85%ED%95%A9%EB%B0%98-4%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@minob_b/%EC%9B%B9%EA%B0%9C%EB%B0%9C-%EC%A2%85%ED%95%A9%EB%B0%98-4%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 31 Oct 2021 12:01:15 GMT</pubDate>
            <description><![CDATA[<h3 id="스파르타-코딩클럽-웹개발-종합반-4주차">스파르타 코딩클럽 웹개발 종합반 4주차</h3>
<p>4주차에 와서 1~3주차에 배운 것들을 활용하면서 서버-클라이언트 데이터 주고 받는 것에 대해 학습했다.
확실히 3주동안 배웠던 것들을 한번에 활용하려니 많이 어려웠다. 완벽히 이해할 때까지 계속 복습을 해야 익숙해질 수 있을 것 같다. 마지막까지 화이팅!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[웹개발 종합반 3주차]]></title>
            <link>https://velog.io/@minob_b/%EC%9B%B9%EA%B0%9C%EB%B0%9C-%EC%A2%85%ED%95%A9%EB%B0%98-3%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@minob_b/%EC%9B%B9%EA%B0%9C%EB%B0%9C-%EC%A2%85%ED%95%A9%EB%B0%98-3%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 24 Oct 2021 13:10:59 GMT</pubDate>
            <description><![CDATA[<h3 id="스파르타-코딩클럽-웹개발-종합반-3주차">스파르타 코딩클럽 웹개발 종합반 3주차</h3>
<p>2주차에 했던 API 사용법에 대해 간단히 복습한 후, 파이썬 <code>requests, bs4, pymongo</code> 패키지를 설치한 후 웹 크롤링에 대해 공부하고 과제를 진행했다.
<br>내가 원하는 페이지의 모든 정보를 마음만 먹으면 긁어올 수 있는 것이 상당히 매력적이었다. <br>db는 mySQL같은 구조만 있는 줄 알았는데, mongoDB는 NoSQL 구조로 딕셔너리 형태로 데이터를 적재할 수 있어 사용하기 편리했다. 또한 DB를 핸들링하는 것이 굉장히 간단했고, 이를 통해 다양한 공부를 진행하고 싶다는 생각이 든다. 4주차도 얼른 공부해야겠다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[웹개발 종합반 2주차]]></title>
            <link>https://velog.io/@minob_b/%EC%9B%B9%EA%B0%9C%EB%B0%9C-%EC%A2%85%ED%95%A9%EB%B0%98-2%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@minob_b/%EC%9B%B9%EA%B0%9C%EB%B0%9C-%EC%A2%85%ED%95%A9%EB%B0%98-2%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 17 Oct 2021 15:07:08 GMT</pubDate>
            <description><![CDATA[<h3 id="스파르타-코딩클럽-웹개발-종합반-2주차">스파르타 코딩클럽 웹개발 종합반 2주차</h3>
<p>javascript 복습과 jQuary, ajax에 대해 공부하고 간단한 API를 사용해보았다.
평소 jQuary, ajax 등 들어만 보고 어떤 개념인지, 왜 쓰는지, 어떻게 쓰는지, 어떤 동작을 하는지에 대해 아예 무지했는데, 강의를 들으며 점점 기본 개념에 대해 알아가고 있는 것 같아 만족스럽다.
6주차부터 내가 직접 기획하는 웹페이지를 만드는데, 미리 생각해서 정말 흥미로운 웹페이지를 만들어볼 수 있도록 해야겠다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Programmers] 나머지가 1이 되는 수 찾기 (Python)]]></title>
            <link>https://velog.io/@minob_b/Programmers-%EB%82%98%EB%A8%B8%EC%A7%80%EA%B0%80-1%EC%9D%B4-%EB%90%98%EB%8A%94-%EC%88%98-%EC%B0%BE%EA%B8%B0-Python</link>
            <guid>https://velog.io/@minob_b/Programmers-%EB%82%98%EB%A8%B8%EC%A7%80%EA%B0%80-1%EC%9D%B4-%EB%90%98%EB%8A%94-%EC%88%98-%EC%B0%BE%EA%B8%B0-Python</guid>
            <pubDate>Fri, 15 Oct 2021 09:02:35 GMT</pubDate>
            <description><![CDATA[<h3 id="문제">문제</h3>
<p><a href="https://programmers.co.kr/learn/courses/30/lessons/87389">https://programmers.co.kr/learn/courses/30/lessons/87389</a>
<br></br></p>
<h3 id="접근-방식">접근 방식</h3>
<blockquote>
<ol>
<li>n을 x로 나눈 나머지가 1이 되는 x의 수 중 가장 큰 수 <code>x = n - 1</code></li>
<li>x 가 짝수면 2 return</li>
<li>x가 소수인지 판별하는 과정에서 약수 발견 시 가장 작은 약수 return, x가 소수이면 x return</li>
</ol>
</blockquote>
<p><br></br></p>
<h3 id="제출-코드">제출 코드</h3>
<pre><code class="language-python">import math

def solution(n):
    x = n - 1
    if x % 2 == 0:
        return 2
    for i in range(2, int(math.sqrt(x)) + 1):
        if x % i == 0:
            return i
    return x</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Programmers] 크레인 인형뽑기 게임 (Python)]]></title>
            <link>https://velog.io/@minob_b/Programmers-%ED%81%AC%EB%A0%88%EC%9D%B8-%EC%9D%B8%ED%98%95%EB%BD%91%EA%B8%B0-%EA%B2%8C%EC%9E%84-Python</link>
            <guid>https://velog.io/@minob_b/Programmers-%ED%81%AC%EB%A0%88%EC%9D%B8-%EC%9D%B8%ED%98%95%EB%BD%91%EA%B8%B0-%EA%B2%8C%EC%9E%84-Python</guid>
            <pubDate>Fri, 15 Oct 2021 08:40:42 GMT</pubDate>
            <description><![CDATA[<h3 id="문제">문제</h3>
<p><a href="https://programmers.co.kr/learn/courses/30/lessons/64061">https://programmers.co.kr/learn/courses/30/lessons/64061</a></p>
<p><br></br></p>
<h3 id="접근-방식">접근 방식</h3>
<blockquote>
<ol>
<li>주어진 2차원배열을 내가 이해하기 편한 형태로 변환</li>
<li>move에 따라 바구니에 인형 append</li>
<li>같은 인형 2개가 겹쳐있으면 슬라이싱, cnt += 2</li>
</ol>
</blockquote>
<p><img src="https://images.velog.io/images/minob_b/post/2872e483-390e-4040-bec1-36342e822bdf/image.png" alt=""></p>
<p><br></br></p>
<h3 id="제출-코드">제출 코드</h3>
<pre><code class="language-python">def solution(board, moves):
    basket = []
    cnt = 0
        # 2차원 배열 변환 후 spaces에 저장
    spaces = list(map(list, zip(*board)))
    for space in spaces:
        space.reverse()
        while 0 in space:
            space.remove(0)
        # moves에 따라 인형 basket에 저장
    for move in moves:
            # move 값에 해당하는 space에 인형이 없을 경우 예외처리
        if len(spaces[move - 1]) &lt;= 0:
            continue
                # basket에 인형 저장 후 space 인형 삭제
        basket.append(spaces[move - 1][-1])
        del spaces[move - 1][-1]
            # basket에 인형 2개가 겹칠 경우
        if len(basket) &gt;= 2 and basket[-2] == basket[-1]:
            basket = basket[:-2]
            cnt += 2
    return cnt</code></pre>
<p><br></br></p>
<h3 id="느낀점">느낀점</h3>
<blockquote>
<p>이번 문제는 어렵다기 보단 해결하는 과정이 재미있는 문제였다. 물론 Level 1이라서 그렇겠지만...</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Programmers] 신규 아이디 추천 (Python)]]></title>
            <link>https://velog.io/@minob_b/Programmers-%EC%8B%A0%EA%B7%9C-%EC%95%84%EC%9D%B4%EB%94%94-%EC%B6%94%EC%B2%9C-Python</link>
            <guid>https://velog.io/@minob_b/Programmers-%EC%8B%A0%EA%B7%9C-%EC%95%84%EC%9D%B4%EB%94%94-%EC%B6%94%EC%B2%9C-Python</guid>
            <pubDate>Fri, 15 Oct 2021 08:21:25 GMT</pubDate>
            <description><![CDATA[<h3 id="문제">문제</h3>
<p><a href="https://programmers.co.kr/learn/courses/30/lessons/72410">https://programmers.co.kr/learn/courses/30/lessons/72410</a>
<br></br></p>
<h3 id="접근-방식">접근 방식</h3>
<blockquote>
<p>문제에 나온 조건 그대로 구현</p>
</blockquote>
<p><br></br></p>
<h3 id="초기-코드">초기 코드</h3>
<pre><code class="language-python">import re

def solution(new_id):
    # 1단계
    new_id = new_id.lower()
    # 2단계
    new_id = re.sub(&#39;[~!@#$%^&amp;*()=+\[{\]}:?,&lt;&gt;/]&#39;, &#39;&#39;, new_id)
    # 3단계
    new_id = re.sub(&#39;(([.])\\2{1,})&#39;, &#39;.&#39;, new_id)
    # 4단계
    if new_id[0] == &#39;.&#39;:
            new_id = new_id[1:]
    if new_id[-1] == &#39;.&#39;:
            new_id = new_id[:-1]
    # 5단계
    if len(new_id) == 0:
        new_id = &#39;a&#39;
    # 6단계
    if len(new_id) &gt;= 16:
        new_id = new_id[:15]
    # 7단계
    while len(new_id) &lt;= 2:
        new_id = new_id + new_id[-1]
    return new_id</code></pre>
<blockquote>
<p>4단계에서 범위 관련 오류가 발생함.
if문을 사용해서 길이가 1보다 클 때와 아닐 때로 나눠서 작성을 해봐도 계속 같은 오류가 발생
(이유가 뭔지는 모르겠음)
계속 고민하다 문득 <code>strip()</code> 함수를 떠올림
+) new_id 값을 보존하고 새로운 변수를 생성</p>
</blockquote>
<p><br></br></p>
<h3 id="제출-코드">제출 코드</h3>
<pre><code class="language-python">import re

def solution(new_id):
    # 1단계
    result = new_id.lower()
    # 2단계
    result = re.sub(&#39;[~!@#$%^&amp;*()=+\[{\]}:?,&lt;&gt;/]&#39;, &#39;&#39;, result)
    # 3단계
    result = re.sub(&#39;(([.])\\2{1,})&#39;, &#39;.&#39;, result)
    # 4단계
    result = result.strip(&#39;.&#39;)
    # 5단계
    if len(result) == 0:
        result = &#39;a&#39;
    # 6단계
    result = result[:15].rstrip(&#39;.&#39;)
    # 7단계
    while len(result) &lt;= 2:
        result = result + result[-1]
    return result</code></pre>
<blockquote>
<p>제출 코드에서 더 깔끔하게 정제할 수 있을 것 같아 코드를 다시 작성해봄. 
특히 정규표현식 부분을 더 깔끔하게 수정하고 싶었음.</p>
</blockquote>
<p><br></br></p>
<h3 id="정제-코드">정제 코드</h3>
<pre><code class="language-python">import re


def solution(new_id):
    # 1,2단계
    result = re.sub(&#39;[^\w._\-]&#39;, &#39;&#39;, new_id.lower())
    # 3단계
    result = re.sub(&#39;\.\.+&#39;, &#39;.&#39;, result)
    # 4단계
    result = result.strip(&#39;.&#39;)
    # 5단계
    if len(result) == 0: result = &#39;a&#39;
    # 6단계
    result = result[:15].rstrip(&#39;.&#39;)
    # 7단계
    result += result[-1] * (3 - len(result))
    return result
</code></pre>
<p><br></br></p>
<h3 id="느낀점">느낀점</h3>
<blockquote>
<p>정규표현식을 공부해놓으면 다양한 문자열에 대한 조건을 깔끔한 코드로 작성할 수 있을 것 같다.
자주 사용되는 정규표현식은 외워놔도 좋을 것 같다.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[웹개발 종합반 1주차]]></title>
            <link>https://velog.io/@minob_b/%EC%9B%B9%EA%B0%9C%EB%B0%9C-%EC%A2%85%ED%95%A9%EB%B0%98-1%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@minob_b/%EC%9B%B9%EA%B0%9C%EB%B0%9C-%EC%A2%85%ED%95%A9%EB%B0%98-1%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 10 Oct 2021 11:36:45 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/minob_b/post/74a58943-96f8-48e1-96dc-f7d3d815eec4/image.png" alt=""></p>
<h3 id="스파르타-코딩클럽-웹개발-종합반-1주차">스파르타 코딩클럽 웹개발 종합반 1주차</h3>
<p>간단한 html, css, javascript를 배우고, 부트스트랩을 이용해서 간단한 페이지를 만들어 보았다.</p>
<p>아직까진 나름 재밌다.
5주차까지 열심히 공부하고 내가 만들고 싶은 웹페이지를 만들어 보는것이 목표인데, 꾸준히 공부해야겠다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Programmers] 체육복 (Python)]]></title>
            <link>https://velog.io/@minob_b/Programmers-%EC%B2%B4%EC%9C%A1%EB%B3%B5-Python</link>
            <guid>https://velog.io/@minob_b/Programmers-%EC%B2%B4%EC%9C%A1%EB%B3%B5-Python</guid>
            <pubDate>Fri, 01 Oct 2021 10:15:07 GMT</pubDate>
            <description><![CDATA[<h3 id="문제">문제</h3>
<p><a href="https://programmers.co.kr/learn/courses/30/lessons/42862">https://programmers.co.kr/learn/courses/30/lessons/42862</a>
<br></br></p>
<h3 id="접근-방식">접근 방식</h3>
<blockquote>
<ol>
<li>길이가 n이고 값이 1인 리스트 생성 (s)</li>
<li>체육복을 도난당했으면 s에서 도난당한 학생 번호 값 - 1</li>
<li>여분의 체육복이 있으면 학생 번호 값 + 1
ex) n = 5, lost = [2, 4], reserve = [1, 3, 5]
<img src="https://images.velog.io/images/minob_b/post/38d02b3d-d756-4747-afc0-8945a432d0db/image.png" alt=""></li>
<li>2 주변에 0이 있으면 2 -&gt; 1, 0 -&gt; 1로 변경</li>
<li>s 전체 길이에서 0의 개수를 뺀 값 리턴</li>
</ol>
</blockquote>
<p><br></br></p>
<h3 id="제출-코드">제출 코드</h3>
<pre><code class="language-python">def solution(n, lost, reserve):
    #길이=n, 값=1인 배열 생성
    s = [1 for i in range(n)]
    #체육복 도난
    for i in lost:
        s[i - 1] -= 1
    #체육복 여분
    for i in reserve:
        s[i - 1] += 1
    #체육복 빌려주기
    for i in range(len(s)):
        left = i - 1
        right = i + 1
        if left &gt;= 0:
            if s[i] == 2 and s[left] == 0:
                s[i - 1] += 1
                s[i] -= 1
        elif right &lt;= len(s):
            if s[i] == 2 and s[right] == 0:
                s[i + 1] += 1
                s[i] -= 1
    #체육복 있는 학생 최대값 return
    return len(s) - s.count(0)</code></pre>
<p><br></br></p>
<h3 id="제출-결과">제출 결과</h3>
<blockquote>
<p>약 40%의 테스트 케이스를 통과하지 못함.
처음 접근 방식으로 더 풀기에는 아직 내 실력이 받쳐주지 못해 접근 방식부터 수정해서 코드를 작성하기로 결정.
<img src="https://images.velog.io/images/minob_b/post/a4e48fe1-d0a7-4367-a6eb-54593664e676/image.png" alt=""></p>
</blockquote>
<p><br></br></p>
<hr>
<h3 id="접근-방식-2">접근 방식 2</h3>
<blockquote>
<ol>
<li>도난 당한 학생 번호 리스트와 여분 체육복 갖고있는 학생의 번호 리스트를 생성</li>
</ol>
<p>-&gt; 새로 생성하는 이유 : 2개의 체육복을 갖고 있는 학생이 1개를 도난당하면 1개만 남음. 즉 중복 제거를 해주면 불필요한 연산이 필요 없게 됨
3. 도난 당한 번호의 +-1의 번호에서 여분의 체육복을 갖고 있으면 여분 체육복 리스트에서 삭제하고 리턴 값 += 1</p>
</blockquote>
<p><br></br></p>
<h3 id="최종-코드">최종 코드</h3>
<pre><code class="language-python">def solution(n, lost, reserve):
    lost_s = list(set(lost) - set(reserve))
    reserve_s = list(set(reserve) - set(lost))

    result = n - len(lost_s)
    for i in lost_s:
        if i - 1 in reserve_s:
            result += 1
            reserve_s.remove(i - 1)
        elif i + 1 in reserve_s:
            result += 1
            reserve_s.remove(i + 1)
    return result</code></pre>
<p><br></br></p>
<h3 id="느낀점">느낀점</h3>
<blockquote>
<p>알고리즘에 대해 아무것도 모르고 무작정 풀려고만 하니 슬슬 밑천이 드러나는 것 같다. 프로그래머스 lv.1 만 올클리어 하고 알고리즘에 대해 공부해야 할 것 같다.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Programmers] 상호 평가 (Python)]]></title>
            <link>https://velog.io/@minob_b/Programmers-%EC%83%81%ED%98%B8-%ED%8F%89%EA%B0%80-Python</link>
            <guid>https://velog.io/@minob_b/Programmers-%EC%83%81%ED%98%B8-%ED%8F%89%EA%B0%80-Python</guid>
            <pubDate>Thu, 30 Sep 2021 16:40:41 GMT</pubDate>
            <description><![CDATA[<h3 id="문제">문제</h3>
<p><a href="https://programmers.co.kr/learn/courses/30/lessons/83201">https://programmers.co.kr/learn/courses/30/lessons/83201</a>
<br></br></p>
<h3 id="접근-방식">접근 방식</h3>
<blockquote>
<ol>
<li>학생 별 평가 점수 리스트 생성</li>
<li>조건에 따라 점수 제외</li>
<li>평균 리스트 생성</li>
<li>평균에 따라 학점을 문자열에 저장한 후 return</li>
</ol>
</blockquote>
<p><br></br></p>
<h3 id="제출-코드">제출 코드</h3>
<pre><code class="language-python">def solution(scores):
    eval_score = []
    average = []
    grade = &#39;&#39;

    #학생 별 평가 점수 리스트 생성(eval_score)
    for i in range(len(scores)):
        temp = []
        for j in range(len(scores)):
            temp.append(scores[j][i])
        eval_score.append(temp)

    #문제 조건에 따른 점수 제외
    for k in range(len(eval_score)):
        if eval_score[k][k] == max(eval_score[k]) and eval_score[k].count(eval_score[k][k]) == 1:
            del eval_score[k][k]
        elif eval_score[k][k] == min(eval_score[k]) and eval_score[k].count(eval_score[k][k]) == 1:
            del eval_score[k][k]
        else:
            continue

    #학생 별 평균 리스트 생성(average)
    for i in range(len(eval_score)):
        average.append(sum(eval_score[i]) / len(eval_score[i]))


    #학점 문자열 생성(grade)
    for k in range(len(average)):
        if average[k] &gt;= 90: grade += &#39;A&#39;
        elif average[k] &gt;= 80: grade += &#39;B&#39;
        elif average[k] &gt;= 70: grade += &#39;C&#39;
        elif average[k] &gt;= 50: grade += &#39;D&#39;
        else: grade += &#39;F&#39;
    return grade</code></pre>
<p><br></br></p>
<h3 id="느낀점">느낀점</h3>
<blockquote>
<p>반복문을 총 5번 사용하였는데, 다른 사람들의 풀이를 보니 굉장히 간단하고 효율적이게 짠 코드들을 많이 발견할 수 있었다. 많이 부족한 내 코드를 더 정제해서 반복문을 적게 쓰는 코드를 작성해 보기로 했다.</p>
</blockquote>
<h3 id="접근-방식-1">접근 방식</h3>
<blockquote>
<ol>
<li>학생 별 평가 점수 리스트 생성</li>
<li>문제 조건에 따른 점수 제외 후 평균에 따른 학점 저장</li>
</ol>
</blockquote>
<p><br></br></p>
<h3 id="정제-코드">정제 코드</h3>
<pre><code class="language-python">def solution(scores):
    eval_score = []
    grade = &#39;&#39;

    #학생 별 평가 점수 리스트 생성(eval_score)
    for i in range(len(scores)):
        temp = []
        for j in range(len(scores)):
            temp.append(scores[j][i])
        eval_score.append(temp)

    #문제 조건에 따라 점수 제외 후 평균점수에 따른 학점 저장
    for k in range(len(eval_score)):
        if eval_score[k][k] == max(eval_score[k]) and eval_score[k].count(eval_score[k][k]) == 1:
            del eval_score[k][k]
        elif eval_score[k][k] == min(eval_score[k]) and eval_score[k].count(eval_score[k][k]) == 1:
            del eval_score[k][k]
        avg = sum(eval_score[k]) / len(eval_score[k])
        if avg &gt;= 90: grade += &#39;A&#39;
        elif avg &gt;= 80: grade += &#39;B&#39;
        elif avg &gt;= 70: grade += &#39;C&#39;
        elif avg &gt;= 50: grade += &#39;D&#39;
        else: grade += &#39;F&#39;
    return grade</code></pre>
<blockquote>
<p>많이 깔끔해졌지만 여전히 반복문이 많이 사용된다. 특히 행렬의 행과 열을 바꾸는 함수를 사용한다면, 이중반복문을 없앨 수 있었고, 다른 분들의 풀이를 보니 for문에 enumerate을 사용해서 간단하게 푸는 것을 확인하였고, 다시 새로 코드를 작성해보았다.</p>
</blockquote>
<p><br></br></p>
<h3 id="새로-작성한-코드">새로 작성한 코드</h3>
<pre><code class="language-python">def solution(scores):
    grade = &#39;&#39;
    #함수의 행과 열을 바꿈
    eval_score = list(map(list, zip(*scores)))

    #문제 조건에 따라 점수 제외 후 평균점수에 따른 학점 저장
    for i, score in enumerate(eval_score):
        if score[i] == max(score) and score.count(score[i]) == 1:
            del score[i]
        elif score[i] == min(score) and score.count(score[i]) == 1:
            del score[i]
        avg = sum(eval_score[i]) / len(eval_score[i])
        if avg &gt;= 90: grade += &#39;A&#39;
        elif avg &gt;= 80: grade += &#39;B&#39;
        elif avg &gt;= 70: grade += &#39;C&#39;
        elif avg &gt;= 50: grade += &#39;D&#39;
        else: grade += &#39;F&#39; 
    return grade    </code></pre>
<blockquote>
<ol>
<li>함수의 행과 열을 바꾸는 구문은 어떤 구조로 동작하는지 아직 이해하지 못함.</li>
<li>zip함수는 리스트의 병렬처리가 필요할 때 주로 사용 (2개의 리스트를 묶어 주로 사전으로 사용)</li>
<li>enumerate이 필요한 경우 능숙하게 사용할 수 있도록 항상 머릿속에 기억</li>
</ol>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Programmers] 비밀 지도 (Python)]]></title>
            <link>https://velog.io/@minob_b/Programmers-%EB%B9%84%EB%B0%80-%EC%A7%80%EB%8F%84-Python</link>
            <guid>https://velog.io/@minob_b/Programmers-%EB%B9%84%EB%B0%80-%EC%A7%80%EB%8F%84-Python</guid>
            <pubDate>Wed, 29 Sep 2021 12:26:58 GMT</pubDate>
            <description><![CDATA[<h3 id="문제">문제</h3>
<p><a href="https://programmers.co.kr/learn/courses/30/lessons/17681">https://programmers.co.kr/learn/courses/30/lessons/17681</a>
<br></br></p>
<h3 id="접근-방식">접근 방식</h3>
<blockquote>
<ol>
<li>정수로 받은 리스트를 format함수를 이용하여 2진수로 변환 후 map리스트에 저장 (n자릿수를 맞추기 위해 zfill함수 사용)</li>
<li>map1과 map2를 or연산한 결과를 map3에 저장</li>
<li>map3의 2차원배열을 join함수를 이용하여 result_map에 1차원 배열로 저장</li>
</ol>
</blockquote>
<p><br></br></p>
<h3 id="최종-코드">최종 코드</h3>
<pre><code class="language-python">def solution(n, arr1, arr2):
    map1 = []
    map2 = []
    map3 = [[0] * n for i in range(n)]
    result_map = []
    for i in arr1:
        map1.append(list(format(i, &#39;b&#39;).zfill(n)))
    for i in arr2:
        map2.append(list(format(i, &#39;b&#39;).zfill(n)))
    for i in range(n):
        for j in range(n):
            if int(map1[i][j]) or int(map2[i][j]):
                map3[i][j] = &#39;#&#39;
            else:
                map3[i][j] = &#39; &#39;
    for i in range(n):
        result_map.append(&quot;&quot;.join(map3[i]))
    return result_map</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Programmers] 다트 게임 (Python)]]></title>
            <link>https://velog.io/@minob_b/Programmers-%EB%8B%A4%ED%8A%B8-%EA%B2%8C%EC%9E%84-Python</link>
            <guid>https://velog.io/@minob_b/Programmers-%EB%8B%A4%ED%8A%B8-%EA%B2%8C%EC%9E%84-Python</guid>
            <pubDate>Wed, 29 Sep 2021 10:35:36 GMT</pubDate>
            <description><![CDATA[<h3 id="문제">문제</h3>
<p><a href="https://programmers.co.kr/learn/courses/30/lessons/17682">https://programmers.co.kr/learn/courses/30/lessons/17682</a></p>
<p><br></br></p>
<h3 id="접근-방식">접근 방식</h3>
<blockquote>
<ol>
<li>숫자가 들어오면 임시변수 temp에 숫자를 저장</li>
<li>S, D, T가 들어오면  temp에 연산 후 score 리스트에 append</li>
<li>*, #가 들어오면 score 리스트의 요소에 직접 연산</li>
<li>sum 함수를 이용해 score 리스트의 합 계산</li>
</ol>
</blockquote>
<p><br></br></p>
<h3 id="초기-코드">초기 코드</h3>
<pre><code class="language-python">def solution(dartResult):
    score = []
    for i in dartResult:
        if i.isdigit():
            temp = int(i)
        elif i == &#39;S&#39;:
            score.append(temp)
        elif i == &#39;D&#39;:
            score.append(temp ** 2)
        elif i == &#39;T&#39;:
            score.append(temp ** 3)
        elif i == &#39;*&#39;:
            if len(score) &gt; 1:
                score[-2] *= 2
                score[-1] *= 2
            else:
                score[-1] *= 2
        elif i == &#39;#&#39;:
            score[-1] *= (-1)
    print(score)
    return sum(score)</code></pre>
<p><br></br></p>
<h3 id="문제점">문제점</h3>
<blockquote>
<p>0~9점까지는 문제 없이 출력되지만, 10점일 경우 i의 값이 10이 아닌 1과 0으로 반복문이 실행.
<img src="https://images.velog.io/images/minob_b/post/eedf990f-f51e-4f51-b9a4-fe269b449506/image.png" align="left">
-&gt; 10을 replace 함수를 이용하여 A로 치환 후 연산</p>
</blockquote>
<p><br></br></p>
<h3 id="제출-코드">제출 코드</h3>
<pre><code class="language-python">def solution(dartResult):
    score = []
    dartResult = dartResult.replace(&#39;10&#39;, &#39;A&#39;)
    for i in dartResult:
        if i.isdigit():
            temp = int(i)
        elif i == &#39;A&#39;:
            temp = 10
        elif i == &#39;S&#39;:
            score.append(temp)
        elif i == &#39;D&#39;:
            score.append(temp ** 2)
        elif i == &#39;T&#39;:
            score.append(temp ** 3)
        elif i == &#39;*&#39;:
            if len(score) &gt; 1:
                score[-2] *= 2
                score[-1] *= 2
            else:
                score[-1] *= 2
        elif i == &#39;#&#39;:
            score[-1] *= (-1)
    return sum(score)</code></pre>
<p><br></br></p>
<h3 id="정제-후-최종-코드">정제 후 최종 코드</h3>
<pre><code class="language-python">def solution(dartResult):
    score = []
    dartResult = dartResult.replace(&#39;10&#39;, &#39;A&#39;)
    dart = {&#39;S&#39;: 1, &#39;D&#39;: 2, &#39;T&#39;: 3}
    option = {&#39;*&#39;: 2, &#39;#&#39;: -1}

    for i in dartResult:
        if i.isdigit() or i == &#39;A&#39;:
            temp = 10 if i == &#39;A&#39; else int(i)
        elif i in dart:
            score.append(temp ** dart[i])
        elif i in option:
            if len(score) &gt; 1 and option[i] == &#39;*&#39;:
                score[-2] *= option[i]
                score[-1] *= option[i]
            else:
                score[-1] *= option[i]
    return sum(score)</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Programmers] 이상한 문자 만들기 (Python)]]></title>
            <link>https://velog.io/@minob_b/Programmers-%EC%9D%B4%EC%83%81%ED%95%9C-%EB%AC%B8%EC%9E%90-%EB%A7%8C%EB%93%A4%EA%B8%B0-Python</link>
            <guid>https://velog.io/@minob_b/Programmers-%EC%9D%B4%EC%83%81%ED%95%9C-%EB%AC%B8%EC%9E%90-%EB%A7%8C%EB%93%A4%EA%B8%B0-Python</guid>
            <pubDate>Tue, 28 Sep 2021 16:59:23 GMT</pubDate>
            <description><![CDATA[<h3 id="문제">문제</h3>
<p><a href="https://programmers.co.kr/learn/courses/30/lessons/12930">https://programmers.co.kr/learn/courses/30/lessons/12930</a>
<br></br></p>
<h3 id="접근-방식">접근 방식</h3>
<blockquote>
<ol>
<li>주어진 문자열을 split함수로 슬라이스하여 단어를 리스트로 저장</li>
<li>반복문을 이용하여 단어의 짝수 인덱스 upper, 홀수 인덱스 lower</li>
<li>join함수로 단어 사이에 공백을 추가하며 합친 문자열 return</li>
</ol>
</blockquote>
<p><br></br></p>
<h3 id="초기-코드">초기 코드</h3>
<pre><code class="language-python">def solution(s):
    words = s.split(&quot; &quot;)
    for word in words:
        for i in range(len(word)):
            if i % 2 == 0:
                word[i] = word[i].upper()
            else:
                word[i] = word[i].lower()
    return &quot; &quot;.join(words)</code></pre>
<p><br></br></p>
<h3 id="문제점">문제점</h3>
<blockquote>
<p>Python에서는 문자열을 인덱스로 접근하여 직접 변경하는 것이 불가능.
-&gt; 새로운 문자열을 만들어 저장하는 방식을 사용.</p>
</blockquote>
<p><br></br></p>
<h3 id="최종-코드">최종 코드</h3>
<pre><code class="language-python">def solution(s):
    words = s.split(&quot; &quot;)
    new_list = []
    for word in words:
        new_word = &quot;&quot;
        for i in range(len(word)):
            if i % 2 == 0:
                new_word += word[i].upper()
            else:
                new_word += word[i].lower()
        new_list.append(new_word)
    return &quot; &quot;.join(new_list)    
</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[정글]]></title>
            <link>https://velog.io/@minob_b/%EC%A0%95%EA%B8%80</link>
            <guid>https://velog.io/@minob_b/%EC%A0%95%EA%B8%80</guid>
            <pubDate>Mon, 27 Sep 2021 11:32:13 GMT</pubDate>
            <description><![CDATA[<h2 id="정글-jungle">정글 (JUNGLE)</h2>
<p>우연히 <strong>정글</strong> 이라는 SW사관학교를 알게 되었다.
개발자가 되고 싶지만 의욕만 앞서고 뭘 해야 할지도 제대로 
몰랐던 나는 <strong>정글</strong>에서 꼭 교육을 받고 싶다는 생각을 했다.
하지만, 아쉽게도 약 10일 전에 서류 접수를 마감했다.</p>
<p>약 2~3개월 단위로 기수를 운영한다고 하니, 3개월동안 
<strong>정글</strong>에서 살아남기 위한 준비를 해야겠다고 마음 먹었다.</p>
<p><strong>정글</strong> 운영자 중 한분이 스파르타코딩클럽의 대표였다.
믿을 수 있는 코딩 교육 플랫폼이라고 생각했다.
웹개발 종합반을 등록한 후 교육을 수강하기 시작했다.</p>
<p>앞으로 나의 계획이다.</p>
<blockquote>
<ol>
<li>웹개발 종합반 이수 후 나만의 웹페이지 만들기</li>
<li>알고리즘 공부하기 ( 프로그래머스 )</li>
<li>velog 꾸준히 운영하기 ( 최소 주 1회 )</li>
</ol>
</blockquote>
<h3 id="꼭-내년에는-정글-속의-타잔이-될-수-있길">꼭 내년에는 정글 속의 타잔이 될 수 있길...</h3>
<p><img src="https://images.velog.io/images/minob_b/post/70d1e824-4527-45b7-974e-0fa4f4c57a3e/image.png" alt=""></p>
]]></description>
        </item>
    </channel>
</rss>