<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>gomster_96.log</title>
        <link>https://velog.io/</link>
        <description>No Pain No Gain</description>
        <lastBuildDate>Wed, 18 Aug 2021 07:28:45 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>gomster_96.log</title>
            <url>https://images.velog.io/images/gomster_96/profile/7aff4970-3bcb-48ce-9099-924ceb3e510d/social.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. gomster_96.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/gomster_96" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[2021 네이버 부스트캠프 첼린지 수료 후기]]></title>
            <link>https://velog.io/@gomster_96/2021-%EB%84%A4%EC%9D%B4%EB%B2%84-%EB%B6%80%EC%8A%A4%ED%8A%B8%EC%BA%A0%ED%94%84-%EC%B2%BC%EB%A6%B0%EC%A7%80-%EC%88%98%EB%A3%8C-%ED%9B%84%EA%B8%B0</link>
            <guid>https://velog.io/@gomster_96/2021-%EB%84%A4%EC%9D%B4%EB%B2%84-%EB%B6%80%EC%8A%A4%ED%8A%B8%EC%BA%A0%ED%94%84-%EC%B2%BC%EB%A6%B0%EC%A7%80-%EC%88%98%EB%A3%8C-%ED%9B%84%EA%B8%B0</guid>
            <pubDate>Wed, 18 Aug 2021 07:28:45 GMT</pubDate>
            <description><![CDATA[<p>7월 19일부터 8월 13일까지 진행되었던 부스트캠프 첼린지가 드디어 끝났다. 나는 Web으로 신청하여 진행하였다. </p>
<h1 id="첼린지-소감">첼린지 소감</h1>
<p>한달동안 자바스크립트에 대해 전혀 모르던 나에게는 매일이 도전의 연속이였다. 개인적으로 정말 힘들었지만 그럼에도 불구하고 매주 실력이 향상된 나 자신을 보면 너무나도 뿌듯했던 것 같다. 첼린지 과정은 주로 CS관련 미션을 JavaScript로 해결하는 과정이였다. </p>
<p>첼린지 기간동안 매일 피어세션이 진행되는데, 정말 나는 우물안 개구리임을 느낀 기간이였다. 잘하시는 분들의 코드를 보며 그분들과 코드관련 이야기를 하면서 많이 배우고 또 많이 자극이 되었던 것 같다. 개인적으로 매일의 미션이 나에게는 정말 첼린지 그 자체였는데 같이 피어세션을 하는 피어들에게 부끄럽지 않도록 열심히하며 계속해서 나의 한계를 깨고 더 올라가는 과정이였다. 고차함수가 무엇인지 모르던 내가 몇주뒤엔 자연스럽게 고차함수를 사용하고 있었다. 이런 나 자신이 대견하고 또 대견하였다.  </p>
<p>하루하루 미션을 하는게 익숙한 나머지 사실 지금 누워서 이렇게 글을 쓰고 있는게 낯설다... ㅎㅎ 정말로 감사한 기회였고 또 열심히한 4주였다. 지금까지 살면서 4주동안 이렇게 코딩을 많이한적은 처음인것 같다. 너무나도 힘들었지만 그만큼 너무나도 재미있었고 값진 시간이였다. 내가 멤버십에 붙을 수 있을지는 모르겠지만 (사실 정말로 붙고 싶지만) 첼린지 과정은 나에게 정말 큰 도전이였고, 너무 감사한 기회였다. </p>
<p><img src="https://images.velog.io/images/gomster_96/post/919a3258-1bb7-446a-a2d5-76731430b4a8/image.png" alt=""></p>
<h1 id="멤버십은-과연">멤버십은 과연...?</h1>
<p>멤버십에 붙으면 쓰도록 하겠다....ㅋㅋㅋ 붙었으면 좋겠네!!! 열심히하겠습니다.! 아무튼 다시한번 말씀드리지만 너무 감사했습니다! </p>
<h1 id="멤버십-합격">멤버십 합격</h1>
<p>붙었다..! 멤버십에!!! 감사합니다..! 더욱 열심히 하며 발전하고 배우겠습니다. 생각보다 많은 사람들이 떨어진것같다. 어떤 방법으로 평가했는지 모르겠지만 열심히하던 캠퍼들도 몇몇은 떨어졌다. 웹의 경우 60%정도가 살아남은 것 같은데, 나는 60등이라는 생각으로 기초부터 차근차근 따라간다는 마인드로 멤버십에 임해야겠다!.
<img src="https://images.velog.io/images/gomster_96/post/6abd4269-2e3a-48bb-a24d-5848503a5452/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[HTML 생활코딩 정리]]></title>
            <link>https://velog.io/@gomster_96/HTML-%EC%83%9D%ED%99%9C%EC%BD%94%EB%94%A9-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@gomster_96/HTML-%EC%83%9D%ED%99%9C%EC%BD%94%EB%94%A9-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Wed, 07 Jul 2021 06:27:23 GMT</pubDate>
            <description><![CDATA[<h2 id="1html-태그">1.HTML 태그</h2>
<ul>
<li><code>&lt;head&gt;&lt;/head&gt;</code> 
body 즉 본문을 제외한 위쪽 부분을 감싸줌. 본문과 구별하기 위한 약속</li>
<li><code>&lt;body&gt;&lt;/body&gt;</code>
본문 쪽을 감싸주는 태그</li>
<li><code>&lt;html&gt;&lt;/html&gt;</code> 
html 전체를 감싸줌. 일종의 표시</li>
<li><code>&lt;title&gt;제목내용&lt;/title&gt;</code> 
해당 페이지의 제목을 나타내줌</li>
<li><code>&lt;li&gt;list로 나열할 내용들&lt;/li&gt;</code>
list의 약자로 ol 또는 ul의 규칙 내부에서 나열을 해줌</li>
<li><code>&lt;ol&gt;&lt;/ol&gt;</code>
ordered list의 약자로 각 li마다 번호를 매겨줌. 1. 2. 3. 이런식으로</li>
<li><code>&lt;ul&gt;&lt;/ul&gt;</code>
unordered list 의 약자로 각 li마다 하나씩 나눠줌</li>
<li><code>&lt;h1&gt;제목으로 쓸 내용&lt;/h1&gt;</code>
글에서 제목으로 사용. 음 마크다운의 #    과 비슷함. h2는 ##으로 h3는 ###으로 생각하면 됨.</li>
<li><code>&lt;br&gt;</code> 
주로 글 뒤에다 씀. 새로운 행을 만들어줌. 즉 엔터역할을 함.</li>
<li><code>&lt;p&gt;단락내용&lt;/p&gt;</code>
pargraph의 약자로 단락을 설정해줌. 즉 위아래 margin을 주는 것.</li>
<li><code>&lt;a href= &quot;연결할 사이트의 링크&quot;&gt;무엇을 링크로 만들고 시픈지&lt;/a&gt;</code>
링크를 연결해줌. 링크로 연결해주기 위해선 href내부에 내용을 적어야함. </li>
<li><code>&lt;img src=&quot;가져올 이미지의 위치&quot;&gt;&lt;/img&gt;</code>
이미지를 불러오기</li>
</ul>
<h2 id="2-html-사용정리">2. html 사용정리</h2>
<pre><code>&lt;!DOCTYPE html&gt;
&lt;html&gt;
    html으로 모든 head와 body를 감싸야함 Doctype은 html이라는 것을 설명하는것 &lt;br&gt;
&lt;head&gt;
    head는 본문을 제외한 선언 부분
&lt;title&gt;WEB1 - html&lt;/title&gt;
제목을 작성하는 title 태그 &lt;br&gt;
&lt;meta charset=&quot;utf-8&quot;&gt;
글씨 깨짐을 방지하는 meta charset=&quot;utf-8&quot;
&lt;/head&gt;
&lt;body&gt;
    본문을 묶을 땐 body를 사용해야함
&lt;ol&gt;
    &lt;li&gt;1. HTML&lt;/li&gt;
    &lt;li&gt;2. CSS&lt;/li&gt;
    &lt;li&gt;3. JavaScript&lt;/li&gt;
    &lt;li&gt;li는 바로 옆에 있는 것처럼 list를 만듬&lt;/li&gt;
    &lt;li&gt;ol은 ordered list의 약자같음 아무튼 list에 order를 주는 부모테크임&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
    &lt;li&gt;ul은 li들을 grouping하기 위한 부모테그 , unordered list 의 약자&lt;/li&gt;
    &lt;li&gt;따라서 li는 반듣시 부모테크 ul을 가지고 있고&lt;/li&gt;
    &lt;li&gt;ul은 반드시 li를 가지고 있음&lt;/li&gt;
&lt;/ul&gt;



&lt;h1&gt;제목으로 사용 headline 가장 큰건 h1&lt;/h1&gt;
&lt;h2&gt;제목으로 사용 headline 가장 두번째로 큰건 h2&lt;/h2&gt;
&lt;h3&gt;이렇게 h1 h2 h3 h4 h5 h6 까지 이런식으로 필요한 크기의 헤드라인을 사용할 수 있다.&lt;/h3&gt;

Hello HTML
&lt;a href=&quot;https://www.naver.com/&quot; target=&quot;_blank&quot; title=&quot;네이버&quot;&gt;링크를 내개 위해서는 a태그를 사용한다. 또한 href = 링크 를 저장해주면 그 링크로 이동하게 된다. &lt;/a&gt;
더 두껍게 표현 &lt;strong&gt;더 진하게 표현 가능&lt;/strong&gt;
밑줄 치기 &lt;u&gt;밑줄 치기는 underline의 약자&lt;/u&gt;

br태그를 쓰기전
&lt;br&gt; br이라는 태그를 쓰면 줄 바꿈이 생긴다. 닫는 괄호를 쓸 필요 없음

또한 단락을 만들기 위해서는
&lt;p&gt;p라는 태그를 사용한다. 이 태그같은 경우에는 닫는 태그도 필요한다. 어디서부터~어디까지가 한 단락인지를 표현해야하기 때문이다.&lt;/p&gt;

단락이후에는 이런식으로 나타난다. P태그는 정해진 여백이 고정되어있기때문에 더 많이 여백을 만들고 싶으면 br을 여러번 사용해야한다. 하지만 CSS를 사용하면 P만 사용해도 여백을 더 크게 만들 수 있다.

&lt;p style=&quot;margin-top: 40px ;&quot;&gt;CSS는 p태그 내부에 style을 적기 시작하여 사용한다. CSS는 다음수업에서 더 다룬다. &lt;/p&gt; 
&lt;img src=&quot;./draw.jpeg&quot; width = &quot;100%&quot;&gt;
&lt;p style=&quot;margin-top: 40px ;&quot;&gt;이미지를 부르는 법, unsplash.com에서는 저작권 상관없이 사용 가능 이미지 &lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre><p>해당 코드를 실행하면 다음과 같은 결과가 나온다.
<img src="https://images.velog.io/images/gomster_96/post/14433c41-4d17-4e02-868d-ae7305f4ce27/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[부스트코스 정리 - 웹 Front-End 와 웹 Back-End]]></title>
            <link>https://velog.io/@gomster_96/%EB%B6%80%EC%8A%A4%ED%8A%B8%EC%BD%94%EC%8A%A4-%EC%A0%95%EB%A6%AC-%EC%9B%B9-Front-End-%EC%99%80-%EC%9B%B9-Back-End</link>
            <guid>https://velog.io/@gomster_96/%EB%B6%80%EC%8A%A4%ED%8A%B8%EC%BD%94%EC%8A%A4-%EC%A0%95%EB%A6%AC-%EC%9B%B9-Front-End-%EC%99%80-%EC%9B%B9-Back-End</guid>
            <pubDate>Tue, 06 Jul 2021 07:20:09 GMT</pubDate>
            <description><![CDATA[<h2 id="웹-프론트엔드">웹 프론트엔드</h2>
<p>사용자에게 웹을 통해 다양한 콘텐츠(문서, 동영상, 사진 등) 을 제공한다. 또한 사용자의 요청에 반응해서 동작한다. </p>
<h4 id="역할">역할</h4>
<p>신문 책 처럼 웹 콘텐츠를 잘 보여주기 위한 구조를 만들어야함. (HTML) -&gt; 웹의 구조 결정
적절한 배치와 일관된 디자인 등을 제공 (CSS) -&gt; 웹의 디자인 요소 결정
사용자 요청을 잘 반영해야 함 (JavaScript) -&gt; 동적인 제어를 하기위함</p>
<h2 id="웹-벡엔드">웹 벡엔드</h2>
<p>프론트는 클라이언트 입장엥서 개발이 진행된다면, 백엔드는 프로그램의 뒷 부분 쪽 즉 서버 입장에서 개발을 진행</p>
<h4 id="알아야-할-것">알아야 할 것</h4>
<ul>
<li>프로그래밍 언어(Java, Python, PHP, Javascript)</li>
<li>웹의 동작원리</li>
<li>알고리즘, 자료구조 등 프로그래밍 기반 지식</li>
<li>OS, Network</li>
<li>프레임워크에 대한 이해 (Spring)</li>
<li>DBMS에 대한 이해와 사용 방법 (MYSQL, Oracle)</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[부스트코스 정리 - 웹의 동작 (HTTP 프로토콜 이해)]]></title>
            <link>https://velog.io/@gomster_96/%EB%B6%80%EC%8A%A4%ED%8A%B8%EC%BD%94%EC%8A%A4-%EC%A0%95%EB%A6%AC-%EC%9B%B9%EC%9D%98-%EB%8F%99%EC%9E%91-HTTP-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C-%EC%9D%B4%ED%95%B4</link>
            <guid>https://velog.io/@gomster_96/%EB%B6%80%EC%8A%A4%ED%8A%B8%EC%BD%94%EC%8A%A4-%EC%A0%95%EB%A6%AC-%EC%9B%B9%EC%9D%98-%EB%8F%99%EC%9E%91-HTTP-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C-%EC%9D%B4%ED%95%B4</guid>
            <pubDate>Tue, 06 Jul 2021 05:39:32 GMT</pubDate>
            <description><![CDATA[<h2 id="1-인터넷이란">1. 인터넷이란?</h2>
<p>인터넷은 TCP/IP라는 약속을 기반으로 네트워크가 전세계적으로 확대되어 하나로 연결된 네트워크 들의 네트워크이다.</p>
<h3 id="종류">종류</h3>
<p><img src="https://images.velog.io/images/gomster_96/post/34c064cd-2c36-4bfd-b44a-a4956ca0d08d/image.png" alt=""></p>
<h2 id="2-httphypertext-transfer-protocol이란">2. HTTP(Hypertext Transfer Protocol)이란?</h2>
<p>HTTP는 서버와 클라이언트가 인터넷상에서 데이터를 주고 받기 위한 프로토콜(Protocol)이다. 어떤 종류의 데이터라도 ex)이미지, 동영상. 오디오 등 종류를 가리지 않고 전송 할 수 있다. </p>
<h3 id="http-작동-방식">HTTP 작동 방식</h3>
<ul>
<li><p>서버/클라이언트 모델을 따른다</p>
<ul>
<li>클라이언트가 먼저 서버에게 요청을 보내고 이후 서버가 클라이언트에 응답을 보냄.</li>
</ul>
</li>
<li><p>무상태 프로토콜 : 서버는 클라이언트와 응답을 하고나면 바로 연결을 끊어버림. 이러한 성질을 무상태 프로토콜이라고 함. (Stateless)</p>
<ul>
<li>장점 : 불 특정 다수를 대상으로 하는 서비스에는 매우 적합함. 계속 연결을 유지하는 방법이 아니기 때문에 클라이언트와 서버가 최대한 다수로 연결할 수 있음</li>
<li>단점 : 이전에 연결했었던 정보를 유지 할 수 없음 -&gt; 쿠키라는 기술이 새김</li>
</ul>
</li>
</ul>
<h2 id="url-uniform-resource-locator">URL (Uniform Resource Locator)</h2>
<ul>
<li>인터넷 상의 자원의 위치를 나타냄. 특정 웹 서버의 특정 파일에 접근하기 위한 경로 혹은 주소이다.
<img src="https://images.velog.io/images/gomster_96/post/5d0ca8e0-17c7-46f6-b0df-dd4791a5f606/image.png" alt=""></li>
</ul>
<h3 id="http-전체-과정">HTTP 전체 과정</h3>
<p><img src="https://images.velog.io/images/gomster_96/post/12b8beef-7e8b-47b0-bf5f-c2de3e3fc745/image.png" alt=""></p>
<ol>
<li>먼저 클라이언트가 서버에게 연결을 요청한다.</li>
<li>이후 요청을 하는데 정해진 포멧에 따라 맞춰서 해야한다. </li>
</ol>
<ul>
<li>먼저 Get /servlet/query?<del>~ HTTP/1.1이 있는데, Get은 요청한다는 요청 메서드이고, /servelt</del> 이 부분은 요청하는 자원의 위치이며, HTTP/1.1은 사용하는 HTTP의 버전을 명시하는 것이다. </li>
<li>바디 요소는 오청 메서드가 POST나 PUT을 사용하였을 때만 들어온다.</li>
</ul>
<p>3.응답 요청은 먼저 프토토콜버전, 응답 메세지가 들어간다.</p>
<p>++ 그 외에 함수들
<img src="https://images.velog.io/images/gomster_96/post/432db53c-848a-49e3-86ee-03f114a8d227/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[그래프 관련 알고리즘]]></title>
            <link>https://velog.io/@gomster_96/%EA%B7%B8%EB%9E%98%ED%94%84-%EA%B4%80%EB%A0%A8-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</link>
            <guid>https://velog.io/@gomster_96/%EA%B7%B8%EB%9E%98%ED%94%84-%EA%B4%80%EB%A0%A8-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</guid>
            <pubDate>Sat, 03 Jul 2021 03:04:28 GMT</pubDate>
            <description><![CDATA[<h2 id="kruskal-알고리즘">Kruskal 알고리즘</h2>
<p>Union &amp; Find를 사용하여 연결되어있는지를 확인하는 알고리즘이다. </p>
<pre><code class="language-cpp">struct Edge{
    int v1, v2, val;
    Edge(int a, int b, int c){
        v1 = a;
        v2 = b;
        val = c;
    }
    bool operator&lt; (const Edge&amp; v) const{
        return val&lt;v.val;
    }
};
int unf[26];
int Find(int a){
    if(unf[a] == a) return a;
    else return unf[a] = Find(unf[a]);
}

void Union(int a, int b){
    a= Find(a);
    b = Find(b);
    if(a != b){
        unf[a] = b;
    }
}
int main(){
    freopen(&quot;input.txt&quot;,&quot;rt&quot;,stdin);
    int v = 0, e = 0 , c = 0;
    int n = 0, m = 0;
    scanf(&quot;%d %d&quot;,&amp;n, &amp;m);
    vector&lt;Edge&gt; a;
    int res = 0;

    for(int i=1; i&lt;=n; i++){
        unf[i]= i;
    }
    for(int i=1; i&lt;=m; i++){
        scanf(&quot;%d %d %d&quot;,&amp;v, &amp;e, &amp;c);
        a.push_back(Edge(v,e,c));
    }
    sort(a.begin(), a.end());
    for(int i=0; i&lt;m; i++){

        if(Find(a[i].v1)!=Find(a[i].v2)){
            printf(&quot;%d %d %d\n&quot;,a[i].v1,a[i].v2,a[i].val);
            res+=a[i].val;
            Union(a[i].v1, a[i].v2);
        }

    }
    printf(&quot;%d\n&quot;,res);
    return 0;
}

</code></pre>
<p>Priority_Queue 사용</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
#include&lt;stdlib.h&gt;
#include&lt;vector&gt;
#include&lt;queue&gt;
#include&lt;algorithm&gt;
using namespace std;

int ch[31];
struct Edge{
    int e;
    int val;
    Edge(int a, int b){
        e = a;
        val = b;
    }
    bool operator&lt;(const Edge &amp;b) const {
        return val &gt; b.val;
    }
};

int main(){
    freopen(&quot;input.txt&quot;,&quot;rt&quot;,stdin);
    priority_queue&lt;Edge&gt; Q;
    vector&lt;pair&lt;int, int&gt; &gt; map[30];
    int i, n, m, a, b, c, res = 0;
    scanf(&quot;%d %d&quot;,&amp;n, &amp;m);
    for(i=1; i&lt;=m; i++){
        scanf(&quot;%d %d %d&quot;,&amp;a, &amp;b, &amp;c);
        map[a].push_back(make_pair(b,c));
        map[b].push_back(make_pair(a,c));
    }

    Q.push(Edge(1,0));
    while(!Q.empty()){
        Edge tmp = Q.top();
        int v = tmp.e;
        int cost = tmp.val;
        if(ch[v] == 0){
            res+=cost;
            ch[v] = 1;
            for(i=0; i&lt;map[v].size(); i++){
                Q.push(Edge(map[v][i].first, map[v][i].second));
            }
        }
    }

    printf(&quot;%d\n&quot;,res);

    return 0;
}</code></pre>
<h2 id="다익스트라-알고리즘">다익스트라 알고리즘</h2>
<p>한정점에서 다른 모든 정점으로의 최소거리를 구하는 알고리즘이다. </p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
#include&lt;stdlib.h&gt;
#include&lt;vector&gt;
#include&lt;queue&gt;
#include&lt;algorithm&gt;
using namespace std;

struct Edge{
    int vex;
    int dis;
    Edge(int a, int b){
        vex = a;
        dis = b;
    }
    bool operator&lt;(const Edge &amp;b) const {
        return dis &gt; b.dis;
    }
};

int main(){
    freopen(&quot;input.txt&quot;,&quot;rt&quot;,stdin);
    priority_queue&lt;Edge&gt; pQ;
    vector&lt;pair&lt;int, int&gt; &gt; graph[30];
    int i, n, m, a, b, c;
    cin&gt;&gt;n&gt;&gt;m;
    vector&lt;int&gt; dist(n+1, 2147000000);
    for(i=1; i&lt;=m; i++){
        cin&gt;&gt;a&gt;&gt;b&gt;&gt;c;
        graph[a].push_back(make_pair(b,c));
    }
    pQ.push(Edge(1,0));
    dist[1] = 0;
    while(!pQ.empty()){
        int now = pQ.top().vex;
        int cost = pQ.top().dis;
        pQ.pop();
        if(cost&gt;dist[now]) continue;
        for(i=0; i&lt;graph[now].size(); i++){
            int next = graph[now][i].first;
            int nextDis = cost + graph[now][i].second;
            if(dist[next] &gt; nextDis){
                dist[next] = nextDis;
                pQ.push(Edge(next, nextDis));
            }
        }
    }
    return 0;
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[c++ string 테크닉 정리 ]]></title>
            <link>https://velog.io/@gomster_96/c-string-%ED%85%8C%ED%81%AC%EB%8B%89-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@gomster_96/c-string-%ED%85%8C%ED%81%AC%EB%8B%89-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Fri, 02 Jul 2021 13:42:20 GMT</pubDate>
            <description><![CDATA[<h2 id="개요">개요</h2>
<p>다른 언어들과 다르게 c++의 string은 다양한 기능들이 있고 또 split처럼 아예 없는 기능들도 있다. 코딩테스트를 위해 필요한 부분들을 정리해봐야겠다. </p>
<h2 id="split">Split</h2>
<p>c++에서 string은 split기능이 없다. 따라서 다음과 같이 함수를 만들어 놓는 것이 좋다.</p>
<p>sstream을 include 해주어야 한다.</p>
<pre><code class="language-cpp">// 사실상 input을 stream으로 만들어 getline으로 끊어준 방법이다. 
#include &lt;sstream&gt;
vector&lt;string&gt; split(string input, char delimiter){
    vector&lt;string&gt; ans;
    stringstream ss(input);
    string temp;
    while(getline(ss, temp, delimiter)){
           ans.push_back(temp);
    }
    return ans;
}</code></pre>
<h2 id="substr">substr</h2>
<p>string을 원하는 부분만큼 짜른 부분은 return하는 string의 내장함수이다. </p>
<pre><code class="language-cpp">string.substr(시작 위치 index, 이후 몇개를 가져올 것인지 = 끝까지)
// 즉 index부터 시작하여 이후 몇개를 가져올 지에 대한 함수이다. 
// 두번째 parameter의 default값은 string의 끝까지 다이다
string str = &quot;abcde&quot;;
str.substr(1,2); // bc 가져옴
str.substr(1); //bcde가져옴</code></pre>
<h2 id="to_string">to_string</h2>
<p>숫자나 모든 다른 type을 string으로 바꿔줌</p>
<pre><code class="language-cpp">int number = 1234;
string tmp = to_string(number); /// tmp 는 &quot;1234&quot;가 됌</code></pre>
<h2 id="erase">erase</h2>
<p>문자열을 지워주는 함수. 사실상 substr이랑 paramter내부는 ㄴ같다</p>
<pre><code class="language-cpp">string.erase(시작 위치 index, 이후 몇개를 삭제할지 = 끝까지);
// 첫번째 index부터 얼마나 문자열을 지울지에대한 함수이다. </code></pre>
<h2 id="transform">transform</h2>
<p>문자열 내부에 소문자나 대문자를 바꿔줌</p>
<pre><code class="language-cpp">// str내부에 소문자들을 다 대문자로 바꿔줌
transform(str.begin(), str.end(), ::toupper);
//str내부에 대문자들을 다 소문자로 바꿔줌
transform(str.begin(), str.end(), ::tolower);
</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[프로그래머스 - 괄호 변환 - Level 2 ]]></title>
            <link>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EA%B4%84%ED%98%B8-%EB%B3%80%ED%99%98-Level-2</link>
            <guid>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EA%B4%84%ED%98%B8-%EB%B3%80%ED%99%98-Level-2</guid>
            <pubDate>Fri, 02 Jul 2021 02:17:54 GMT</pubDate>
            <description><![CDATA[<h2 id="문제">문제</h2>
<p><img src="https://images.velog.io/images/gomster_96/post/c1c83682-da5b-4954-9c41-db02101ee59b/image.png" alt="">
<img src="https://images.velog.io/images/gomster_96/post/f0372cf3-1385-4941-8889-9dc1ba713933/image.png" alt=""></p>
<h2 id="풀이전략">풀이전략</h2>
<ol>
<li>문제가 상당히 친절하게 재귀를 사용하라고, 어떻게 구현하라고 가르쳐주었다.</li>
<li>substr을 활용하여 u와 v로 잘라서 문제를 해결하면 된다. <h2 id="코드">코드</h2>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;vector&gt;
</code></pre>
</li>
</ol>
<p>using namespace std;</p>
<p>string getMyString(string s){
    // 비어있는 문자열은 그냥 return
    if(s.length() == 0) return &quot;&quot;;
    int flag = true;
    int key = 0;</p>
<pre><code>string u = &quot;&quot;, v= &quot;&quot;;
int i = 0;

while(key != 0 || i == 0){
    if(s[i] == &#39;(&#39;){
        key++;
    }
    else if(s[i] == &#39;)&#39;){
        key--;
    }
    if(key &lt; 0) flag = false;
    u += s[i];
    i++;
}
v = s.substr(i);
// u가 올바른 괄호 문자열일 경우
if(flag) return u + getMyString(v);
// u가 균형잡힌일 경우
else{
// 문제에서 하라는 4번대로 해결
    string tmp =&quot;&quot;;
    tmp += &#39;(&#39;;
    tmp += getMyString(v);
    tmp += &#39;)&#39;;
    string newU = u.substr(1, u.length()-2);
    for(int j =0; j&lt;newU.length(); j++){
        if(newU[j] == &#39;(&#39;) newU[j] = &#39;)&#39;;
        else if(newU[j] == &#39;)&#39;) newU[j] = &#39;(&#39;;
    }
    return tmp + newU;
}</code></pre><p>}</p>
<p>string solution(string p) {
    string answer = &quot;&quot;;
    answer = getMyString(p);
    return answer;
}</p>
<p>```</p>
<h2 id="소감">소감</h2>
<p>문제에서 풀라는 대로 풀었다. 단 이렇게 구현을 할 수 있다는 것을 알고 이 과정을 따라 잘 할수 있어야한다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[프로그래머스 - 수식 최대화 - Level 2 ]]></title>
            <link>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%88%98%EC%8B%9D-%EC%B5%9C%EB%8C%80%ED%99%94-Level-2</link>
            <guid>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%88%98%EC%8B%9D-%EC%B5%9C%EB%8C%80%ED%99%94-Level-2</guid>
            <pubDate>Fri, 02 Jul 2021 02:12:36 GMT</pubDate>
            <description><![CDATA[<h2 id="문제">문제</h2>
<p><img src="https://images.velog.io/images/gomster_96/post/53384265-08fb-4e44-a3c0-4da7ac627f7c/image.png" alt="">
<img src="https://images.velog.io/images/gomster_96/post/88fc0f53-d3ad-4c03-8f4b-2ddeafb41f17/image.png" alt=""></p>
<h2 id="풀이전략">풀이전략</h2>
<ol>
<li>이 문제는 연산자의 우선순위를 자유롭게 재 정의하여 가장 최대값이 나오도록 문제를 해결해야한다. </li>
<li>주어진 수식에서 숫자와 연산자를 따로 추출해야한다.</li>
<li>next_permutation함수를 사용하여 해결한다. <h2 id="코드">코드</h2>
<pre><code class="language-cpp">#include&lt;string&gt;
#include&lt;vector&gt;
#include&lt;algorithm&gt;
</code></pre>
</li>
</ol>
<p>using namespace std;</p>
<p>long long calculate(long long a, long long b, char op){
    if(op == &#39;+&#39;)
        return a+b;
    else if(op == &#39;-&#39;) return a-b;
    else if(op == &#39;<em>&#39;) return a</em>b;
}</p>
<p>long long solution(string expression){
    long long answer = 0;</p>
<pre><code>vector&lt;long long&gt; record_operand;
vector&lt;char&gt; record_operator;
string temp = &quot;&quot;;
for(int i=0; i&lt;expression.length(); i++){
    if(expression[i] &gt;= &#39;0&#39; &amp;&amp; expression[i] &lt;= &#39;9&#39;) temp += expression[i];
    else{
        record_operator.push_back(expression[i]);
        // string을 longlong으로 바꿔주는 stoll함수
        record_operand.push_back(stoll(temp));
        temp = &quot;&quot;;
    }
}
record_operand.push_back(stoll(temp));

vector&lt;int&gt; perm = {0, 1, 2};
string op = &quot;+-*&quot;;
do{
    vector&lt;long long&gt; temp_operand = record_operand;
    vector&lt;char&gt; temp_operator = record_operator;

    for(int i=0; i&lt;perm.size(); i++){
        for(int j=0; j&lt;temp_operator.size();){
            if(temp_operator[j] == op[perm[i]]){
                // j번째의 operator는 사실상 j번째 수와 j+1번째 수의 op 이기 때문에
                long long res = calculate(temp_operand[j], temp_operand[j+1], temp_operator[j]);

                // j번째 수를 사용하였으니 그 수를 제거함
                temp_operand.erase(temp_operand.begin()+j);
                // j번째수를 제거하면 j+1번째 수가 j번째 수가 되고 이또한 제거해야하므로 한번 더 반복
                temp_operand.erase(temp_operand.begin()+j);
                // 합한 수를 다시 넣어주기
                temp_operand.insert(temp_operand.begin()+j,res);
                // 사용한 operator삭제
                temp_operator.erase(temp_operator.begin()+j);
            }
            else j++;
        }
    }
    answer = max(answer, abs(temp_operand[0]));
    // 순열을 사용하기!!
}while(next_permutation(perm.begin(), perm.end()));
return answer;</code></pre><p>}</p>
<p>```</p>
<h2 id="소감">소감</h2>
<p>나는 해결하지 못하여 다른 분의 풀이를 보고 공부하였다. 먼저 문자열과 연산자만 추출하는 부분을 보고 배웠다. 또한 next_permutation을 처음에는 어떻게 사용하는지 몰랐는데 이제 어떻게 사용해야하는지 확실히 알게되었다..... 더 집중해서 열심히하겠씁니다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[프로그래머스 - 뉴스 클러스터링 - Level 2 ]]></title>
            <link>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%89%B4%EC%8A%A4-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0%EB%A7%81-Level-2</link>
            <guid>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%89%B4%EC%8A%A4-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0%EB%A7%81-Level-2</guid>
            <pubDate>Fri, 02 Jul 2021 02:02:03 GMT</pubDate>
            <description><![CDATA[<h2 id="문제">문제</h2>
<p><img src="https://images.velog.io/images/gomster_96/post/418cb934-f072-4242-82a6-152329f487a3/image.png" alt="">
<img src="https://images.velog.io/images/gomster_96/post/01d85a12-5959-4cdb-8f72-d23a5f03091b/image.png" alt=""></p>
<h2 id="풀이전략">풀이전략</h2>
<ol>
<li>입력으로 들어온 문자열을 두 글자씩 잘라서 다중 집합을 만들기</li>
<li>특수문자, 공백, 숫자가 들어오면 그 문자열을 버리기. 즉 매번 2글자씩 자를때마다 확인을 해야함<h2 id="코드">코드</h2>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;vector&gt;
using namespace std;
</code></pre>
</li>
</ol>
<p>int solution(string str1, string str2) {
    int answer = 0;
    vector<string> A;
    vector<string> B;
    // str1을 2개씩 자른 문자열로 만들어서 A에 넣어주기
    for(int i=0; i&lt;str1.length()-1; i++){
        string tmp = str1.substr(i, 2);
        bool flag = true;
        for(int j=0; j&lt;2; j++){
               // 소문자인 부분을 대문자로 바꿔주는 것
            if(tmp[j] &gt;= 97 &amp;&amp; tmp[j] &lt;=122){
                tmp[j] = tmp[j] - 32;
            }<br>            // 영어가 아닐경우 flag를 false로 바꿔준다.
            else if(!(tmp[j] &gt;= 65 &amp;&amp; tmp[j] &lt;90)){
                flag = false;
                break;
            }
        }
        // 영어일경우 A라는 벡터에 넣어준다.
        if(flag){
           A.push_back(tmp); 
        } 
    }
    // str2을 2개씩 자른 문자열로 만들어서 B에 넣어주기
    for(int i=0; i&lt;str2.length()-1; i++){
        string tmp = str2.substr(i, 2);
        bool flag = true;
        for(int j=0; j&lt;2; j++){
            if(tmp[j] &gt;= 97 &amp;&amp; tmp[j] &lt;=122){
                tmp[j] = tmp[j] - 32;
            }<br>            else if(!(tmp[j] &gt;= 65 &amp;&amp; tmp[j] &lt;90)){
                flag = false;
                break;
            }
        }</p>
<pre><code>    if(flag){
        B.push_back(tmp); 
    } 
}
// 만약 A와 B가 둘다 공집합이라면 65536을 return해준다.
if(A.size() == 0 &amp;&amp; B.size() == 0) return 65536;
int cnt = 0;
// 두 문자열을 서로 비교해가며 같은 것의 갯수만 찾는다. 교집합의 갯수
for(int i=0; i&lt;A.size(); i++){
    for(int j=0; j&lt;B.size(); j++){
        if(A[i] == B[j]){
            cnt++;
            B[j] = &quot; &quot;;
            break;
        } 
    }
}
// 합집합은 n(A) + n(B) - n(A 교집합 B) 이므로 이를 이용하여 해결한다. 
answer = (int)((float)cnt / (float)(A.size() + B.size() - cnt) * 65536);
// printf(&quot;%d %d %d %d\n&quot;,&#39;A&#39;,&#39;Z&#39;,&#39;a&#39;,&#39;z&#39;);
return answer;</code></pre><p>}</p>
<pre><code>
## 다른분 코드
```cpp
//string을 소문자로 바꿔주는 스킬이다.
transform(str1.begin(), str1.end(), str1.begin(), ::tolower);
transform(str2.begin(), str2.end(), str2.begin(), ::tolower);</code></pre><h2 id="소감">소감</h2>
<p>흠.. 문제는 잘 해결하였으나.. 마지막에 두 문자열을 확인하여 교집합을 구할 때 O(n^2)이 되었다. O(n)으로 해결 할 수는 없으려나... 많은 천재분들은 O(n)으로도 해결하셨지만 나는 아직 부족한것 같다. 좀더 노력해야겠다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[프로그래머스 - 문자열 압축 - Level 2 ]]></title>
            <link>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%AC%B8%EC%9E%90%EC%97%B4-%EC%95%95%EC%B6%95-Level-2</link>
            <guid>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%AC%B8%EC%9E%90%EC%97%B4-%EC%95%95%EC%B6%95-Level-2</guid>
            <pubDate>Thu, 01 Jul 2021 14:22:25 GMT</pubDate>
            <description><![CDATA[<h2 id="문제">문제</h2>
<p><img src="https://images.velog.io/images/gomster_96/post/8f245fe2-e9a7-4b4f-a367-8d0f8a508c6c/image.png" alt=""></p>
<h2 id="풀이전략">풀이전략</h2>
<ol>
<li>문자열은 제일 앞부터 정해진 길이만큼 잘라야한다. 따라서 맨 앞부터 자를 수 없다면 문자열은 그냥 자를 수 없다. </li>
<li>길이만큼 자르면서 substr함수를 사용하는데, 이 함수를 잘 사용할 수 있도록 노력해야한다. <h2 id="코드">코드</h2>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
using namespace std;

</code></pre>
</li>
</ol>
<p>int solution(string s){
    int answer = s.size();</p>
<pre><code>for(int i=1; i&lt;=s.size()/2; i++){
    string convert, temp;

    int cnt = 1;
    // 비교해야할 부분에 대한 체크, 또한 문제에서 제시했듯이 첫번쨰 index부터 비교해야함
    temp = s.substr(0,i);

    // 비교할 부분 다음부터의 확인
    // j는 비교하는 크기만큼 사이즈를 증가시킴
    for(int j=i; j&lt;s.size(); j+=i){
        // 비교부분과 같다면 cnt++함
        if(temp == s.substr(j,i)) cnt++;
        else{
            // 더이상 비교부분과 같은 값이 없을떄
            if(cnt&gt;1) convert += to_string(cnt);
            convert += temp;
            // 이후 temp는 그다음 부분으로 넘어간다
            temp = s.substr(j, i);
            cnt = 1;
        }
    }

    if(cnt &gt;1) convert += to_string(cnt);
    convert += temp;
    printf(&quot;%s\n&quot;,convert.c_str());
    if(convert.size() &lt; answer) answer = convert.size();


}
return answer;</code></pre><p>}</p>
<p>```</p>
<h2 id="소감">소감</h2>
<p>내가 해결하지 못하고 다른분의 코드를 가져왔다... substr을 아직 잘 사용하지 못하는거 같다. 다른분이 substr을 너무 멋있게 사용하셨다. 나도 이렇게 사용하는 법을 배워야겠다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[프로그래머스 - 짝지어 제거하기 - Level 2 ]]></title>
            <link>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A7%9D%EC%A7%80%EC%96%B4-%EC%A0%9C%EA%B1%B0%ED%95%98%EA%B8%B0-Level-2</link>
            <guid>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A7%9D%EC%A7%80%EC%96%B4-%EC%A0%9C%EA%B1%B0%ED%95%98%EA%B8%B0-Level-2</guid>
            <pubDate>Thu, 01 Jul 2021 13:34:55 GMT</pubDate>
            <description><![CDATA[<h2 id="문제">문제</h2>
<p><img src="https://images.velog.io/images/gomster_96/post/0367b0ee-5bef-4d76-b997-b7a4a84e48bb/image.png" alt=""></p>
<h2 id="풀이전략">풀이전략</h2>
<ol>
<li>스택을 사용해서 풀어야하는 문제이다. 스택의 top과 순차적으로 제거해주며 풀어주면 된다. <h2 id="코드">코드</h2>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include&lt;string&gt;
#include&lt;stack&gt;
using namespace std;
</code></pre>
</li>
</ol>
<p>int solution(string s)
{
    int answer = -1;</p>
<pre><code>stack&lt;char&gt; st;
for(int i=0; i&lt;s.length(); i++){

    if(st.empty()) st.push(s[i]);
    else{
        char ret = st.top();
        if(ret == s[i]){
            st.pop();
        }
        else st.push(s[i]);
    }  
}
if(st.empty()) answer = 1;
else answer = 0;

return answer;</code></pre><p>}</p>
<p>```</p>
<h2 id="소감">소감</h2>
<p>전형적인 스택문제이다. 어떻게 푸는지만 알아두자. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[프로그래머스 - 오픈채팅방 - Level 2 ]]></title>
            <link>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%98%A4%ED%94%88%EC%B1%84%ED%8C%85%EB%B0%A9-Level-2</link>
            <guid>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%98%A4%ED%94%88%EC%B1%84%ED%8C%85%EB%B0%A9-Level-2</guid>
            <pubDate>Thu, 01 Jul 2021 13:31:28 GMT</pubDate>
            <description><![CDATA[<h2 id="문제">문제</h2>
<p><img src="https://images.velog.io/images/gomster_96/post/cba132eb-9920-48b8-9dcd-321ae683eb49/image.png" alt="">
<img src="https://images.velog.io/images/gomster_96/post/a91fc828-e4a8-4c3b-b059-563c1cd72991/image.png" alt=""></p>
<h2 id="풀이전략">풀이전략</h2>
<ol>
<li><p>문제에서 중요한 것은 변하는 것과 변하지 않는 것이다. 변하는 것은 닉네임이고 변하지 않는것은 Id이다. 따라서 Id를 저장해 놓는 벡터를 하나 만들어 놓고, Id는 계속 변하므로 Id를 또 따로 저장해두어야 한다.</p>
</li>
<li><p>Id를 저장할때 unordered_map을 사용하는 것이 효율적이다. O(1)로 바로 접근할 수 있기 때문이다. </p>
</li>
<li><p>C++은 문자열을 split하는 함수가 따로 있지는 않다. 따라서 다른 곳에서 함수로 가져왔는데... 이를 반드시 정리해두어서 코딩테스트에 사용할 수 있도록 해야겠다. </p>
<h2 id="코드">코드</h2>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;unordered_map&gt;
#include &lt;sstream&gt;
#include &lt;utility&gt;
using namespace std;
// 문자열을 split하는 방법, sstream을 사용한다.
vector&lt;string&gt; split(string input, char delimiter) {

 vector&lt;string&gt; answer;
 stringstream ss(input);
 string temp;

 while (getline(ss, temp, delimiter)) {
     answer.push_back(temp);
 }

 return answer;
}
</code></pre>
</li>
</ol>
<p>vector<string> solution(vector<string> record) {
    vector<string> answer;
    // unordered_map으로 닉네임들을 정리한다.
    unordered_map&lt;string, string&gt; urd;
    // pair형 vector로 지금까지 오간 id들을 정리한다. 
    vector&lt;pair&lt;string, int&gt; &gt; roomSeq;</p>
<pre><code>for(int i=0; i&lt;record.size(); i++){
    // split을 하여 해동, id, 닉네임 으로 나눈다.
    vector&lt;string&gt; tmp = split(record[i], &#39; &#39;);

    // change가 아닐 경우이다. 
    if(tmp.size() == 3){
        // leave가 있다는것을 생각하지 못함.... 제대로 보고 하기
        // 해당 id가 존재할 경우 unordred_map에 적힌 닉네임을 바꿔주었다. 
        if(urd.count(tmp[1])){
            urd[tmp[1]] = tmp[2];
        } 
        else{
        // 해당 id가 없을 경우 새롭게 추가해주었다.
            urd.insert(make_pair(tmp[1], tmp[2]));

        }     
    }


    // Enter인지 Leave인지 구별해주는 변수
    int flag = 0;
    if(tmp[0] == &quot;Enter&quot;) flag = 1;
    else if(tmp[0] == &quot;Leave&quot;) flag = -1;
    // change일 경우 더 이상 필요가 없을 경우 패스한다. 
    else continue;

    roomSeq.push_back(make_pair(tmp[1], flag));


}
for(int i=0; i&lt;roomSeq.size(); i++){
    string s;
    if(roomSeq[i].second == 1){
        s = urd[roomSeq[i].first] + &quot;님이 들어왔습니다.&quot;;
    }
    else{
        s = urd[roomSeq[i].first] + &quot;님이 나갔습니다.&quot;;
    }
    answer.push_back(s);
}
return answer;</code></pre><p>}</p>
<p>```</p>
<h2 id="소감">소감</h2>
<p>unordered_map과 vector를 같이 쓰면서 서로 비교해가는 문제가 흥미로웠다. 또한 c++에서 split하는 법을 꼭 알아두어야한다. unordered_map을 사용하는 매우 좋은 문제였으므로 잘 기억해서 복습하자. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[프로그래머스 - 디스크 컨트롤러 - Level 3 ]]></title>
            <link>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%94%94%EC%8A%A4%ED%81%AC-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC-Level-3</link>
            <guid>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%94%94%EC%8A%A4%ED%81%AC-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC-Level-3</guid>
            <pubDate>Thu, 01 Jul 2021 13:17:26 GMT</pubDate>
            <description><![CDATA[<h2 id="문제">문제</h2>
<p><img src="https://images.velog.io/images/gomster_96/post/7d51bf97-24eb-4126-9fbb-6fafa4937f32/image.png" alt="">
<img src="https://images.velog.io/images/gomster_96/post/f82b4d82-3bd8-4053-ac90-8b2230cb49aa/image.png" alt=""></p>
<h2 id="풀이전략">풀이전략</h2>
<ol>
<li>priority_queue를 내가 원하는 우선순위에 따라 바꿔주어야한다. 따라서 몰랐던 방법인 priority_queue&lt;vector<int>, vector&lt;vector<int>&gt;, cmp&gt; pq; 이 방법을 확실하게 익히자. 이는 오름차순 정렬이다. </li>
</ol>
<h2 id="코드">코드</h2>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;queue&gt;
#include &lt;algorithm&gt;

using namespace std;

struct cmp{
    bool operator()(vector&lt;int&gt; a, vector&lt;int&gt; b){
        return a.at(1) &gt; b.at(1);
    }
};

int solution(vector&lt;vector&lt;int&gt;&gt; jobs){
    int answer = 0, j = 0, time = 0;
    // 이렇게 할 경우 요청이 빠른 순으로 정렬 된다.
    sort(jobs.begin(), jobs.end());
    // 내가 원하는 방향대로 priority_queue를 sort할 수 있도록 하는 방법이다.
    priority_queue&lt;vector&lt;int&gt;, vector&lt;vector&lt;int&gt;&gt;, cmp&gt; pq;
    while(j &lt; jobs.size() || !pq.empty()){
        // 새로운 일을 넣을 수 있는 시간이 되었을 때
        if(jobs.size() &gt; j &amp;&amp; time &gt;= jobs[j][0]){
            pq.push(jobs[j++]);
            continue;
        }
        if(!pq.empty()){
            // priority_queue에 제일 앞에 위치한 친구를 빼는 과정 즉 소요시간이 적은 순으로 배열, 그 값의 top을 time에 더해준다. 
            time += pq.top()[1];
            // answer에 현재시간 - 들어간 시간을 넣어준다. 이것이 즉 소요시간이다.
            answer += time - pq.top()[0];
            pq.pop();
        }
        // 큐가 비어있고, 시간이 아직 다음 job에 도달하지 않았을 경우 도달하기 위해 jobs[j][0]으로 시간을 바꿔준다. 
        else time = jobs[j][0];
    }
    return answer/jobs.size();
}</code></pre>
<h2 id="소감">소감</h2>
<p>  Priority_Queue를 내가 원하는 방법에 따라 정렬하는 방법을 몰랐다. 이번에 확실하게 알았으니 잘 복습하도록 해야겠다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[프로그래머스 - 다리를 지나는 트럭 - Level 2 ]]></title>
            <link>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%8B%A4%EB%A6%AC%EB%A5%BC-%EC%A7%80%EB%82%98%EB%8A%94-%ED%8A%B8%EB%9F%AD-Level-2</link>
            <guid>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%8B%A4%EB%A6%AC%EB%A5%BC-%EC%A7%80%EB%82%98%EB%8A%94-%ED%8A%B8%EB%9F%AD-Level-2</guid>
            <pubDate>Thu, 01 Jul 2021 13:02:14 GMT</pubDate>
            <description><![CDATA[<h2 id="문제">문제</h2>
<p><img src="https://images.velog.io/images/gomster_96/post/d0f0de03-b920-4986-9e68-df3785e5d887/image.png" alt=""></p>
<h2 id="풀이전략">풀이전략</h2>
<ol>
<li>이 문제에서 조건은 크게 무게와 시간, 트럭의 길이를 알아야한다. 최단 시간을 만들려면 최대한 많은 양의 트럭을 건너게 해야한다.</li>
<li>다리에 올라가 있는 트럭을 큐에 넣어주고, 트럭 무게의 총합을 변수에 저장, 길이의 총합은 큐의 사이즈, 이것들을 이용하여 문제를 해결해준다. <h2 id="코드">코드</h2>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;queue&gt;
#include &lt;utility&gt;
using namespace std;
</code></pre>
</li>
</ol>
<p>int solution(int bridge_length, int weight, vector<int> truck_weights) {
    int answer = 0;
    int time = 0;
    queue&lt;pair&lt;int ,int&gt; &gt; q;
    int i = 0;
    int weightSum = 0;
    while(1){
        // 트럭이 올라설때 마다 시간을 증가시켜준다. 
        time++;<br>        // pair의 첫번째에는 차의 무게, 두번째에는 들어온 시간을 저장한다. </p>
<pre><code>    if(!q.empty()){
        pair&lt;int, int&gt; ret = q.front();
        // 트럭이 나가야 할 시간이면 pop해준다. 
        if(time - ret.second &gt;= bridge_length){
            q.pop();
            weightSum -= ret.first;    
            printf(&quot;%d %d %d\n&quot;,ret.first, ret.second,time);
        }    
    }

    if(q.empty() &amp;&amp; i == truck_weights.size()) break;
    // truck을 도로에 추가할 수 있을때
    if(i &lt; truck_weights.size() &amp;&amp; (weightSum + truck_weights[i] &lt;= weight) &amp;&amp; q.size() &lt; bridge_length){
        // 트럭 무게합을 구해준다.
        weightSum += truck_weights[i];
        // 시간과 무게를 pair형으로 넣어준다.
        q.push(make_pair(truck_weights[i], time));
        // i를 증가시켜 다음 트럭을 확인한다. 
        i++;
    }


}

return time;</code></pre><p>}</p>
<p>```</p>
<h2 id="소감">소감</h2>
<p>시간과 같이 비교해가면서 큐에 넣고 값을 찾아가는 과정이 인상적이였다. 문제를 풀때 시간을 맞추는것이 너무 힘들었다. 잘 집중해서 다시한번 복습하자. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[프로그래머스 - 프린터 - Level 2]]></title>
            <link>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%ED%94%84%EB%A6%B0%ED%84%B0-Level-2</link>
            <guid>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%ED%94%84%EB%A6%B0%ED%84%B0-Level-2</guid>
            <pubDate>Thu, 01 Jul 2021 12:51:23 GMT</pubDate>
            <description><![CDATA[<h2 id="문제">문제</h2>
<p><img src="https://images.velog.io/images/gomster_96/post/f84a70b6-437c-479d-a634-ffec28fae5c6/image.png" alt=""></p>
<h2 id="풀이전략">풀이전략</h2>
<ol>
<li>문제에서 주어진대로 뽑은 문제보다 중요도가 높은 문서가 하나라도 존재하면 그것을 맨 마지막에 넣어야한다. 즉 큐를 사용해야한다. </li>
<li>pair자료형을 사용하여 값과 위치를 처리하고, vector는 sort하여 중요도가 높은 순을 계산한다. <h2 id="코드">코드</h2>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
#include &lt;queue&gt;
#include &lt;utility&gt;
using namespace std;
</code></pre>
</li>
</ol>
<p>// 크기순으로 정렬하기위해 함수를 만든 것
bool mySort(int&amp; a, int&amp; b){
    return a&gt; b;
}</p>
<p>int solution(vector<int> priorities, int location) {
    int answer = 0;
    // pair형으로 중요도와 위치를 저장한다. 
    queue&lt;pair&lt;int, int&gt; &gt; q;
    for(int i=0; i&lt;priorities.size(); i++){
        q.push(make_pair(priorities[i], i));
    }
    // 중요도가 높은 순을 알아야하기 때문에 sort한다. 
    sort(priorities.begin(), priorities.end(), mySort);</p>
<pre><code>for(int i=0; i&lt;priorities.size(); ){
    pair&lt;int, int&gt; ret = q.front();
    q.pop();
    if(priorities[i] == ret.first){
        // 중요도순으로 확인한다. 
        if(ret.second == location ) return i+1;
        i++;
    }
    // 중요도가 아닐경우 다시 뒤에 위치시킨다. 
    else q.push(ret);
}
return 0;</code></pre><p>}</p>
<p>```</p>
<h2 id="소감">소감</h2>
<p>정말 기본적인 큐 문제이다. 한번 쭉 읽으면서 사용하자. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[프로그래머스 - 기능개발 - Level 2 ]]></title>
            <link>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EA%B8%B0%EB%8A%A5%EA%B0%9C%EB%B0%9C-Level-2</link>
            <guid>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EA%B8%B0%EB%8A%A5%EA%B0%9C%EB%B0%9C-Level-2</guid>
            <pubDate>Thu, 01 Jul 2021 12:42:55 GMT</pubDate>
            <description><![CDATA[<h2 id="문제">문제</h2>
<p><img src="https://images.velog.io/images/gomster_96/post/a3690127-3397-40da-bfc3-8502f48e534d/image.png" alt=""></p>
<h2 id="풀이전략">풀이전략</h2>
<ol>
<li>배포는 하루에 한번씩만 한다. 단 뒤에 있는 기능은 앞에 있는 기능이 다 배포가 되었을 경우 배포가 가능하다. 즉 앞에 일이 다 끝나야 뒤에 일을 해결할 수 있다.</li>
</ol>
<h2 id="코드">코드</h2>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;vector&gt;

using namespace std;

vector&lt;int&gt; solution(vector&lt;int&gt; progresses, vector&lt;int&gt; speeds) {
    vector&lt;int&gt; answer;
    // 전체 시간으로 각 작업들의 속도와 비교할수 있다. 
    int time = 0;
    int res = 0;
    for(int i=0; i&lt;progresses.size(); i++){
        // 작업이 100이 넘었는지 아닌지를 체크함
        // 만약 넘었을 경우 res를 증가시킴
        if(progresses[i]+time*speeds[i] &gt;= 100){

            res++;
        }
        else{
            if(i != 0){
                printf(&quot;%d %d %d\n&quot;,time,res, i);
                // 이후 res값을 answer에 넣음. 즉 작업 완료된 개수를 넣기
                answer.push_back(res);
                res = 0;
            } 
            // 다음 작업이 완료될때까지 시간을 늘림
            while(progresses[i]+time*speeds[i] &lt; 100){
                time++;
            }    
            // 작업 하나가 완료되었으므로 res++을 해줌. 
            res++;
        }
    }
    if(res != 0) answer.push_back(res);
    return answer;
}</code></pre>
<h2 id="소감">소감</h2>
<p>큐를 사용하지 않고, 문제를 해결한 것. 사실 단순한 문제였으므로 그냥 한번 쭉 읽어만 보자. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[프로그래머스 - 베스트앨범 - Level 3 ]]></title>
            <link>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%B2%A0%EC%8A%A4%ED%8A%B8%EC%95%A8%EB%B2%94-Level-3</link>
            <guid>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%B2%A0%EC%8A%A4%ED%8A%B8%EC%95%A8%EB%B2%94-Level-3</guid>
            <pubDate>Mon, 28 Jun 2021 12:11:02 GMT</pubDate>
            <description><![CDATA[<h2 id="문제">문제</h2>
<p><img src="https://images.velog.io/images/gomster_96/post/25215515-b116-4501-8c5e-95ebbfa855d2/image.png" alt=""></p>
<h2 id="풀이전략">풀이전략</h2>
<ol>
<li>어떤 장르가 가장 많은지, 그 장르들 중에 무엇이 제일 큰지를 알아야한다. 따라서 전체 노래 재생된 횟수의 따라 sort를 하고, 같은 장르중에 또 크기별로 따로 sort해야한다.</li>
<li>구조체를 선언하여 장르를 구분하고, 구조체 내부에 또 vector를 선언하여 각 장르마다 몇개의 어떤 index의 play가 제일 큰지 또 한번 정렬을 해야한다. <h2 id="코드">코드</h2>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;utility&gt;
#include &lt;algorithm&gt;
using namespace std;
// 구조체를 선언했다. 보면 whole은 전체 플레이횟수를 저장한다. 
// playId는 벡터로, 횟수와 index가 저장된다. 
struct song{
 string genre;
 vector&lt;pair&lt;int, int&gt; &gt; playId; 
 int whole;
 song(string a, int b, int c, int d){
     genre = a;
     playId.push_back(make_pair(b, c));
     whole = d;
 }
 // 이 구조체는 whole이 큰 순으로 정렬하도록 만들었다. 
 bool operator&lt;(const song&amp; otherSong) const{
     return whole&gt;otherSong.whole;
 }
};
// 같은 장르 내에서 재생횟수가 높은 index순으로 정렬
// 만약 재생횟수가 같다면, 더 index가 빠른 순으로 정렬함
bool mySort(pair&lt;int, int&gt; a, pair&lt;int, int&gt; b){
 if(a.first == b.first) return a.second &lt; b.second;
 return a.first &gt; b.first;
}
</code></pre>
</li>
</ol>
<p>vector<int> solution(vector<string> genres, vector<int> plays) {
    vector<int> answer;
    vector<song> s;
    // song벡터에 값을 넣는 과정
    for(int i=0; i&lt;genres.size(); i++){
        // 해당하는 장르가 이미 생성 되었는지 아닌지를 체크하는 flag
        bool flag = true;
        for(int j=0; j&lt;s.size(); j++){
            if(s[j].genre == genres[i]){
                flag = false;
                s[j].playId.push_back(make_pair(plays[i],i));
                // 어떤 장르가 가장 많이 재생되었는지를 체크하는 whole
                s[j].whole += plays[i];
            }
        }
        // 새로운 장르일경우 push_back해준다. 
        if(flag) s.push_back(song(genres[i], plays[i], i, plays[i]));
    }
    sort(s.begin(), s.end());
    for(int i=0; i&lt;s.size(); i++){
        sort(s[i].playId.begin(), s[i].playId.end(), mySort);
        for(int j=0; j&lt;=1; j++){
            if(j == s[i].playId.size()) break;
            answer.push_back(s[i].playId[j].second);
        }
    }
    return answer;
}</p>
<pre><code>
## 다른분 코드
```cpp
// 나는 여전히 unorderd_map 사용에 능숙하지 못하다. 
#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;unordered_map&gt;
#include &lt;algorithm&gt;
#include &lt;utility&gt;

using namespace std;
// 장르 내에서 무엇이 많이 재생되었는지 비교해주는 함수이다. 
bool compare (pair&lt;int, int&gt; left, pair&lt;int, int&gt; right){
    if(left.first &gt; right.first){
        return true;
    }else if(left.first == right.first){
        if(left.second &lt; right.second){
            return true;
        }
    }
    return false;
}

vector&lt;int&gt; solution(vector&lt;string&gt; genres, vector&lt;int&gt; plays) {
    vector&lt;int&gt; answer;
    // 어떤 장르가 가장 많이 재생되었는지를 확인하기위한 맵
    unordered_map&lt;string, int&gt; summap;
    // 각 장르마다 어떤 index의 곡이 많이 재생되었는지를 확인하기 위한 맵
    unordered_map&lt;string, vector&lt;pair&lt;int, int&gt;&gt;&gt; genmap;
    // 이 과정이 어떻게 보면 비 효율적으로 보이지만 O(n)으로 해결할 수 있는 방법이다.
    for (int i = 0; i &lt; genres.size(); i++) {
        summap[genres[i]] += plays[i];
        genmap[genres[i]].push_back(make_pair(plays[i], i));
    }
    // O(n)으로 해결하기위해 비 효율적으로 메모리를 사용했지만 그래도 빠르니까 .... 
    vector&lt;pair&lt;int, string&gt;&gt; fororder;
    for (auto x : summap) {
        fororder.push_back(make_pair(x.second, x.first));
    }
    sort(fororder.begin(), fororder.end());
    while (fororder.size() &gt; 0) {
        pair&lt;int, string&gt; temp= fororder.back();
        fororder.pop_back();
        vector&lt;pair&lt;int, int&gt;&gt; a = genmap[temp.second];
        sort(a.begin(), a.end(), compare);
        int lastn = 2;
        if (a.size() &lt; 2) {
            lastn = a.size();
        }
        for (int i = 0; i &lt; lastn; i++) {
            answer.push_back(a[i].second);
        }
    }

    return answer;
}</code></pre><h2 id="소감">소감</h2>
<p>여러개의 값들을 비교하면서 또 탐색을 해야해서 인상적이였던 문제였다. unordered_map을 사용하는 다른 분의 풀이도 잘 알아둬야한다. 내 풀이는 너무 sort함수를 많이 사용하였다고 생각하기 때문이다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[프로그래머스 - 위장 - Level 2 ]]></title>
            <link>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%9C%84%EC%9E%A5-Level-2</link>
            <guid>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%9C%84%EC%9E%A5-Level-2</guid>
            <pubDate>Sat, 26 Jun 2021 12:07:48 GMT</pubDate>
            <description><![CDATA[<h2 id="문제">문제</h2>
<p><img src="https://images.velog.io/images/gomster_96/post/63ee88a4-5743-4241-8c87-5290ed5b5e25/image.png" alt=""></p>
<h2 id="풀이전략">풀이전략</h2>
<ol>
<li>결국 한 종류의 옷을 입건 말거나이다. 따라서 먼저 같은 카테고리의 옷은 더해주어 모든 카테고리의 갯수를 찾고, 이를 모두 곱해주고 1을 빼준다. 여기서 1을 빼주는 것은 모든 것을 입지 않을 경우이다. <h2 id="코드">코드</h2>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;unordered_map&gt;
#include &lt;utility&gt;
using namespace std;
</code></pre>
</li>
</ol>
<p>int solution(vector&lt;vector<string>&gt; clothes) {
    int answer = 1;
    unordered_map&lt;string,int&gt; ump;</p>
<pre><code>for(int i=0; i&lt;clothes.size(); i++){
    ump[clothes[i][1]] += 1;
}
for(pair&lt;string, int&gt; p: ump){
    answer *= (p.second + 1);
}

return answer-1;</code></pre><p>}</p>
<pre><code></code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[프로그래머스 - 전화번호 목록 - Level 2]]></title>
            <link>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A0%84%ED%99%94%EB%B2%88%ED%98%B8-%EB%AA%A9%EB%A1%9D-Level-2</link>
            <guid>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A0%84%ED%99%94%EB%B2%88%ED%98%B8-%EB%AA%A9%EB%A1%9D-Level-2</guid>
            <pubDate>Sat, 26 Jun 2021 11:59:11 GMT</pubDate>
            <description><![CDATA[<h2 id="문제">문제</h2>
<p><img src="https://images.velog.io/images/gomster_96/post/92f9a23c-2bec-4328-8b8e-7d0cc4c02e92/image.png" alt=""></p>
<h2 id="풀이전략">풀이전략</h2>
<ol>
<li>어떤 번호가 다른번호의 접두어인지를 찾아야한다.</li>
<li>string 하나씩 다른것들과 비교하면 된다. 이때 unorderd_map 을 사용하면 더 편리하다. <h2 id="코드">코드</h2>
나의 개인적으로 깔끔하지 않다고 생각하기 때문에 다른분의 코드로 적겠다.</li>
</ol>
<h2 id="다른분-코드">다른분 코드</h2>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;vector&gt;
#include&lt;unordered_map&gt;
using namespace std;

bool solution(vector&lt;string&gt; phone_book){
    unordered_map&lt;string, int&gt; hash_map;

    for(int i=0; i&lt;phone_book.size(); i++){
        hash_map[phone_book[i]] = 1;
    }

    for(int i=0; i&lt;phone_book.size(); i++){
        string phone_number = &quot;&quot;;
        for(int j=0; j&lt;phone_book[i].size(); j++){
            phone_number += phone_book[i][j];
            // 각 부분마다 확인하여 접두사인지 아닌지를 체크한다.
            if(hash_map[phone_number] &amp;&amp; phone_number != phone_book[i]) return false;
        }
    }
    return true;
}</code></pre>
<h2 id="소감">소감</h2>
<p>unorderd_map 이라는 새로운 데이터구조에대하여 배웠다. 내 블로그에 따로 정리해 두었으니 이를 잊지말고 활용해야겠다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[프로그래머스 - 완주하지 못한 선수 - Level 1 ]]></title>
            <link>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%99%84%EC%A3%BC%ED%95%98%EC%A7%80-%EB%AA%BB%ED%95%9C-%EC%84%A0%EC%88%98-Level-1</link>
            <guid>https://velog.io/@gomster_96/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%99%84%EC%A3%BC%ED%95%98%EC%A7%80-%EB%AA%BB%ED%95%9C-%EC%84%A0%EC%88%98-Level-1</guid>
            <pubDate>Sat, 26 Jun 2021 08:23:55 GMT</pubDate>
            <description><![CDATA[<h2 id="문제">문제</h2>
<p><img src="https://images.velog.io/images/gomster_96/post/476c205a-31b0-4ab8-be0e-0508216beb74/image.png" alt=""></p>
<h2 id="풀이전략">풀이전략</h2>
<ol>
<li>완주하지 못한 선수는 단 한명이다. 따라서 participant와 completion을 둘다 sort해주고 하나씩 비교해가며 다른게 ㄱ있을경우 그냥 그것이 답이다.<h2 id="코드">코드</h2>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
using namespace std;
</code></pre>
</li>
</ol>
<p>string solution(vector<string> participant, vector<string> completion) {
    string answer = &quot;&quot;;
    sort(participant.begin(), participant.end());
    sort(completion.begin(), completion.end());
    int i;
    for(i=0; i&lt;completion.size(); i++){
        if(participant[i] != completion[i]) break;
    }
    answer = participant[i];
    return answer;
}</p>
<p>```</p>
<h2 id="소감">소감</h2>
<p>매우쉬움</p>
]]></description>
        </item>
    </channel>
</rss>