Jekyll2023-09-04T16:10:08+00:00https://doky.space/feed.xmlDoky.SpaceDokyoon's Space #dev #diary[STL] Hash2023-05-11T01:41:00+00:002023-05-11T01:41:00+00:00https://doky.space/stl/2023/05/11/stl03<h2 id="hash-함수-직접-구현하기">Hash 함수 직접 구현하기</h2>
<div class="language-c++ highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include <iostream>
#include <string>
</span><span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span>
<span class="cp">#define MOD 23124
</span>
<span class="kt">int</span> <span class="n">Hash</span><span class="p">[</span><span class="n">MOD</span><span class="p">];</span>
<span class="kt">long</span> <span class="kt">long</span> <span class="n">hash_store</span><span class="p">[</span><span class="n">MOD</span><span class="p">];</span>
<span class="kt">int</span> <span class="nf">hash_key</span><span class="p">(</span><span class="n">string</span> <span class="n">str</span><span class="p">){</span>
<span class="c1">// 키 생성</span>
<span class="kt">long</span> <span class="kt">long</span> <span class="n">key</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">str</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">!=</span> <span class="sc">'\0'</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
<span class="n">key</span> <span class="o">=</span> <span class="p">(</span><span class="n">key</span> <span class="o"><<</span> <span class="mi">5</span><span class="p">)</span> <span class="o">+</span> <span class="n">str</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">-</span> <span class="sc">'a'</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span>
<span class="c1">// 키 배치</span>
<span class="kt">int</span> <span class="n">pos</span> <span class="o">=</span> <span class="n">key</span> <span class="o">%</span> <span class="n">MOD</span><span class="p">;</span>
<span class="k">while</span><span class="p">(</span><span class="n">hash_store</span><span class="p">[</span><span class="n">pos</span><span class="p">]</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">){</span> <span class="c1">// 비어있는 공간 나올때까지 탐색</span>
<span class="k">if</span><span class="p">(</span><span class="n">hash_store</span><span class="p">[</span><span class="n">pos</span><span class="p">]</span> <span class="o">==</span> <span class="n">key</span><span class="p">)</span> <span class="c1">// 키를 찾은 경우 탈출</span>
<span class="k">break</span><span class="p">;</span>
<span class="n">pos</span> <span class="o">=</span> <span class="p">(</span><span class="n">pos</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="n">MOD</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">hash_store</span><span class="p">[</span><span class="n">pos</span><span class="p">]</span> <span class="o">=</span> <span class="n">key</span><span class="p">;</span>
<span class="k">return</span> <span class="n">pos</span><span class="p">;</span>
<span class="p">}</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">(){</span>
<span class="n">Hash</span><span class="p">[</span><span class="n">hash_key</span><span class="p">(</span><span class="s">"aaa"</span><span class="p">)]</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
<span class="n">Hash</span><span class="p">[</span><span class="n">hash_key</span><span class="p">(</span><span class="s">"bbb"</span><span class="p">)]</span> <span class="o">=</span> <span class="mi">5</span><span class="p">;</span>
<span class="n">Hash</span><span class="p">[</span><span class="n">hash_key</span><span class="p">(</span><span class="s">"ccc"</span><span class="p">)]</span> <span class="o">=</span> <span class="mi">10</span><span class="p">;</span>
<span class="n">cout</span> <span class="o"><<</span> <span class="n">Hash</span><span class="p">[</span><span class="n">hash_key</span><span class="p">(</span><span class="s">"aaa"</span><span class="p">)]</span> <span class="o"><<</span> <span class="n">endl</span><span class="p">;</span>
<span class="n">cout</span> <span class="o"><<</span> <span class="n">Hash</span><span class="p">[</span><span class="n">hash_key</span><span class="p">(</span><span class="s">"bbb"</span><span class="p">)]</span> <span class="o"><<</span> <span class="n">endl</span><span class="p">;</span>
<span class="n">cout</span> <span class="o"><<</span> <span class="n">Hash</span><span class="p">[</span><span class="n">hash_key</span><span class="p">(</span><span class="s">"ccc"</span><span class="p">)]</span> <span class="o"><<</span> <span class="n">endl</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>
<h2 id="참고-stl-hash">[참고] STL Hash</h2>
<div class="language-c++ highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include <iostream>
#include <unordered_map>
#include <string>
</span><span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">(){</span>
<span class="n">unordered_map</span><span class="o"><</span><span class="n">string</span><span class="p">,</span> <span class="kt">int</span><span class="o">></span> <span class="n">hash</span><span class="p">;</span>
<span class="n">hash</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="n">make_pair</span><span class="p">(</span><span class="s">"aaa"</span><span class="p">,</span> <span class="mi">1</span><span class="p">));</span>
<span class="n">hash</span><span class="p">.</span><span class="n">insert</span><span class="p">({</span><span class="s">"bbb"</span><span class="p">,</span> <span class="mi">2</span><span class="p">});</span>
<span class="n">hash</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="n">make_pair</span><span class="p">(</span><span class="s">"ccc"</span><span class="p">,</span> <span class="mi">3</span><span class="p">));</span>
<span class="p">}</span>
</code></pre></div></div>Hash 함수 직접 구현하기[STL] sort와 qsort2023-05-11T01:41:00+00:002023-05-11T01:41:00+00:00https://doky.space/stl/2023/05/11/stl04<h2 id="sort를-써야하는-이유">sort를 써야하는 이유</h2>
<ul>
<li>qsort는 말 그대로 quick sort를 사용하는 것</li>
<li>
<algorithm> 헤더의 sort()는 selection + insertion + quick 형태로 최악의 경우에도 O(N^2)이 아니다.
</algorithm>
</li>
</ul>
<h2 id="code">Code</h2>
<div class="language-c++ highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include <iostream>
#include <algorithm>
</span><span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span>
<span class="k">struct</span> <span class="nc">Node</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">num</span><span class="p">;</span>
<span class="kt">char</span> <span class="n">bloodType</span><span class="p">;</span>
<span class="p">};</span>
<span class="kt">bool</span> <span class="nf">comp</span><span class="p">(</span><span class="k">const</span> <span class="n">Node</span> <span class="o">&</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">Node</span> <span class="o">&</span><span class="n">b</span><span class="p">)</span> <span class="p">{</span>
<span class="k">return</span> <span class="n">a</span><span class="p">.</span><span class="n">num</span> <span class="o">></span> <span class="n">b</span><span class="p">.</span><span class="n">num</span><span class="p">;</span>
<span class="p">}</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
<span class="n">Node</span> <span class="n">arr</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
<span class="p">{</span><span class="mi">3</span><span class="p">,</span> <span class="sc">'A'</span><span class="p">},</span>
<span class="p">{</span><span class="mi">1</span><span class="p">,</span> <span class="sc">'B'</span><span class="p">},</span>
<span class="p">{</span><span class="mi">7</span><span class="p">,</span> <span class="sc">'O'</span><span class="p">},</span>
<span class="p">{</span><span class="mi">2</span><span class="p">,</span> <span class="sc">'M'</span><span class="p">},</span>
<span class="p">}</span>
<span class="n">sort</span><span class="p">(</span><span class="n">arr</span><span class="p">,</span> <span class="n">arr</span> <span class="o">+</span> <span class="mi">4</span><span class="p">,</span> <span class="n">comp</span><span class="p">);</span>
<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="mi">4</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
<span class="n">cout</span> <span class="o"><<</span> <span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">num</span> <span class="o"><<</span> <span class="s">" / "</span> <span class="o"><<</span> <span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">bloodType</span> <span class="o"><<</span> <span class="n">endl</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>sort를 써야하는 이유 qsort는 말 그대로 quick sort를 사용하는 것 헤더의 sort()는 selection + insertion + quick 형태로 최악의 경우에도 O(N^2)이 아니다.[STL] C++ 시험 팁2023-03-24T01:41:00+00:002023-03-24T01:41:00+00:00https://doky.space/stl/2023/03/24/stl02<h2 id="시험볼-때-주의할-점">시험볼 때 주의할 점</h2>
<ul>
<li><code class="language-plaintext highlighter-rouge">register</code> 와 일반변수 섞어쓰면 의도치않게 동작한다!!</li>
<li><code class="language-plaintext highlighter-rouge">string</code> 타입을 활용하자</li>
<li><code class="language-plaintext highlighter-rouge">unordered_map</code> 사용 시, 키에는 <code class="language-plaintext highlighter-rouge">r-value</code>를 사용하자 (<code class="language-plaintext highlighter-rouge">string</code> -> <code class="language-plaintext highlighter-rouge">r-value</code>)
<ul>
<li><a href="https://stackoverflow.com/questions/42701688/using-an-unordered-map-with-arrays-as-keys">참고자료</a></li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">unordered_map</code> 참고
<ul>
<li><a href="https://ansohxxn.github.io/stl/map/">참고자료</a></li>
</ul>
</li>
<li>문제 채점 기준을 보면 조금 더 쉽게 접근할 수도 있다!
<ul>
<li>특정 문제같은 경우는 EditDone 리턴 타입을 가지고 채점하기 때문에</li>
<li>문자열을 실제로 수정할 필요가 전혀 없다!!</li>
</ul>
</li>
</ul>시험볼 때 주의할 점 register 와 일반변수 섞어쓰면 의도치않게 동작한다!! string 타입을 활용하자 unordered_map 사용 시, 키에는 r-value를 사용하자 (string -> r-value) 참고자료 unordered_map 참고 참고자료 문제 채점 기준을 보면 조금 더 쉽게 접근할 수도 있다! 특정 문제같은 경우는 EditDone 리턴 타입을 가지고 채점하기 때문에 문자열을 실제로 수정할 필요가 전혀 없다!![STL] 시험에 자주 나오는거 정리2023-03-10T01:41:00+00:002023-03-10T01:41:00+00:00https://doky.space/stl/2023/03/10/stl01<h2 id="필수헤더">필수헤더</h2>
<div class="language-c++ highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include <algorithm>
#include <utility>
</span></code></pre></div></div>
<h2 id="정렬">정렬</h2>
<h3 id="qsort">qsort</h3>
<div class="language-c++ highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include <stdio.h>
#include <stdlib.h>
</span>
<span class="kt">int</span> <span class="nf">comp</span><span class="p">(</span><span class="k">const</span> <span class="kt">void</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="kt">void</span> <span class="o">*</span><span class="n">b</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">if</span> <span class="p">((</span><span class="kt">int</span> <span class="o">*</span><span class="p">)</span><span class="n">a</span> <span class="o">></span> <span class="p">(</span><span class="kt">int</span> <span class="o">*</span><span class="p">)</span><span class="n">b</span><span class="p">)</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
<span class="k">if</span> <span class="p">((</span><span class="kt">int</span> <span class="o">*</span><span class="p">)</span><span class="n">a</span> <span class="o">==</span> <span class="p">(</span><span class="kt">int</span> <span class="o">*</span><span class="p">)</span><span class="n">b</span><span class="p">)</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="k">if</span> <span class="p">((</span><span class="kt">int</span> <span class="o">*</span><span class="p">)</span><span class="n">a</span> <span class="o"><</span> <span class="p">(</span><span class="kt">int</span> <span class="o">*</span><span class="p">)</span><span class="n">b</span><span class="p">)</span>
<span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
<span class="p">}</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
<span class="p">{</span>
<span class="kt">int</span> <span class="n">arr</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="mi">10</span><span class="p">,</span> <span class="mi">62</span><span class="p">,</span> <span class="mi">3</span><span class="p">};</span>
<span class="n">qsort</span><span class="p">(</span><span class="n">arr</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="kt">int</span><span class="p">),</span> <span class="n">comp</span><span class="p">);</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"%d %d %d </span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">arr</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">arr</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">arr</span><span class="p">[</span><span class="mi">2</span><span class="p">]);</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>
<h2 id="자료구조">자료구조</h2>
<h3 id="queue">Queue</h3>
<div class="language-c++ highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include <stdio.h>
#include <queue>
</span><span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
<span class="p">{</span>
<span class="n">queue</span><span class="o"><</span><span class="kt">int</span><span class="o">></span> <span class="n">que</span><span class="p">;</span>
<span class="n">que</span><span class="p">.</span><span class="n">push</span><span class="p">(</span><span class="mi">23</span><span class="p">);</span>
<span class="n">que</span><span class="p">.</span><span class="n">push</span><span class="p">(</span><span class="mi">68</span><span class="p">);</span>
<span class="n">que</span><span class="p">.</span><span class="n">push</span><span class="p">(</span><span class="mi">3</span><span class="p">);</span>
<span class="k">while</span> <span class="p">(</span><span class="o">!</span><span class="n">que</span><span class="p">.</span><span class="n">empty</span><span class="p">())</span>
<span class="p">{</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"%d %d %d</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">que</span><span class="p">.</span><span class="n">front</span><span class="p">(),</span> <span class="n">que</span><span class="p">.</span><span class="n">empty</span><span class="p">(),</span> <span class="n">que</span><span class="p">.</span><span class="n">size</span><span class="p">());</span>
<span class="n">que</span><span class="p">.</span><span class="n">pop</span><span class="p">();</span>
<span class="p">}</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>
<h3 id="priority-queue">Priority Queue</h3>
<div class="language-c++ highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include <stdio.h>
#include <queue>
</span><span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
<span class="p">{</span>
<span class="c1">// 내림차순</span>
<span class="n">priority_queue</span><span class="o"><</span><span class="kt">int</span><span class="o">></span> <span class="n">pq</span><span class="p">;</span>
<span class="n">pq</span><span class="p">.</span><span class="n">push</span><span class="p">(</span><span class="mi">23</span><span class="p">);</span>
<span class="n">pq</span><span class="p">.</span><span class="n">push</span><span class="p">(</span><span class="mi">68</span><span class="p">);</span>
<span class="n">pq</span><span class="p">.</span><span class="n">push</span><span class="p">(</span><span class="mi">3</span><span class="p">);</span>
<span class="k">while</span> <span class="p">(</span><span class="o">!</span><span class="n">pq</span><span class="p">.</span><span class="n">empty</span><span class="p">())</span>
<span class="p">{</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"%d %d %d</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">pq</span><span class="p">.</span><span class="n">top</span><span class="p">(),</span> <span class="n">pq</span><span class="p">.</span><span class="n">empty</span><span class="p">(),</span> <span class="n">pq</span><span class="p">.</span><span class="n">size</span><span class="p">());</span>
<span class="n">pq</span><span class="p">.</span><span class="n">pop</span><span class="p">();</span>
<span class="p">}</span>
<span class="c1">//</span>
<span class="c1">//</span>
<span class="c1">//</span>
<span class="c1">// 오름차순</span>
<span class="n">priority_queue</span><span class="o"><</span><span class="kt">int</span><span class="p">,</span> <span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">></span><span class="p">,</span> <span class="n">greater</span><span class="o"><</span><span class="kt">int</span><span class="o">></span> <span class="o">></span> <span class="n">pq_asc</span><span class="p">;</span>
<span class="n">pq_asc</span><span class="p">.</span><span class="n">push</span><span class="p">(</span><span class="mi">23</span><span class="p">);</span>
<span class="n">pq_asc</span><span class="p">.</span><span class="n">push</span><span class="p">(</span><span class="mi">68</span><span class="p">);</span>
<span class="n">pq_asc</span><span class="p">.</span><span class="n">push</span><span class="p">(</span><span class="mi">3</span><span class="p">);</span>
<span class="k">while</span> <span class="p">(</span><span class="o">!</span><span class="n">pq_asc</span><span class="p">.</span><span class="n">empty</span><span class="p">())</span>
<span class="p">{</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"%d %d %d</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">pq_asc</span><span class="p">.</span><span class="n">top</span><span class="p">(),</span> <span class="n">pq_asc</span><span class="p">.</span><span class="n">empty</span><span class="p">(),</span> <span class="n">pq_asc</span><span class="p">.</span><span class="n">size</span><span class="p">());</span>
<span class="n">pq_asc</span><span class="p">.</span><span class="n">pop</span><span class="p">();</span>
<span class="p">}</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>
<h2 id="stack">Stack</h2>
<div class="language-c++ highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include <stdio.h>
#include <stack>
</span><span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
<span class="p">{</span>
<span class="n">stack</span><span class="o"><</span><span class="kt">int</span><span class="o">></span> <span class="n">sta</span><span class="p">;</span>
<span class="n">sta</span><span class="p">.</span><span class="n">push</span><span class="p">(</span><span class="mi">23</span><span class="p">);</span>
<span class="n">sta</span><span class="p">.</span><span class="n">push</span><span class="p">(</span><span class="mi">68</span><span class="p">);</span>
<span class="n">sta</span><span class="p">.</span><span class="n">push</span><span class="p">(</span><span class="mi">3</span><span class="p">);</span>
<span class="k">while</span> <span class="p">(</span><span class="o">!</span><span class="n">sta</span><span class="p">.</span><span class="n">empty</span><span class="p">())</span>
<span class="p">{</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"%d %d %d</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">sta</span><span class="p">.</span><span class="n">top</span><span class="p">(),</span> <span class="n">sta</span><span class="p">.</span><span class="n">empty</span><span class="p">(),</span> <span class="n">sta</span><span class="p">.</span><span class="n">size</span><span class="p">());</span>
<span class="n">sta</span><span class="p">.</span><span class="n">pop</span><span class="p">();</span>
<span class="p">}</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>
<h2 id="자료형">자료형</h2>
<h3 id="vector">vector</h3>
<div class="language-c++ highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include <vector>
</span>
<span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">></span> <span class="n">dArr</span><span class="p">;</span>
<span class="n">dArr</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
<span class="n">dArr</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="mi">3</span><span class="p">);</span>
<span class="n">dArr</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="mi">2</span><span class="p">);</span>
<span class="n">dArr</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span>
<span class="n">dArr</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span>
<span class="n">dArr</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span>
<span class="n">dArr</span><span class="p">.</span><span class="n">erase</span><span class="p">(</span><span class="n">dArr</span><span class="p">.</span><span class="n">begin</span><span class="p">()</span> <span class="o">+</span> <span class="mi">1</span><span class="p">);</span>
</code></pre></div></div>
<h3 id="set">set</h3>
<ul>
<li>vector와 사용방법은 동일</li>
<li><strong>중복이 허용되지 않고, 오름차순으로 정렬</strong>됨</li>
</ul>
<h3 id="sorted-set"><strong>sorted set</strong></h3>
<div class="language-c++ highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include <set>
</span>
<span class="k">struct</span> <span class="nc">NODE</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">dis</span><span class="p">,</span> <span class="n">id</span><span class="p">;</span>
<span class="p">};</span>
<span class="k">struct</span> <span class="nc">comp</span> <span class="p">{</span>
<span class="kt">bool</span> <span class="k">operator</span><span class="p">()(</span><span class="n">NODE</span> <span class="o">*</span><span class="k">const</span> <span class="o">&</span><span class="n">a</span><span class="p">,</span> <span class="n">NODE</span> <span class="o">*</span><span class="k">const</span> <span class="o">&</span><span class="n">b</span><span class="p">)</span> <span class="k">const</span>
<span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="n">a</span><span class="o">-></span><span class="n">dist</span> <span class="o">==</span> <span class="n">b</span><span class="o">-></span><span class="n">dist</span><span class="p">)</span>
<span class="k">return</span> <span class="n">a</span><span class="o">-></span><span class="n">id</span> <span class="o">></span> <span class="n">b</span><span class="o">-></span><span class="n">id</span><span class="p">;</span>
<span class="k">return</span> <span class="n">a</span><span class="o">-></span><span class="n">dist</span> <span class="o"><</span> <span class="n">b</span><span class="o">-></span><span class="n">dist</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">};</span>
<span class="n">set</span><span class="o"><</span><span class="n">NODE</span> <span class="o">*</span><span class="p">,</span> <span class="n">comp</span><span class="o">></span> <span class="n">school</span><span class="p">[</span><span class="mi">10</span><span class="p">];</span> <span class="c1">// 학교에 들어간 학생들</span>
</code></pre></div></div>
<h3 id="map">Map</h3>
<div class="language-c++ highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include <unordered_map>
</span>
<span class="n">unordered_map</span><span class="o"><</span><span class="n">string</span><span class="p">,</span> <span class="n">node</span> <span class="o">*></span> <span class="n">table_map</span><span class="p">;</span>
<span class="n">table_map</span><span class="p">[</span><span class="s">"abc"</span><span class="p">];</span>
<span class="n">table_map</span><span class="p">[</span><span class="s">"def"</span><span class="p">]</span> <span class="o">=</span> <span class="mi">3</span><span class="p">;</span>
<span class="k">auto</span> <span class="n">it</span> <span class="o">=</span> <span class="n">table_map</span><span class="p">.</span><span class="n">find</span><span class="p">(</span><span class="n">mStr</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">it</span> <span class="o">==</span> <span class="n">table_map</span><span class="p">.</span><span class="n">end</span><span class="p">())</span> <span class="k">return</span> <span class="nb">false</span><span class="p">;</span>
</code></pre></div></div>
<h3 id="pair">Pair</h3>
<div class="language-c++ highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include <stdio.h>
#include <utility>
</span><span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
<span class="p">{</span>
<span class="c1">// pair<int, int> p1(1, 3);</span>
<span class="n">pair</span><span class="o"><</span><span class="kt">int</span><span class="p">,</span> <span class="kt">int</span><span class="o">></span> <span class="n">p1</span> <span class="o">=</span> <span class="n">make_pair</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">);</span>
<span class="c1">// std::pair <int, int></span>
<span class="n">printf</span><span class="p">(</span><span class="s">"%d %d</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">p1</span><span class="p">.</span><span class="n">first</span><span class="p">,</span> <span class="n">p1</span><span class="p">.</span><span class="n">second</span><span class="p">);</span>
<span class="n">pair</span><span class="o"><</span><span class="kt">int</span><span class="p">,</span> <span class="kt">int</span><span class="o">></span> <span class="n">pArr</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">make_pair</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
<span class="n">make_pair</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">),</span>
<span class="n">make_pair</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">),</span>
<span class="p">};</span>
<span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="mi">3</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"%d %d</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">pArr</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">first</span><span class="p">,</span> <span class="n">pArr</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">second</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>
<h3 id="tuple">Tuple</h3>
<div class="language-c++ highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include <stdio.h>
#include <tuple>
</span>
<span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
<span class="p">{</span>
<span class="n">tuple</span><span class="o"><</span><span class="kt">int</span><span class="p">,</span> <span class="kt">int</span><span class="p">,</span> <span class="kt">double</span><span class="o">></span> <span class="n">tup</span> <span class="o">=</span> <span class="n">make_tuple</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mf">4.8</span><span class="p">);</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"%d %d %lf</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">get</span><span class="o"><</span><span class="mi">0</span><span class="o">></span><span class="p">(</span><span class="n">tup</span><span class="p">),</span> <span class="n">get</span><span class="o"><</span><span class="mi">1</span><span class="o">></span><span class="p">(</span><span class="n">tup</span><span class="p">),</span> <span class="n">get</span><span class="o"><</span><span class="mi">2</span><span class="o">></span><span class="p">(</span><span class="n">tup</span><span class="p">));</span>
<span class="n">tuple</span><span class="o"><</span><span class="kt">int</span><span class="p">,</span> <span class="kt">int</span><span class="p">,</span> <span class="kt">double</span><span class="o">></span> <span class="n">tArr</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">make_tuple</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mf">3.0</span><span class="p">),</span>
<span class="n">make_tuple</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mf">4.0</span><span class="p">),</span>
<span class="n">make_tuple</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mf">5.0</span><span class="p">),</span>
<span class="p">};</span>
<span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="mi">3</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"%d %d %lf</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">get</span><span class="o"><</span><span class="mi">0</span><span class="o">></span><span class="p">(</span><span class="n">tArr</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span> <span class="n">get</span><span class="o"><</span><span class="mi">1</span><span class="o">></span><span class="p">(</span><span class="n">tArr</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span> <span class="n">get</span><span class="o"><</span><span class="mi">2</span><span class="o">></span><span class="p">(</span><span class="n">tArr</span><span class="p">[</span><span class="n">i</span><span class="p">]));</span>
<span class="p">}</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>필수헤더 #include <algorithm> #include <utility>[취준] #0. 할 수 있을까 생각말고 무조건 해야 한다2023-01-03T01:41:00+00:002023-01-03T01:41:00+00:00https://doky.space/recruit/2023/01/03/recruit00<blockquote>
<p>“할 수 있다”가 아닌 “해야 한다”라는 생각이<br />
나에게 엄청난 책임감과 부담으로 다가왔다.<br />
무조건 해내야 했기 때문이다.<br /></p>
</blockquote>
<p><br /></p>
<p>2022년. 드디어 내게도 찾아온 취준의 해가 밝았다.</p>
<p>그동안 창업이니 군대니하며 차일피일 미뤄오던 대학교 마지막 학년, 그리고 취업준비 시기가 찾아온 것이다.</p>
<p>20대 후반, 이제 곧 서른이라는 나이임에도 아직 학부생이고,</p>
<p>수많은 활동들을 했음에도, 무엇하나 공인된 것이 없다는 약점을 가진 나였기에</p>
<p>막상 다가운 취업의 문턱은 부담스럽기 짝이 없었다.</p>
<p><br /></p>
<hr />
<p><br /><br /></p>
<p>3학년 1학기 복학했을 때에는 그저 별 생각이 없었다.</p>
<p>그동안 학교 밖에서 해왔던 것처럼 열심히만 하자는 생각과, 학교 장학금에 학과에서 별도로 제공해주는 장학금을 받으며 너무나도 비싼 등록금을 아껴보자는 생각이 컸다.</p>
<p>그런데…</p>
<p><img style="height:500px;" src="/assets/recruit/00-01.png" /><br /></p>
<p>예상 밖의 결과였다. 사실, 그동안 학교를 다니면서 처음 받아본 성적이었다.</p>
<p>물론 기쁘기도 했지만, 학비에 대한 부담이 없어진 것에 대한 안도감과, 이러한 성과를 내기위해 너무나도 내 자신을 갉아먹었다는 것에서 나오는 허탈함이 나를 감쌌다.</p>
<p>그리고 무엇보다도, <strong>한 번 최고의 경지에 이르면 더 이상 올라갈 곳은 없고, 떨어질 곳만 있다는 부담도 컸다.</strong></p>
<p>이제는 성적을 잘 받기 위함이 아니라, 유지하기 위해 스스로를 고갈시켜야 했던 것이다.</p>
<p>그렇게 힘겨운 3학년을 버티면서 내가 속을 외웠던 주문이 바로</p>
<p><strong>“할 수 있을까” 생각말고 무조건 “해야 한다”</strong>였다.</p>
<p><img style="height:500px;" src="/assets/recruit/00-03.png" /><br /></p>
<p>사실 오래전부터 나는 <strong>삼성전자</strong>라는 회사에 관심이 많았다.</p>
<p>물론 고등학교 시절 대학 진학에 실패했을 때, NHN NEXT라는 교육기관도 알아보기는 했었지만,</p>
<p>재수가 끝나고 대학에 진학한 이후, 2015년 당시에는 네이버, 카카오보다는 삼성전자의 인지도가 더 높던 시기로 기억한다.</p>
<p>그 때, 학과 선배 중 한 분께서 삼성전자에서 운영하는 삼성전자 소프트웨어 맴버쉽을 수료하고 학과에서 최초로 삼성전자에 취업하는 성과를 보게 되었다.</p>
<p><img style="height:500px;" src="/assets/recruit/00-04.png" /><br /></p>
<p>당시, 나는 삼성전자 소프트웨어 맴버쉽에 패기있게 1학년 1학기 때 지원하고 광탈을 했었는데</p>
<p>학과 선배를 보며 선망의 대상이 되었던 것 같다. 동시에 삼성전자라는 기업의 문턱이 얼마나 높은지도 새삼 알게 되었다.</p>
<p>누구에게나 대기업은 이름만 들어도 가기 매우 어려울 것 같고 감히 도전하기도 겁이나는 그러한 존재다.</p>
<p>그것을 나도 알고 있었기에 1학년 때부터 취업 준비라는 것을 의식하고 있었다. (물론 그렇다고 딱히 무언가를 준비한 것은 아니었다 😅)</p>
<p><br /></p>
<hr />
<p><br /><br /></p>
<p>다시 2021년으로 돌아와서,</p>
<p>이듬 해에 있을 취업 준비를 위해 여러 자료를 조사해보던 차에 삼성전자 대학생 인턴십 모집공모를 보게 되었다.</p>
<p><img style="height:500px;" src="/assets/recruit/00-07.png" /><br /></p>
<p>물론, 당시 3학년이었던 나는 지원자격이 되지 않았다.</p>
<p>하지만, 대략 3월 중반 즈음에 공고가 나온다는 사실과, OPIc 등급이 필요하다는 것을 알게 되었고</p>
<p>이를 위해 차근차근 준비하기 시작했다.</p>
<p>그동안 내가 해온 것들이 너무 많아 정리가 나조차도 기억이 안나는 불상사가 발생했기 때문에</p>
<p>기억을 억지로라도 끌어내서 <a href="https://doky.space/cv/ko">CV</a>를 정리하기 시작했고,</p>
<p>대학에서 제공하는 모의오픽 시험도 꾸준히 응시했다. (아마 원서접수 전 모의오픽을 6번 정도 응시했던 것으로 기억난다.)</p>
<p><img style="height:500px;" src="/assets/recruit/00-08.png" /><br /></p>
<p>시험 결과는…</p>
<p><code class="language-plaintext highlighter-rouge">IM1 → IM2 → IM3 → IM3..?</code> 로 IH의 벽을 넘지 못하다가 2월 마지막 모의오픽에서 IH 등급을 겨우 따내게 되었다.</p>
<p>오픽의 경우, 롤플레잉을 따로 연습하지 않고 매번 시험을 봤었는데, 이 부분을 <a href="https://www.youtube.com/watch?v=IYSZeoYMsaw">오픽노잼 유튜브</a>를 보고 연습해서 시험을 보니 바로 IH가 나왔다.</p>
<p><br /></p>
<p>그렇게 드디어 2022년 3월…</p>
<p>취준의 해가 밝았고,</p>
<p>2022년 삼성전자 대학생인턴십 공고가 나왔다.</p>
<p><br /></p>
<h3 id="다음-글">다음 글</h3>
<ul>
<li><a href="#">작성중…</a></li>
</ul>“할 수 있다”가 아닌 “해야 한다”라는 생각이 나에게 엄청난 책임감과 부담으로 다가왔다. 무조건 해내야 했기 때문이다.[Git] Git Branching Strategy (브렌칭 전략) #22022-05-03T01:41:00+00:002022-05-03T01:41:00+00:00https://doky.space/git/2022/05/03/git02<p align="center">
<img src="https://github.com/DokySp-study/git-flow-test/raw/master/img/main.png" width="700px" />
</p>
<p><br /></p>
<h2 id="꿀팁-1-git-branch-bash에서-시각화">꿀팁 1. GIT Branch bash에서 시각화</h2>
<p><code class="language-plaintext highlighter-rouge">A DOG!</code></p>
<p><img height="200" src="https://camo.githubusercontent.com/bfa3098c33d2da4ba5706a95e2c626efdf18cec2/68747470733a2f2f692e737461636b2e696d6775722e636f6d2f456c566b662e6a7067" /></p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>git log <span class="nt">--All</span> <span class="nt">--Decorate</span> <span class="nt">--Oneline</span> <span class="nt">--Graph</span>
</code></pre></div></div>
<p><img height="300" src="./img/adog.png" /></p>
<h2 id="꿀팁-2-no-ff-옵션">꿀팁 2. –no-ff 옵션</h2>
<p><img src="https://github.com/DokySp-study/git-flow-test/raw/master/img/1.png" alt="develop" /></p>
<p>1번은 –no-ff 옵션 없이 finish 한 것이다.</p>
<ul>
<li>develop 브랜치에 수정을 가하는 <strong>커밋 1개</strong>만 존재한다.</li>
</ul>
<p><img src="https://github.com/DokySp-study/git-flow-test/raw/master/img/111.png" alt="ff" /></p>
<p>2번은 –no-ff 옵션을 넣어 finish 한 것이다.</p>
<ul>
<li>코드 수정 커밋 + develop 브랜치 Merge <strong>커밋 2개</strong>가 존재한다.</li>
</ul>
<p><img src="https://github.com/DokySp-study/git-flow-test/raw/master/img/222.png" alt="no-ff" /></p>
<h2 id="꿀팁-3-release-후에-git-push">꿀팁 3. release 후에 git push</h2>
<ul>
<li><strong>Before:</strong> develop 브랜치만 push한 경우.</li>
<li><strong>After:</strong> develop 브랜치 push 후 master bransh push</li>
</ul>
<p><img src="https://github.com/DokySp-study/git-flow-test/raw/master/img/2.png" alt="develop" /></p>
<ul>
<li>master 브랜치 push 전에는 5번 커밋이 마스터로 머지된 커밋이라는 것을 인식하지 못하는 것 같다.</li>
<li>master 브랜치에서 push하면 문제가 해결된다.</li>
</ul>
<h2 id="이전-글">이전 글</h2>
<ul>
<li><a href="https://doky.space/git/2022/05/03/git01.html">[Git] Git Branching Strategy (브렌칭 전략) #1</a></li>
</ul>
<p><br /></p>
<h2 id="래퍼런스">래퍼런스</h2>
<ul>
<li><a href="http://danielkummer.github.io/git-flow-cheatsheet/index.ko_KR.html">git-flow cheatsheet</a></li>
<li><a href="https://uroa.tistory.com/106">[GIT]git-flow 사용하기</a></li>
<li><a href="http://huns.me/development/1131">[Review] gitflow, 쉬운 git branch 관리</a></li>
<li><a href="https://gmlwjd9405.github.io/2018/05/11/types-of-git-branch.html">[GitHub] Git 브랜치의 종류 및 사용법 (5가지)</a></li>
</ul>[Git] Git Branching Strategy (브렌칭 전략) #12022-05-03T01:38:00+00:002022-05-03T01:38:00+00:00https://doky.space/git/2022/05/03/git01<p align="center">
<img src="https://github.com/DokySp-study/git-flow-test/raw/master/img/main.png" width="700px" />
</p>
<p><br /></p>
<h2 id="git-flow-개념도">GIT FLOW 개념도</h2>
<p align="center">
<img height="650" src="https://github.com/DokySp-study/git-flow-test/raw/master/img/git-flow-description.png" />
</p>
<h2 id="시작하기">시작하기</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>git flow init
</code></pre></div></div>
<h2 id="주요-브랜치">주요 브랜치</h2>
<ul>
<li><strong>master</strong>
<ul>
<li>배포 시 사용하는 브랜치</li>
</ul>
</li>
<li><strong>develop</strong>
<ul>
<li>개발 단계에서 사용하는 브랜치</li>
</ul>
</li>
<li><strong>feature/bugfix</strong>
<ul>
<li>새로운 기능/버그 수정시 사용하는 브랜치
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>git flow feature start <span class="o">[</span>기능 이름]
...
<span class="c"># 기능 개발/추가 커밋들</span>
...
<span class="nv">$ </span>git flow feature finish <span class="o">[</span>기능 이름]
</code></pre></div> </div>
</li>
<li>feature 또는 bugfix를 finish할 경우
<ul>
<li>feature -> develop 병합</li>
</ul>
</li>
<li>다른 개발자와 feature 내용을 공유하기 위해 원격 저장소에 push 할 때
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>git flow feature publish
</code></pre></div> </div>
</li>
</ul>
</li>
<li><strong>release</strong>
<ul>
<li>develop에서 최종 배포(master) 시 사용하는 브랜치
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>git flow release start <span class="o">[</span>릴리즈 버전<span class="o">(</span>ex> v#.0.0<span class="o">)]</span>
...
<span class="c"># 최종 배포버전을 위한 버그 수정 커밋들</span>
...
<span class="nv">$ </span>git flow release finish <span class="o">[</span>릴리즈 버전]
</code></pre></div> </div>
</li>
<li>release를 finish할 경우
<ul>
<li>release -> develop 병합</li>
<li>release -> master 병합</li>
</ul>
</li>
<li>release finish한 이후에 develop 브랜치와 master 브랜치 각각 <code class="language-plaintext highlighter-rouge">$ git push</code>를 해주어야 한다. (<a href="#release-후에-git-push">설명</a>)</li>
</ul>
</li>
<li><strong>hotfix</strong>
<ul>
<li>배포 중인 서비스를 긴급하게 수정할 때 사용하는 브랜치
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>git flow hotfix start <span class="o">[</span>핫픽스 버전<span class="o">(</span>ex> v1.0.#<span class="o">)]</span>
...
<span class="c"># 최종 배포버전을 위한 버그 수정 커밋들</span>
...
<span class="nv">$ </span>git flow hotfix finish <span class="o">[</span>핫픽스 버전]
</code></pre></div> </div>
</li>
<li>hotfix finish할 경우
<ul>
<li>hotfix -> develop 병합</li>
<li>hotfix -> master 병합</li>
</ul>
</li>
<li><del>hotfix finish한 이후에 develop 브랜치와 master 브랜치 각각 <code class="language-plaintext highlighter-rouge">$ git push</code>를 해주어야 한다. (<a href="#release-후에-git-push">설명</a>)</del> 확인 필요</li>
</ul>
</li>
<li><strong><del>support</del></strong> (베타기능)</li>
</ul>
<h2 id="다음-글">다음 글</h2>
<ul>
<li><a href="https://doky.space/git/2022/05/03/git02.html">[Git] Git Branching Strategy (브렌칭 전략) #2</a></li>
</ul>
<p><br /></p>
<h2 id="래퍼런스">래퍼런스</h2>
<ul>
<li><a href="http://danielkummer.github.io/git-flow-cheatsheet/index.ko_KR.html">git-flow cheatsheet</a></li>
<li><a href="https://uroa.tistory.com/106">[GIT]git-flow 사용하기</a></li>
<li><a href="http://huns.me/development/1131">[Review] gitflow, 쉬운 git branch 관리</a></li>
<li><a href="https://gmlwjd9405.github.io/2018/05/11/types-of-git-branch.html">[GitHub] Git 브랜치의 종류 및 사용법 (5가지)</a></li>
</ul>[Web] iOS PWA 옵션2021-08-24T10:16:00+00:002021-08-24T10:16:00+00:00https://doky.space/web/2021/08/24/pwa<div style="text-align: center; color: grey;">
<img style="height:300px; margin-bottom: 15px;" src="/assets/web/pwa-01.png" /><br />
</div>
<ul>
<li><code class="language-plaintext highlighter-rouge">apple-mobile-web-app-capable</code> :</li>
<li><code class="language-plaintext highlighter-rouge">apple-mobile-web-app-status-bar-style</code>
<ul>
<li><code class="language-plaintext highlighter-rouge">content</code>:
<ul>
<li><code class="language-plaintext highlighter-rouge">black</code> : 상단바 검은색</li>
<li><code class="language-plaintext highlighter-rouge">black-translucent</code> : 상단바 투명</li>
<li><code class="language-plaintext highlighter-rouge">defalut</code> : ?</li>
</ul>
</li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">apple-mobile-web-app-title</code> :</li>
<li><code class="language-plaintext highlighter-rouge">apple-touch-icon</code> :</li>
</ul>[DAILY] 프로그래밍과 코딩의 차이2021-02-24T11:23:18+00:002021-02-24T11:23:18+00:00https://doky.space/daily/2021/02/24/daily01<blockquote>
<p>본 글은 개인의 견해를 적은 글입니다. 따라서 글의 오류 또는 모순이 있을 수 있으므로 공식적인 효력을 지니지 않습니다. 글은 수시로 변경될 수 있습니다.</p>
</blockquote>
<p>최근 한국에서 코딩 교육에 대한 많은 관심과 이에 대한 여론의 주목을 받은 적이 있었다. 아이들에게 코딩 교육을 왜 해야하며, 무엇이 좋은지에 대한 글은 이미 인터넷에 널리고 널렸지만, 개인적으로는 아이들에게 코딩 교육이 꼭 필요하다고 생각은 한다. 그 이유를 세 가지로 정리해보면 아래와 같다.</p>
<ol>
<li>논리적 사고 능력 향상</li>
<li>세상에 대한 시각 변화</li>
</ol>
<p>우선, 논리적 사고 능력 향상은 마냥 허무맹랑한 소리는 아니다. 실제로 아이들에게 요리하는 법을 코딩하는 것처럼 순서대로 적어두도록 하고 아버지가 이를 그대로 따라하는 영상이 있다. 물론.. 요리가 제대로 될 일이 없다. 아이들은 단순히 빵을 준비하고 햄을 올린 후, 다시 빵을 덮는다고 작성하더라도 빵을 뒤집어서 놓을 수도, 익지 않은 생햄을 올릴수도 있다.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/cDA3_5982h8?start=36" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe>
<p>영상을 보면서 내가 느낀 점은 코딩이 <del>사람을 빡치게한다는 것을 표현</del> 단순히 순서 끼워맞추기라기보단 주어진 문제 상황에 대해 어떠한 요소들이 필요하고, 이를 어떻게 활용하여 해결할 수 있는지를 생각하고, 이를 순서대로 구체화시키는 과정임을 알 수가 있다. 우리는 상당히 많은 부분에서 추상화를 하기 마련이다. 코딩은 추상화하는 우리 뇌를 구체화시켜주는데 좋은 역할을 한다고 본다. 가령, 여향을 떠난다고 가정하면 아래와 같은 과정을 거친다고 보면 된다.</p>
<blockquote>
<p>여행을 떠나자!… 근데..</p>
<ol>
<li>언제?</li>
<li>어디로?</li>
<li>내가 경험하고 싶은 것들은 무엇일까?</li>
<li>가기 위해서는 어떠한 교통 수단을 이용해야 하지?</li>
<li>가서 묵을 숙소는 어디로 구하지?
4-1. 3번에서 정한 장소들의 중간지로 하자! 아니면 숙소를 여러개를 잡자!</li>
<li>…</li>
<li>위에 모든 절차들에서 소모되는 비용은 얼마지? 내 여유자금과 맞나?</li>
<li>…</li>
</ol>
</blockquote>
<p>이러한 일련의 과정을 거치면서 구체화시켜나가는 것이 넓게 보면 코딩과 유사한 점이 많다. 코딩을 한다고 반드시 여행 계획을 잘 짜거나, 방학을 알차게 보내지는 않겠지만 어느 정도 문제 해결 능력의 향상을 기대할 수 있을 것이라 생각한다. 코딩적 사고능력이(보통 문제해결능력이라 부른다) 내 주변의 문제상황(문제상황은 심지어 오늘 아침 무엇을 먹을지 결정하는 정도도 포함한다)을 보다 논리적이고 현실화시키는 것을 가능하게 해줄 수도 있다는 것이다. 즉, 내 삶과 아주 무관하지는 않다는 말이다.</p>
<blockquote>
<p>사업이나 기획의 경우, 결이 살짝은 다르다고 본다. 사업 또는 기획은 창작의 분야이고, 정해저 있지 않은 것들을 기존에 만들어진 정보들로 예측할 수 있다는 것이 핵심이라고 보기 때문이다. 코딩처럼 정해진 문제와 명확한 목표가 아닌 모든 것이 불확실하며 예측이여서 골머리를 앓는다. 나는 문제해결능력과 기획 능력이 합쳐지면 그 힘이 무시무시하다고 생각한다. 예측을 그럴싸하게 현실화시킬 수 있게 보이게 만드는 것이 가능해진다고 보기 때문이다.</p>
</blockquote>
<h2 id="프로그래밍-vs-코딩">프로그래밍 vs. 코딩?</h2>
<p>그렇다면, 프로그래밍과 코딩의 차이는 무엇일까? 위키피디아의 내용을 인용하자면 아래와 같다.</p>
<blockquote>
<p>프로그래밍이란 ‘컴퓨터 프로그램을 작성하는 일’을 뜻하며 코딩이란 프로그래밍에 수반되는 ‘코드 작성 작업’을 의미한다. 프로그래밍은 ‘일반적으로 프로그램 작성 방법의 결정, 코딩(coding), 에러 수정 따위의 작업을 이르지만, 특수하게 코딩만을 이를 때도 있다.’</p>
</blockquote>
<p>즉, 코딩은 프로그래밍의 하위 개념 정도로 볼 수 있다는 말이다. 프로그램을 개발할 때 <code class="language-plaintext highlighter-rouge">기획</code>, <code class="language-plaintext highlighter-rouge">개발</code>, <code class="language-plaintext highlighter-rouge">오류 수정</code>, <code class="language-plaintext highlighter-rouge">기타..</code> 등의 과정을 거치는데, 그 중 하나가 코딩이라는 것이다. 그런데 아주 간단한 알고리즘 문제를 풀 때도 문제를 어떻게 풀지를 생각하고, 실제로 코드로 옮겨보고, 다양한 테스트셋을 가지고 테스트도 해본다. 근데 우리는 이러한 시험을 코딩 테스트라고 한다. 프로그래밍 테스트라는 말은 거의 들어본적이 없다. 여기서 주제에 대한 의문이 나오게 되었다. 도데체 프로그래밍과 코딩은 어떠한 차이를 가지고 있는 것일까?</p>
<h2 id="computer-science-vs-coding">Computer Science vs. Coding</h2>
<p>컴퓨터공학과는 <del>컴퓨터 수리하는 법을 배운다거나..</del> 단순히 C언어, Java, Python과 같은 언어를 배우는 곳이 아니다. 이 정도는 대학이 아닌 일반 학원에서도 두어달 정도만 배워도 충분히 습득이 가능하다. 컴퓨터공학은 이러한 코딩 능력을 기본으로 깔고 시작한다. 가령 C언어로 예를 들어본다면,</p>
<blockquote>
<h1 id="c언어로-코딩을-할-수-있다">C언어로 코딩을 할 수 있다.</h1>
<p>C언어 코드가 OS에서 어떻게 메모리 관리가 되는지 안다.
코드가 어샘블리로 변환되고, 이렇게 변환된 코드가 CPU의 ALU와 레지스터 사이에 컨트롤이 어떻게 되는지 안다.</p>
</blockquote>
<blockquote>
<p>네트워크를 활용하여 채팅 프로그램을 만들 수 있다.
node.js로 서버 프로그래밍을 할 수 있다.
======================
OSI 7계층에 따라 내가 보낸 패킷이 어떻게 도달하는지 알 수 있다.
데이터베이스를 왜 사용해야 하는 지에 대한 이유와 테이블 간 ER 모델을 구성할 수 있다.</p>
</blockquote>
<p>즉, 단순히 코드를 짜는 것을 넘어, 근본적으로 컴퓨터와 이에 기반한 모든 것들의 동작 방식을 깊게 이해하고, 이에 대한 해결방법을 코드로 표현하는 것이 코딩이라는 것이다. 바꿔 말하면 언어는 크게 중요하지 않다고 볼 수 있다. 서버 프로그램을 만들 때, Java-Swing, Javascript-node.js 등 이미 다양하고 좋은 도구들이 존재한다. 이를 가져다가 쓰면 그만인 것이다.</p>
<h2 id="결론">결론</h2>
<blockquote>
<p>코딩은 프로그래밍을 하기 위한 도구에 불과하다.</p>
</blockquote>
<p>만약, 아이들에게 코딩 교육을 하는데 OS가 메모리를 어떻게 추상화시키는지, 네트워크 통신이 어떻게 이루어지는지를 구체적으로 가르치려 들려 한다면, 선을 많이 넘은 것이라 생각한다. 파이썬이 코딩 교육용으로 좋다고 보는 이유는 이러한 어려운 기술들을 상당 부분 가려두었기 때문이다. 또, 아이패드에 Swift Playground 라는 앱을 보면, 간단한 코드를 작성해서 캐릭터를 움직여서 미션을 수행하는 방식으로 코딩을 알려준다. 이 정도면 코딩을 익히는데에 충분하지 않을까?</p>
<p>코딩 교육의 핵심은 문제해결능력의 향상이지, 전국민을 프로그래머로 키워내겠다는 식으로 접근하면 안된다. 이러한 식의 발상이라면, 국어를 가르쳐서 전국민을 소설가, 시인으로 만들거나, 과학을 가르쳐 모두를 자연과학 연구가로 만들겠다는 것과 비슷하다.</p>
<p>어쩌다보니 교육에 대한 내용이 많이 나왔는데, 핵심은 코딩이 그저 도구일 뿐이라는 것이다. 포토샵을 배우는 것으로 예를 들어보면, 포토샵을 잘 다루기 위해서 포토샵을 배우는게 아니라 사진 편집 및 합성, 보정을 하기 위해 포토샵을 배우는 것과 동일하다. 아무 목적 없이 코딩 그 자체를 잘하는 것은 크게 의미가 없다고 생각한다.</p>
<p>만약, 개발자가 되고 싶은 생각이 있다면 무슨 언어를 배울지부터가 아니라, 컴퓨터, 네트워크, 데이터베이스, 컴퓨터 그래픽, OS와 같은 분야를 살펴보고, 이러한 것들과 자신과 잘 맞다면 그 때 코딩을 시작해도 늦지 않는다고 생각한다. 그게 아니라면 삶을 살아가는데 필요한 지식 정도로 간단하게 코딩을 해보는것도 나쁘지 않을 것이다.</p>
<h2 id="참고자료">참고자료</h2>
<ul>
<li><a href="https://ko.wikipedia.org/wiki/컴퓨터_프로그래밍">위키백과: 컴퓨터 프로그래밍</a></li>
<li><a href="https://ko.wikipedia.org/wiki/컴퓨터_공학">위키백과: 컴퓨터 공학</a></li>
<li><a href="https://www.youtube.com/watch?v=cDA3_5982h8&feature=emb_title">YT: Exact Instructions Challenge - THIS is why my kids hate me.</a></li>
<li><a href="https://www.upgrad.com/blog/coding-vs-programming/">Coding vs. Programming: A Never Ending Debate</a></li>
</ul>본 글은 개인의 견해를 적은 글입니다. 따라서 글의 오류 또는 모순이 있을 수 있으므로 공식적인 효력을 지니지 않습니다. 글은 수시로 변경될 수 있습니다.Daily002021-02-24T00:00:00+00:002021-02-24T00:00:00+00:00https://doky.space/2021/02/24/daily00<p>일주일에 하나씩 블로그에 글쓰기!</p>
<p>컴퓨터 공학과 코딩의 구별
Git - reset, checkout, rebase</p>
<p>개발자에게 가장 필요한 것은 과연 기술일까?</p>
<ul>
<li>기획 및 실현능력</li>
</ul>
<p>Git - submodule
Git - 브렌치 나누기 및 효과적인 브렌칭 전략, Git Flow</p>일주일에 하나씩 블로그에 글쓰기!