<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.0">Jekyll</generator><link href="https://jskim-research.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://jskim-research.github.io/" rel="alternate" type="text/html" /><updated>2022-02-10T09:26:38+00:00</updated><id>https://jskim-research.github.io/feed.xml</id><title type="html">Research &amp;amp; Develop</title><subtitle>The site for recording research results and project development</subtitle><author><name>Jisoo Kim</name></author><entry><title type="html">문제풀이 학습전략</title><link href="https://jskim-research.github.io/codingtest/CodingTestLearningStrategy/" rel="alternate" type="text/html" title="문제풀이 학습전략" /><published>2022-02-10T00:00:00+00:00</published><updated>2022-02-10T00:00:00+00:00</updated><id>https://jskim-research.github.io/codingtest/CodingTestLearningStrategy</id><content type="html" xml:base="https://jskim-research.github.io/codingtest/CodingTestLearningStrategy/">&lt;h1 id=&quot;학습-전략&quot;&gt;학습 전략&lt;/h1&gt;

&lt;p&gt;각 전략은 병행으로 진행한다.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Programmers 문제 뿌수기&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;2월 10일 기준 Programmers 난이도 별 문제 개수&lt;/p&gt;

&lt;p&gt;시간을 정하고 푸는데 시간을 넘길 경우 처음 보는 알고리즘이어서인지 코딩 미숙인지 판단 후 개선&lt;/p&gt;

&lt;p&gt;Level1: 65 =&amp;gt; 한 문제에 10~20분&lt;br /&gt;
Level2: 80&lt;br /&gt;
Level3: 63 =&amp;gt; 한 문제에 한 시간&lt;br /&gt;
Level4: 29&lt;br /&gt;
Level5: 13&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;백준 문제 뿌수기&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;계획중&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;고수들 따라하기&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;많은 고수들 ([&lt;a href=&quot;https://covenant.tistory.com/220&quot;&gt;1&lt;/a&gt;], …)이 이미 같은 길을 걸어왔다.&lt;/p&gt;

&lt;p&gt;좋은 코딩 스타일과 어떤 문제들을 풀어야 할 지, 어떤 것을 더 해야할지 그들에게 묻자.&lt;/p&gt;</content><author><name>Jisoo Kim</name></author><category term="CodingTest" /><summary type="html">학습 전략</summary></entry><entry><title type="html">자주 쓰는 STL 함수 정리</title><link href="https://jskim-research.github.io/stl/STL_Functions/" rel="alternate" type="text/html" title="자주 쓰는 STL 함수 정리" /><published>2022-02-10T00:00:00+00:00</published><updated>2022-02-10T00:00:00+00:00</updated><id>https://jskim-research.github.io/stl/STL_Functions</id><content type="html" xml:base="https://jskim-research.github.io/stl/STL_Functions/">&lt;h1 id=&quot;학습-전략&quot;&gt;학습 전략&lt;/h1&gt;</content><author><name>Jisoo Kim</name></author><category term="STL" /><summary type="html">학습 전략</summary></entry><entry><title type="html">문제풀이 프레임워크</title><link href="https://jskim-research.github.io/codingtest/CodingTestFramework/" rel="alternate" type="text/html" title="문제풀이 프레임워크" /><published>2022-02-03T00:00:00+00:00</published><updated>2022-02-03T00:00:00+00:00</updated><id>https://jskim-research.github.io/codingtest/CodingTestFramework</id><content type="html" xml:base="https://jskim-research.github.io/codingtest/CodingTestFramework/">&lt;h1 id=&quot;introduction&quot;&gt;Introduction&lt;/h1&gt;

&lt;p&gt;코딩 테스트 문제는 다음 세 가지로 구성된다.&lt;/p&gt;

&lt;p&gt;“입력, 로직, 출력”&lt;/p&gt;

&lt;p&gt;입력, 로직, 출력을 class로 추상화함으로써 기존의 지겨운 입출력 구현을 없애고 로직 구현에 집중할 수 있도록 한다.&lt;/p&gt;

&lt;p&gt;앞으로의 글에서는 코드만 올릴 예정이지만 필자 개인적으로 프레임워크를 발전시켜나가면서 로직에 집중하고자 한다.&lt;/p&gt;

&lt;p&gt;아직 개선의 여지가 많은 프레임워크[&lt;a href=&quot;https://github.com/jskim-research/CodingTest&quot;&gt;1&lt;/a&gt;]이기 때문에 기여하고 싶으시다면 언제든지 댓글 바랍니다.&lt;/p&gt;

&lt;h2 id=&quot;입력&quot;&gt;입력&lt;/h2&gt;

&lt;p&gt;ProblemFile.h 헤더파일에는 입력을 담당하는 함수들이 존재한다.&lt;/p&gt;

&lt;p&gt;최상위 클래스인 ProblemFile을 상속받아 ReadFile 함수를 수정함으로써 다양한 문제 풀이 사이트의 입력에 대응할 수 있다.&lt;/p&gt;

&lt;p&gt;아래 코드는 프로그래머스 입력 파일에 대응하는 ReadFile 함수의 예시다.&lt;/p&gt;

&lt;div class=&quot;language-cpp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// ProblemFile.h&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;inline&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ProgrammersFile&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ReadFile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;file_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;vector&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;FileFormat&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Types&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;fstream&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ifs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;buffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

	&lt;span class=&quot;n&quot;&gt;ifs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;file_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ifs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;is_open&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ifs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;peek&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;EOF&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;getline&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ifs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;buffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

			&lt;span class=&quot;c1&quot;&gt;// 입력이 개행 문자로 나뉜다는 가정&lt;/span&gt;
			&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;num_of_problems&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

			&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;vector&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;split_string&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;StringOperation&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;buffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;sc&quot;&gt;'\t'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
			&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;split_string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;size&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
			&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
 				&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;split_string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
				&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;vector&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

				&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;FileFormat&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Types&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
				&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
					&lt;span class=&quot;n&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;StringOperation&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;remove_all&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;StringOperation&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;remove_all&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;StringOperation&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;trim&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;split_string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]),&lt;/span&gt; &lt;span class=&quot;sc&quot;&gt;' '&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;sc&quot;&gt;'\&quot;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
				&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
				
				&lt;span class=&quot;n&quot;&gt;array&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;StringOperation&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;sc&quot;&gt;','&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
				&lt;span class=&quot;n&quot;&gt;arrays&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;push_back&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
			&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ifs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;n&quot;&gt;ifs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;close&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;로직&quot;&gt;로직&lt;/h2&gt;

&lt;p&gt;Problem class의 Run 함수엔 크게 Prepare (입력), Solve (로직), Score (출력) 함수가 쓰인다.&lt;/p&gt;

&lt;p&gt;여기서 Problem class를 상속한 자식 클래스에서 Solve 함수를 구현하는 형태이며 디자인 패턴을 안다면 template method 라고 보면 된다.&lt;/p&gt;

&lt;div class=&quot;language-cpp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// Problem.cpp&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Problem&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Run&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;vector&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;vector&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;inputs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;vector&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;output&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;vector&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;right_answer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;num_problems&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

	&lt;span class=&quot;n&quot;&gt;Prepare&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// 입력!&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;inputs&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;GetArrays&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;num_problems&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;GetNumOfProblems&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;

	&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;test_case&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;test_case&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;inputs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;size&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;test_case&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;inputs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;size&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;num_problems&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;vector&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;vector&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;input&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;test_case&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;test_case&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;inputs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;size&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;num_problems&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;input&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;push_back&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;inputs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]);&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;right_answer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;inputs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;test_case&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;inputs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;size&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;num_problems&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;output&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Solve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;input&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// 로직!&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;Score&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;output&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;right_answer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// 출력!&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;활용법&quot;&gt;활용법&lt;/h1&gt;

&lt;p&gt;실제 문제를 풀 때는 각 문제 사이트에 맞는 Problem class를 상속하고 Solve 함수만 구현하면 된다.&lt;/p&gt;

&lt;p&gt;밑 소스코드는 2020 카카오 인턴십 문제인 보석 쇼핑을 풀 때 사용한 것이다.&lt;/p&gt;

&lt;div class=&quot;language-cpp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// JewelShopping.h&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;JewelShopping&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ProgrammersProblem&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;nl&quot;&gt;public:&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;JewelShopping&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;FileFormat&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;file_format&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;vector&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Solve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;vector&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;vector&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;input&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;override&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;GetCatNum&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;vector&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;gems&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/CodingTestFramework8.png&quot; alt=&quot;Figure 1&quot; title=&quot;Figure 1&quot; width=&quot;100%&quot; height=&quot;100%&quot; class=&quot;align-center&quot; /&gt;
&lt;em&gt;Figure 1. 실행 결과&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Figure 1과 같이 main.cpp에서 Solve 함수를 호출하면 결과를 확인할 수 있다.&lt;/p&gt;

&lt;h1 id=&quot;결론&quot;&gt;결론&lt;/h1&gt;

&lt;p&gt;프레임워크를 [&lt;a href=&quot;https://github.com/jskim-research/CodingTest&quot;&gt;1&lt;/a&gt;] 에서 git pull을 통해 다운로드 받은 후에 visual studio로 바로 결과를 확인할 수 있으니 기존 문제 풀이 사이트만 이용하는 것보다 편리할 수 있을 것이다.&lt;/p&gt;

&lt;p&gt;다만 일반적인 프레임워크를 만든다는 것이 쉽지는 않은 일이며 무엇보다 많은 사람이 사용할 지 의문이 있다.&lt;/p&gt;

&lt;p&gt;이러한 프레임워크 설계에 관심이 있다면 연락 주길 바란다. 같이 한번 발전시켜볼 수 있을 것 같다.&lt;/p&gt;</content><author><name>Jisoo Kim</name></author><category term="CodingTest" /><summary type="html">Introduction</summary></entry><entry><title type="html">협업을 위한 github issue 작성방법</title><link href="https://jskim-research.github.io/github/GithubCreateIssue/" rel="alternate" type="text/html" title="협업을 위한 github issue 작성방법" /><published>2022-02-03T00:00:00+00:00</published><updated>2022-02-03T00:00:00+00:00</updated><id>https://jskim-research.github.io/github/GithubCreateIssue</id><content type="html" xml:base="https://jskim-research.github.io/github/GithubCreateIssue/">&lt;h1 id=&quot;introduction&quot;&gt;Introduction&lt;/h1&gt;

&lt;p&gt;[&lt;a href=&quot;https://velog.io/@junh0328/%ED%98%91%EC%97%85%EC%9D%84-%EC%9C%84%ED%95%9C-%EA%B9%83%ED%97%88%EB%B8%8C-%EC%9D%B4%EC%8A%88-%EC%9E%91%EC%84%B1%ED%95%98%EA%B8%B0&quot;&gt;1&lt;/a&gt;]을 참고하여 협업을 위한 github issue 작성 방법을 정리하고자 한다.&lt;/p&gt;

&lt;h1 id=&quot;순서&quot;&gt;순서&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;issue 생성&lt;/li&gt;
  &lt;li&gt;처리하고자 하는 이슈의 번호 확인&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git branch feature/8 // (처리기능/이슈번호)&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout feature/8&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git add .&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit -m &quot;Fix: ~~~로 변경 close #8&quot;&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push -u origin feature/8&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout master&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git merge feature/8&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;예시&quot;&gt;예시&lt;/h1&gt;

&lt;p&gt;[&lt;a href=&quot;https://github.com/jskim-research/CodingTest/issues/1&quot;&gt;2&lt;/a&gt;]와 같이 깃허브에서 issue를 생성할 수 있다.&lt;/p&gt;

&lt;p&gt;Issue에는 누가 해결할 것인지 (Assignees) 또는 issue의 특성은 무엇인지 (Labels) 등을 설정하여 추가적인 정보를 줄 수도 있다.&lt;/p&gt;

&lt;p&gt;또한 [&lt;a href=&quot;https://github.com/jskim-research/CodingTest/commit/08046f46e71c22d13b5e7e09ddc57973b3f4420a&quot;&gt;3&lt;/a&gt;] 처럼 commit message에 #이슈번호를 붙이면 자동적으로 이 issue와 관련된 commit로 [&lt;a href=&quot;https://github.com/jskim-research/CodingTest/issues/1&quot;&gt;2&lt;/a&gt;]에 나타나게 된다.&lt;/p&gt;

&lt;h1 id=&quot;결론&quot;&gt;결론&lt;/h1&gt;

&lt;p&gt;필자는 가끔 수정해야할 버그를 까먹고 나중에서야 발견하는 경향이 있다.&lt;/p&gt;

&lt;p&gt;일이 바쁘다보면 나중에 수정해야겠다고 생각했다가 잊어먹고 안하는 경우에 그렇다.&lt;/p&gt;

&lt;p&gt;그러나 본 글에서처럼 issue를 통해 기록해두면 까먹을 일도 없고 어떤 식으로 진행되어왔는지 한 눈에 볼 수 있어 좋은 것 같다.&lt;/p&gt;</content><author><name>Jisoo Kim</name></author><category term="Github" /><summary type="html">Introduction</summary></entry><entry><title type="html">Github 명령어 정리</title><link href="https://jskim-research.github.io/github/GithubCommand/" rel="alternate" type="text/html" title="Github 명령어 정리" /><published>2022-01-26T00:00:00+00:00</published><updated>2022-01-26T00:00:00+00:00</updated><id>https://jskim-research.github.io/github/GithubCommand</id><content type="html" xml:base="https://jskim-research.github.io/github/GithubCommand/">&lt;h1 id=&quot;introduction&quot;&gt;Introduction&lt;/h1&gt;
&lt;p&gt;실제와 같이 순차적으로 Repository 생성 =&amp;gt; 환경 설정 =&amp;gt; 파일 처리 명령어 순으로 정리함.&lt;/p&gt;

&lt;p&gt;이외의 것들은 Etc에 정리.&lt;/p&gt;

&lt;h1 id=&quot;github-repository-생성&quot;&gt;Github repository 생성&lt;/h1&gt;
&lt;p&gt;순서&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;github.com에서 new repository를 통해 remote repository를 생성한다.&lt;/li&gt;
  &lt;li&gt;remote repository를 복사하거나 기존 폴더에서 local repository를 생성한다.
    &lt;ul&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone [원격 저장소 주소]&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;기존 폴더에서 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git init&lt;/code&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h1 id=&quot;git-remote&quot;&gt;Git remote&lt;/h1&gt;
&lt;h2 id=&quot;local-repository와-remote-repository-연결&quot;&gt;local repository와 remote repository 연결&lt;/h2&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git remote add origin [remote repository 주소] or git remote add origin [branch 이름]
git remote -v // remote repository와 연결 확인
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;git-config&quot;&gt;Git config&lt;/h2&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git config --global user.name &quot;[사용자명]&quot;
git config --global user.email &quot;[사용자이메일명]&quot;
git status // git 상태 확인
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;파일-처리-명령어&quot;&gt;파일 처리 명령어&lt;/h1&gt;
&lt;h2 id=&quot;commit&quot;&gt;Commit&lt;/h2&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git add [파일명.확장자명] // [파일명.확장자명]을 스테이지에 올림
git commit -m &quot;[메시지명]&quot; // -m 없이 하는 것을 추천
git commit -a -m &quot;[메시지명]&quot; // 스테이징과 커밋을 동시에 진행 (add + commit)
git log // 커밋 내역 확인
git log --pretty=oneline // 커밋 내역 한 줄로 표기
git show [커밋 id] // 특정 커밋 내역 확인
git diff // 최근 버전과 작업 파일간 차이를 출력
git diff [이전 커밋 id] [이후 커밋 id]
git checkout [커밋 해시] // 지정한 커밋 해시로 이동
git reset HEAD^ // 현재 HEAD의 이전 커밋으로 되돌리기
git reset HEAD~n // 현재로부터 n번째 이전 커밋으로 되돌리기
git reset --soft [커밋ID] // head만 바뀜
git reset --mixed [커밋ID] // staging도 그 때로 바뀜
git reset --hard [커밋ID] // working 디렉토리 / staging 모두 그 때로 바뀜
git revert [커밋 해시] // 지정한 커밋 해시의 변경 이력을 취소
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;push&quot;&gt;Push&lt;/h2&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;// 보통 [저장소명] 을 origin으로 한다. =&amp;gt; git remote를 통해 정확한 저장소명을 알아낼 수 있음
git push [저장소명] [브랜치명] // 특정 저장소에 특정 브랜치의 코드 변경 이력을 올린다.
git push -u [저장소명] [브랜치명] // -u를 붙이면 다음부터는 git push만으로 올릴 수 있다.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Push 하기 전에 .gitignore 파일을 잘 추가했는지 확인하자. [&lt;a href=&quot;https://eunjin3786.tistory.com/302&quot;&gt;3&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;그리고 push 과정에서 access deny가 발생한다면 [&lt;a href=&quot;https://hyeo-noo.tistory.com/184&quot;&gt;2&lt;/a&gt;]을 확인하자.&lt;/p&gt;

&lt;h2 id=&quot;branch&quot;&gt;Branch&lt;/h2&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git branch // 로컬 branch 정보를 보여준다.
git branch -v // 로컬 branch의 정보와 마지막 커밋 내역을 함께 보여준다.
git branch -r // remote 저장소의 branch 정보를 보여준다.
git branch -a // local/remote 저장소의 모든 branch 정보를 보여준다.
git branch [브랜치명] // 로컬에 새로운 branch를 생성한다.
git checkout -b [브랜치명] // branch 생성과 동시에 해당 branch로 이동한다.
git checkout -t [remote 브랜치명] // remote에 있는 branch를 가져온다.
git branch --merged // merge된 branch 표시 (merge 및 *가 표시되지 않은 branch는 삭제 가능)
git branch --no-merged // 아직 merge 안된 branch 표시
git branch -d [브랜치명] // branch를 삭제한다. 아직 merge하지 않은 커밋을 담고 있는 경우 강제 종료 옵션 -D를 써야함
git branch -m [변경할 브랜치명] [변경될 브랜치명] // 브랜치 이름을 바꾼다. 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;etc&quot;&gt;Etc&lt;/h1&gt;
&lt;h2 id=&quot;github-message-convention-1&quot;&gt;Github message convention [&lt;a href=&quot;https://xtring-dev.tistory.com/entry/Git-규칙적인-Commit-메세지로-개발팀-협업하기-👾&quot;&gt;1&lt;/a&gt;]&lt;/h2&gt;

&lt;p&gt;커밋 메세지 7가지 규칙&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;제목과 본문을 빈 행으로 구분합니다.&lt;/li&gt;
  &lt;li&gt;제목을 50글자 이내로 제한합니다.&lt;/li&gt;
  &lt;li&gt;제목의 첫 글자는 대문자로 작성합니다.&lt;/li&gt;
  &lt;li&gt;제목의 끝에는 마침표를 넣지 않습니다.&lt;/li&gt;
  &lt;li&gt;제목은 명령문으로! 과거형을 사용하지 않습니다.&lt;/li&gt;
  &lt;li&gt;본문의 각 행은 72글자 내로 제한합니다.&lt;/li&gt;
  &lt;li&gt;어떻게 보다는 무엇과 왜를 설명합니다.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;커밋 메세지 구조&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;type&amp;gt;(&amp;lt;scope&amp;gt;): &amp;lt;subject&amp;gt; 
&amp;lt;BLANK LINE&amp;gt; 
&amp;lt;body&amp;gt;
&amp;lt;BLANK LINE&amp;gt;
&amp;lt;footer&amp;gt;

&amp;lt;type&amp;gt;:
feat : 새로운 기능에 대한 커밋 
fix : build 빌드 관련 파일 수정에 대한 커밋 
build : 빌드 관련 파일 수정에 대한 커밋 
chore : 그 외 자잘한 수정에 대한 커밋(기타 변경) 
ci : CI 관련 설정 수정에 대한 커밋 
docs : 문서 수정에 대한 커밋 
style : 코드 스타일 혹은 포맷 등에 관한 커밋 
refactor : 코드 리팩토링에 대한 커밋 
test : 테스트 코드 수정에 대한 커밋

예시
Feat: 관심지역 알림 ON/OFF 기능 추가(#123) 
시군구의 알림을 각각 ON/OFF 할 수 있도록 기능을 추가함 
- opnion0055: 구분 코드 
해결: close #123

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</content><author><name>Jisoo Kim</name></author><category term="Github" /><summary type="html">Introduction 실제와 같이 순차적으로 Repository 생성 =&amp;gt; 환경 설정 =&amp;gt; 파일 처리 명령어 순으로 정리함.</summary></entry><entry><title type="html">눈으로 보는 깃허브 페이지 (github page) 코드 분석: From code to HTML</title><link href="https://jskim-research.github.io/githubpage/GithubPageAnalysis/" rel="alternate" type="text/html" title="눈으로 보는 깃허브 페이지 (github page) 코드 분석: From code to HTML" /><published>2022-01-25T00:00:00+00:00</published><updated>2022-01-25T00:00:00+00:00</updated><id>https://jskim-research.github.io/githubpage/GithubPageAnalysis</id><content type="html" xml:base="https://jskim-research.github.io/githubpage/GithubPageAnalysis/">&lt;h1 id=&quot;introduction&quot;&gt;Introduction&lt;/h1&gt;

&lt;p&gt;깃허브 페이지를 처음 사용해보는 유저의 입장에서 코드를 분석하고자 한다.&lt;br /&gt;
&lt;del&gt;(실제로 작성자가 초보다.)&lt;/del&gt;&lt;/p&gt;

&lt;p&gt;여타 유투브 영상등을 통해 Minimal mistake와 같은 template을 fork해서 사이트를 만들었지만 코드 내용은 모르는 사람들을 타겟으로 한다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/github_page_code.png&quot; alt=&quot;Figure 1&quot; title=&quot;Figure 1&quot; width=&quot;50%&quot; height=&quot;50%&quot; class=&quot;align-center&quot; /&gt;
&lt;em&gt;Figure 1. Code structure&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/index_html_render.png&quot; alt=&quot;Figure 2&quot; title=&quot;Figure 2&quot; width=&quot;100%&quot; height=&quot;100%&quot; class=&quot;align-center&quot; /&gt;
&lt;em&gt;Figure 2. Output HTML&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;우선 template을 fork하고 나면 Figure 1과 같은 code structure을 가진다.&lt;/p&gt;

&lt;p&gt;그렇다면 Figure 1의 code가 Figure 2의 HTML로 어떻게 변환되는 것인가?&lt;/p&gt;

&lt;p&gt;이에 대한 궁금증을 풀어나가도록 하겠다. 그리고 이것을 이해하면 다른 공식 문서들을 이해하는 것도 한결 쉬워질 것이다.&lt;/p&gt;

&lt;h1 id=&quot;structure&quot;&gt;Structure&lt;/h1&gt;

&lt;p&gt;본 글의 코드는 깃허브 페이지와 코드 ([&lt;a href=&quot;https://ansohxxn.github.io/&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;https://github.com/ansohxxn/ansohxxn.github.io&quot;&gt;2&lt;/a&gt;])을 참고하여 진행한다.&lt;/p&gt;

&lt;h2 id=&quot;indexhtml&quot;&gt;/index.html&lt;/h2&gt;

&lt;p&gt;Github page를 만들고 가장 처음 접근하는 주소는 “https://user-name.github.io/”이다.&lt;/p&gt;

&lt;p&gt;“https://user-name.github.io/”을 주소창에 치면 Figure 1의 code structure에서 /index.html 이 호출된다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/index_html_code.png&quot; alt=&quot;Figure 3&quot; title=&quot;Figure 3&quot; width=&quot;100%&quot; height=&quot;100%&quot; class=&quot;align-center&quot; /&gt;
&lt;em&gt;Figure 3. index.html&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Figure 3의 /index.html을 보니 원하던 html 코드는 없고 생뚱맞은 내용과 이를 감싸는 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;---&lt;/code&gt; 들로 구성되어 있다.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;---&lt;/code&gt; 들로 감싼 부분을 머리말(front-matter)이라고 한다. 공식 문서[&lt;a href=&quot;https://jekyllrb-ko.github.io/docs/front-matter/&quot;&gt;3&lt;/a&gt;]을 참고하면 layout, sidebar_main, author_profile 들이 값을 저장하는 변수라는 것을 알 수 있다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;나중에 언급하겠지만 Liquid 라는 언어의 if, for 문 등을 이용해 최종 HTML 파일을 만든다. 변수들도 이러한 로직을 짤 때 사용된다.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;여기서는 layout 변수에 저장된 home에 집중하자.&lt;/p&gt;

&lt;p&gt;공식 문서[&lt;a href=&quot;https://jekyllrb-ko.github.io/docs/front-matter/&quot;&gt;3&lt;/a&gt;]에서도 layout이라는 사전 정의된 전역 변수에 대해 간략히 소개하고 있다. layout에 저장하는 이름을 layout_name이라고 했을 때 /_layouts/layout_name.html 파일을 이용하여 최종 html 파일을 만들겠다는 것이다.&lt;/p&gt;

&lt;p&gt;여기서는 /_layouts/home.html 을 이용하겠다는 것이 된다. 실제로 code structure에서 찾아보면 home.html이 이미 있을 것이다.&lt;/p&gt;

&lt;h2 id=&quot;_layoutshomehtml&quot;&gt;/_layouts/home.html&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/home_html.png&quot; alt=&quot;Figure 4&quot; title=&quot;Figure 4&quot; width=&quot;100%&quot; height=&quot;100%&quot; class=&quot;align-center&quot; /&gt;
&lt;em&gt;Figure 4. home.html&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;일단 Figure 4의 home.html을 보니까 뭔가 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;h3 class&amp;gt;&lt;/code&gt; 나 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;div&amp;gt;&lt;/code&gt; 등의 HTML code가 있다. 이게 실제로 어떻게 반영되는지 눈으로 확인해보자.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/home_html_render.png&quot; alt=&quot;Figure 5&quot; title=&quot;Figure 5&quot; width=&quot;100%&quot; height=&quot;100%&quot; class=&quot;align-center&quot; /&gt;
&lt;em&gt;Figure 5. home.html to HTML&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;참고로 Figure 5처럼 특정 부분의 HTML 소스코드를 보려면 특정 부분에 마우스를 대고 오른쪽 클릭 후 “검사”를 누르면 된다.&lt;/p&gt;

&lt;p&gt;Figure 5의 HTML 소스코드중 회색으로 변한 부분을 보도록 하자.&lt;/p&gt;

&lt;p&gt;회색 부분에 해당하는 HTML 소스코드인 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;h3 class=&quot;archive__subtitle&quot;&amp;gt;Recent posts&amp;lt;/h3&amp;gt;&lt;/code&gt;는 Figure 4의 home.html 8번 째 줄에 나온 부분과 같다.&lt;br /&gt;
(정확히 똑같진 않은데 중괄호로 감싼 부분은 Liquid 문법이니 그저 뭔가의 로직이 실행됐다고만 알고 지나가자.)&lt;/p&gt;

&lt;p&gt;그리고 바로 다음 이어지는 HTML 소스코드들이 바로 Figure 4의 다음 문장을 실행시킨 것이다.&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;entries-{{ entries_layout }}&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
  {% for post in posts %}
    {% include archive-single.html type=entries_layout %}
  {% endfor %}
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;for문이 반복문의 개념이고, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;archive-sigle.html&lt;/code&gt;이 특정 post를 list로 나열해주는 함수처럼 생각하면 해석은 간단하다.&lt;/p&gt;

&lt;p&gt;모든 post들을 담은 전역변수, posts에서 post를 하나씩 꺼내 페이지 list에 나열해주는 코드와 같다. (즉, Figure 5의 Recent posts 밑 부분처럼 post를 나열한다. 지금은 post가 한 개라서 하나만 나타남)&lt;/p&gt;

&lt;p&gt;그런데 home.html에 의해 생성된 HTML 코드들은 일부분의 코드일뿐 아직 전체 HTML 코드가 완성되지 않았다. 나머지 코드는 어디서 완성하는걸까?&lt;/p&gt;

&lt;p&gt;Figure 4. home.html의 머리말 (front-matter)을 다시 보면 layout: archive가 또 정의되어 있다.&lt;/p&gt;

&lt;p&gt;index.html에서 home.html로 넘어왔듯, 다시 한번 archive.html로 HTML 코드 생성의 역할이 넘어가게 된다.&lt;/p&gt;

&lt;p&gt;공식 문서[&lt;a href=&quot;https://jekyllrb-ko.github.io/docs/layouts/&quot;&gt;4&lt;/a&gt;]에서는 이를 layout 상속이라고 표현하는데 개인적인 생각으론 wrapper 개념에 가까운 듯 하다. 그 이유는 다음 sub-section에서 설명하겠다.&lt;/p&gt;

&lt;h2 id=&quot;_layoutsarchivehtml&quot;&gt;/_layouts/archive.html&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/archive_html.png&quot; alt=&quot;Figure 6&quot; title=&quot;Figure 6&quot; width=&quot;100%&quot; height=&quot;100%&quot; class=&quot;align-center&quot; /&gt;
&lt;em&gt;Figure 6. archive.html&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;결론적으로 말하자면 home.html의 모든 코드가 archive.html의 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;{{ content }}&lt;/code&gt;부분에 들어가게 된다.&lt;/p&gt;

&lt;p&gt;이를 확인하기 위해 Figure 6의 코드들중 파란색으로 감싼 부분들에 초점을 맞춰보자.&lt;/p&gt;

&lt;p&gt;가장 첫 줄인 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;div class=&quot;archive&quot;&amp;gt;&lt;/code&gt;는 Figure 5의 HTML 코드에서도 나온다. 회색으로 줄 친 부분 윗윗 줄이다. 그리고 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;{{ content }}&lt;/code&gt; 부분은 home.html의 코드로 대체되어 Figure 5의 회색 줄 부분이 시작되게 된다.&lt;/p&gt;

&lt;p&gt;마치 archive.html이 home.html을 감싸는 듯한 느낌이기에 상속보다는 wrapper가 더 좋은 묘사가 아닌가 싶다.&lt;/p&gt;

&lt;p&gt;하지만 archive.html도 머리말(front-matter)을 보면 default.html이라는 최상위 html에 의해 감싸지는 것을 확인할 수 있다.&lt;/p&gt;

&lt;h2 id=&quot;_layoutsdefaulthtml&quot;&gt;/_layouts/default.html&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/default_html.png&quot; alt=&quot;Figure 7&quot; title=&quot;Figure 7&quot; width=&quot;100%&quot; height=&quot;100%&quot; class=&quot;align-center&quot; /&gt;
&lt;em&gt;Figure 7. default.html&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;드디어 Figure 2의 최종 HTML 파일을 완전히 구성하는 태초의 HTML을 발견했다.&lt;/p&gt;

&lt;p&gt;HTML 소스코드의 시작과 끝은 &amp;lt;html&amp;gt; ~ &amp;lt;/html&amp;gt;이고 Figure 7에서 확인할 수 있다.&lt;/p&gt;

&lt;p&gt;물론, 여전히 이해가 안되는 중괄호 내의 Liquid 문법등이 남긴 했지만 이는 다음 글로 넘기도록 하겠다.&lt;/p&gt;

&lt;h1 id=&quot;summary&quot;&gt;Summary&lt;/h1&gt;

&lt;p&gt;본 글에서 알아가야할 것은 다음과 같다.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;“https://user-name.github.io/”을 주소창에 쳤을 때 처음으로 찾는 index.html 부터 최종적인 HTML 파일을 만들기까지의 코드 흐름&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;하지만 아직은 전체적인 그림만 본 것이기 때문에 바로 응용에 들어가기란 쉽지 않다.&lt;/p&gt;

&lt;p&gt;다른 사람들이 잘 만들어둔 깃허브 페이지와 코드[&lt;a href=&quot;https://ansohxxn.github.io/&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;https://github.com/ansohxxn/ansohxxn.github.io&quot;&gt;2&lt;/a&gt;]들을 잘 참고하면서 원하는 기능들을 하나씩 구현하다 보면 응용의 단계까지 금방 도달할 수 있으리라 생각한다.&lt;/p&gt;

&lt;p&gt;추가로 공식 문서[&lt;a href=&quot;https://jekyllrb-ko.github.io/docs/front-matter/&quot;&gt;3&lt;/a&gt;, &lt;a href=&quot;https://jekyllrb-ko.github.io/docs/layouts/&quot;&gt;4&lt;/a&gt;, &lt;a href=&quot;https://mmistakes.github.io/minimal-mistakes/docs/quick-start-guide/&quot;&gt;5&lt;/a&gt;]들도 잘 참고하도록 하자.&lt;/p&gt;

&lt;h1 id=&quot;references&quot;&gt;References&lt;/h1&gt;</content><author><name>Jisoo Kim</name></author><category term="GithubPage" /><summary type="html">Introduction</summary></entry></feed>