<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>dboy.log</title>
        <link>https://velog.io/</link>
        <description>HGU Computer Science 21 &amp;&amp; CRA 21-1 👨🏻‍💻</description>
        <lastBuildDate>Mon, 11 Sep 2023 08:13:45 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>dboy.log</title>
            <url>https://velog.velcdn.com/images/yeob-yi/profile/992a1257-a407-4d44-a38a-c8cf6e69af61/image.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. dboy.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/yeob-yi" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[책 리뷰] 실전 스프링 부트 / 스프링 부트 책 추천 ]]></title>
            <link>https://velog.io/@yeob-yi/%EC%B1%85%EB%A6%AC%EB%B7%B0-%EC%8B%A4%EC%A0%84%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8</link>
            <guid>https://velog.io/@yeob-yi/%EC%B1%85%EB%A6%AC%EB%B7%B0-%EC%8B%A4%EC%A0%84%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8</guid>
            <pubDate>Mon, 11 Sep 2023 08:13:45 GMT</pubDate>
            <description><![CDATA[<p>잠깐 쉬었던 컴퓨터 공부를 다시 시작하면서 자바부터 다시 복습하고 있다.</p>
<p>자바 언어 공부가 끝나면 어떤 공부를 할 지 생각하던 차에, 제이펍 출판사에서 모집하는 서평단에 당첨되어 책을 지원받았고, 덕분에 스프링 부트 공부를 시작하게 되었다.</p>
<p>책을 받고 처음 봤을 땐 책이 생각보다 두꺼워서 놀랐다.
<img src=https://velog.velcdn.com/images/yeob-yi/post/2bdab3d9-5bf5-4597-a142-8b29b3f4c2fa/image.jpeg width="300"></p>
<p>600쪽이 넘어갈 만큼 책이 두꺼워서 너무 어렵진 않을까 걱정을 했는데, 파일 코드와 그림, 도표같은 자료가 많아서 두꺼운 것 같다.</p>
<p>그만큼 설명이 자세하게 되어있다는 뜻으로 받아들이자 🌝</p>
<p>책은 초급에서 중급 수준의 독자를 대상으로 쓰였다고 한다. 초급 수준의 독자를 위해서인지 1장은 &#39;스프링 부트 시작하기&#39;로, 스프링 부트가 뭔지부터 프로젝트 구조, 파일 구조, 그리고 스프링 부트 개발자 도구 등 첫 개념을 잡기에 도움이 되게끔 쓰여있다.
<img src=https://velog.velcdn.com/images/yeob-yi/post/95bcbbdf-c522-4f39-ba50-1f227fa99716/image.jpeg height="300"></p>
<p>중급 수준의 독자도 고려했고, &#39;실용적&#39;인 책을 지향한다고 밝힌 만큼 책의 중, 후반부에 각종 데이터 베이스 연결이나 헤로쿠를 통한 배포 등의 내용도 담고 있어 실제로 개발할 때 필요한 내용까지 담았다는 것이 느껴졌다.
<img src=https://velog.velcdn.com/images/yeob-yi/post/73aa47e9-c116-4ffa-9ad0-5f94de55efdc/image.jpeg height="300"></p>
<p>스프링 시큐리티 고급 기능으로는 구글 리캡차 구현, 구글 오센티케이터 2단계 인증 구현 등 재미있어 보이는 내용도 많았다.</p>
<p>당장 적용해보고 싶었지만 아직 아직 스프링 부트 기본 활용도 잘 못하는 입문자라 아쉬웠다. 🥲</p>
<p>처음부터 천천히 다 안읽더라도, 일단 책이 있으면 후반에 스프링 부트 활용 부분은 개발하다가 필요할 때 찾아읽기에도 좋아보였다.</p>
<p>일단 개념공부 조금 더 하고,, 🫠 얼른 프로젝트 하면서 활용까지 해보고싶다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 코딩테스트 입문 - Day 7]]></title>
            <link>https://velog.io/@yeob-yi/ProgrammersBeginner-day7</link>
            <guid>https://velog.io/@yeob-yi/ProgrammersBeginner-day7</guid>
            <pubDate>Sun, 28 May 2023 14:38:31 GMT</pubDate>
            <description><![CDATA[<h2 id="day7-문자열-조건문-수학-반복문">[Day7] 문자열, 조건문, 수학, 반복문</h2>
<h3 id="q1-특정-문자-제거하기">Q1. 특정 문자 제거하기</h3>
<p><strong>Question</strong>
문자열 my_string과 문자 letter이 매개변수로 주어집니다. my_string에서 letter를 제거한 문자열을 return하도록 solution 함수를 완성해주세요.</p>
<p><strong>Constraints</strong></p>
<ul>
<li>1 ≤ my_string의 길이 ≤ 100</li>
<li>letter은 길이가 1인 영문자입니다.</li>
<li>my_string과 letter은 알파벳 대소문자로 이루어져 있습니다.</li>
<li>대문자와 소문자를 구분합니다.</li>
</ul>
<p><strong>Thinking</strong></p>
<ul>
<li>my_string에서 letter 제거 -&gt; my_string 중 letter가 아닌 문자를 answer 문자열에 추가</li>
</ul>
<p><strong>Answer</strong></p>
<pre><code class="language-java">class Solution {
    public String solution(String my_string, String letter) {
        String answer = &quot;&quot;;

        for(int i=0; i&lt;my_string.length(); i++){
            if(!(my_string.charAt(i) == letter.charAt(0) )) {
                answer += my_string.charAt(i);
            }
        }
        return answer;
    }
}</code></pre>
<ul>
<li>letter는 길이가 1인 영문자인데, String type으로 입력받기 때문에 처음에 문자열과 문자를 비교하는 식이 만들어져서 오류가 발생했다. -&gt; 어차피 길이가 1이기 때문에, charAt(0)으로 char과 char을 비교하도록 변경</li>
<li>(다른 사람의 풀이) answer = my_string.replace(letter, &quot;&quot;) -&gt; 천재일까 ?</li>
</ul>
<h3 id="q2-각도기">Q2. 각도기</h3>
<p><strong>Question</strong></p>
<p>각에서 0도 초과 90도 미만은 예각, 90도는 직각, 90도 초과 180도 미만은 둔각 180도는 평각으로 분류합니다. 각 angle이 매개변수로 주어질 때 예각일 때 1, 직각일 때 2, 둔각일 때 3, 평각일 때 4를 return하도록 solution 함수를 완성해주세요.</p>
<ul>
<li>예각 : 0 &lt; angle &lt; 90</li>
<li>직각 : angle = 90</li>
<li>둔각 : 90 &lt; angle &lt; 180</li>
<li>평각 : angle = 180</li>
</ul>
<p><strong>Constraints</strong></p>
<ul>
<li>0 &lt; angle ≤ 180</li>
<li>angle은 정수입니다.</li>
</ul>
<p><strong>Thinking</strong>
( 예각 = 1 ) 은 ( 90으로 나눈 몫 )이 ( 0 )이고, ( 90으로 나눈 나머지 )가 ( 있 )다.
( 직각 = 2 ) 은 ( 90으로 나눈 몫 )이 ( 1 )이고, ( 90으로 나눈 나머지 )가 ( 없 )다.
( 둔각 = 3 ) 은 ( 90으로 나눈 몫 )이 ( 1 )이고, ( 90으로 나눈 나머지 )가 ( 있 )다.
( 평각 = 4 ) 은 ( 90으로 나눈 몫 )이 ( 2 )이고, ( 90으로 나눈 나머지 )가 ( 없 )다.</p>
<p>if( 90으로 나눈 나머지 )가 ( 있 )으면, 각은 ( 90*2 )
else( 90으로 나눈 나머지 )가 ( 없 )으면 각은 ( 90*2 + 1 )</p>
<ul>
<li>처음엔 if문으로 1, 2, 3, 4의 경우를 다 하려고 했는데, 한 줄로 구할 수 있을 것 같아서 네 가지 경우를 나눠서 식을 세우고 문제를 해결했다.</li>
</ul>
<p><strong>Answer</strong></p>
<pre><code class="language-java">class Solution {
    public int solution(int angle) {
        int answer = 0;

        answer = (angle/90)*2 + ((angle%90==0)? 0: 1);

        return answer;
    }
}</code></pre>
<ul>
<li>(다른 사람의 풀이) return angle == 180 ? 4 : angle &lt; 90 ? 1 : angle == 90 ? 2 : angle &gt; 90 ? 3 : 0;
똑같이 한줄로 풀었는데, 이 코드의 가독성이 더 좋은 것 같다. 무조건 짧다고 더 좋은 코드는 아닌 것 같다.</li>
</ul>
<h3 id="q3-양꼬치">Q3. 양꼬치</h3>
<p><strong>Question</strong>
머쓱이네 양꼬치 가게는 10인분을 먹으면 음료수 하나를 서비스로 줍니다. 양꼬치는 1인분에 12,000원, 음료수는 2,000원입니다. 정수 n과 k가 매개변수로 주어졌을 때, 양꼬치 n인분과 음료수 k개를 먹었다면 총얼마를 지불해야 하는지 return 하도록 solution 함수를 완성해보세요.</p>
<p><strong>Constraints</strong></p>
<ul>
<li>0 &lt; n &lt; 1,000</li>
<li>n / 10 ≤ k &lt; 1,000</li>
<li>서비스로 받은 음료수는 모두 마십니다.</li>
</ul>
<p><strong>Thinking</strong>
total = ( 양꼬치 가격 ) * ( 수량 ) + ( 음료수 가격 ) * ( 수량 - 서비스 수량 )</p>
<p><strong>Answer</strong></p>
<pre><code class="language-java">class Solution {
    public int solution(int n, int k) {
        int answer = 0;
        answer = 12000*n + 2000*(k-n/10);
        return answer;
    }
}</code></pre>
<h3 id="q4-짝수의-합">Q4. 짝수의 합</h3>
<p><strong>Question</strong>
정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요.</p>
<p><strong>Constraints</strong>
0 &lt; n ≤ 1000</p>
<p><strong>Thinking</strong>
반복문, 2씩 증가</p>
<p><strong>Answer</strong></p>
<pre><code class="language-java">class Solution {
    public int solution(int n) {
        int answer = 0;
        for(int i=2; i&lt;=n; i+=2) answer += i;
        return answer;
    }
}</code></pre>
<ul>
<li>(다른 사람의 풀이) return IntStream.rangeClosed(0, n).filter(e -&gt; e % 2 == 0).sum(); -&gt; 스트림 스트림 스트림 공부 !!</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 코딩테스트 입문 Day 6]]></title>
            <link>https://velog.io/@yeob-yi/Programmersbeginner-day6</link>
            <guid>https://velog.io/@yeob-yi/Programmersbeginner-day6</guid>
            <pubDate>Fri, 26 May 2023 15:18:42 GMT</pubDate>
            <description><![CDATA[<h2 id="day-6-문자열-반복문-출력-배열-조건문">[Day 6] 문자열, 반복문, 출력, 배열, 조건문</h2>
<h3 id="q1-문자열-뒤집기">Q1. 문자열 뒤집기</h3>
<p><strong>Question</strong>
문자열 my_string이 매개변수로 주어집니다. my_string을 거꾸로 뒤집은 문자열을 return하도록 solution 함수를 완성해주세요.</p>
<p><strong>Constraints</strong>
1 ≤ my_string의 길이 ≤ 1,000</p>
<p><strong>Thinking</strong></p>
<ul>
<li>String은 char의 배열 -&gt; char 배열을 만들어서 거꾸로 뒤집기로 생각</li>
<li>String.charAt() 메서드를 찾다가 string 자체에 + 연산을 할 수 있음을 알게됨</li>
</ul>
<p><strong>Answer</strong></p>
<pre><code class="language-java">class Solution {
    public String solution(String my_string) {
        String answer = &quot;&quot;;
        for(int i=0; i&lt;my_string.length(); i++){
            answer += my_string.charAt(my_string.length()-i-1);
        }

        return answer;
    }
}</code></pre>
<ul>
<li>다른사람의 풀이에서 StringBuilder의 reverse 메서드를 써서 바로 해결하는 풀이를 봤다. StringBuilder 공부해보기</li>
</ul>
<h3 id="q2-직각삼각형-출력하기">Q2. 직각삼각형 출력하기</h3>
<p><strong>Question</strong>
&quot;*&quot;의 높이와 너비를 1이라고 했을 때, &quot;*&quot;을 이용해 직각 이등변 삼각형을 그리려고합니다. 정수 n 이 주어지면 높이와 너비가 n 인 직각 이등변 삼각형을 출력하도록 코드를 작성해보세요.</p>
<p><strong>Constraints</strong>
1 ≤ n ≤ 10</p>
<p><strong>Thinking</strong>
높이와 너비가 n인 직각 이등변 삼각형
n개 줄, 최대 n개 -&gt; n번째 줄에 n개 출력</p>
<p><strong>Answer</strong></p>
<pre><code class="language-java">import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        for(int i=1; i&lt;=n; i++){
            for(int j=1; j&lt;=i; j++){
                System.out.print(&quot;*&quot;);
            }
            System.out.print(&quot;\n&quot;);
        }
    }
}</code></pre>
<h3 id="q3-짝수-홀수-개수">Q3. 짝수 홀수 개수</h3>
<p><strong>Question</strong>
정수가 담긴 리스트 num_list가 주어질 때, num_list의 원소 중 짝수와 홀수의 개수를 담은 배열을 return 하도록 solution 함수를 완성해보세요.</p>
<p><strong>Constraints</strong></p>
<ul>
<li>1 ≤ num_list의 길이 ≤ 100</li>
<li>0 ≤ num_list의 원소 ≤ 1,000</li>
</ul>
<p><strong>Thinking</strong></p>
<ul>
<li>짝수와 홀수의 개수를 담은 배열 -&gt; <code>int [] answer = {0, 0};</code>
형태로 선언 (원소 두 개)</li>
<li>num_list 원소 개수만큼 반복하면서 홀짝 여부 확인</li>
</ul>
<p><strong>Answer</strong></p>
<pre><code class="language-java">class Solution {
    public int[] solution(int[] num_list) {
        int[] answer = {0, 0};
        for(int i=0; i&lt;num_list.length; i++){
            if(num_list[i]%2==0) answer[0]++;
            else answer[1]++;
        }
        return answer;
    }
}</code></pre>
<ul>
<li>다른 사람의 풀이) 반복문 안에 if문 사용할 필요 없이 <code>answer[num_list[i] % 2]++;</code> 코드 사용 가능</li>
</ul>
<h3 id="q4-문자-반복-출력하기">Q4. 문자 반복 출력하기</h3>
<p><strong>Question</strong>
문자열 my_string과 정수 n이 매개변수로 주어질 때, my_string에 들어있는 각 문자를 n만큼 반복한 문자열을 return 하도록 solution 함수를 완성해보세요.</p>
<p><strong>Constraints</strong></p>
<ul>
<li>2 ≤ my_string 길이 ≤ 5</li>
<li>2 ≤ n ≤ 10</li>
<li>&quot;my_string&quot;은 영어 대소문자로 이루어져 있습니다.</li>
</ul>
<p><strong>Thinking</strong></p>
<ul>
<li>빈 문자열(&quot;&quot;)로 시작 -&gt; 반복문안에서 charAt(), n번만큼 더하기</li>
</ul>
<p><strong>Answer</strong></p>
<pre><code class="language-java">class Solution {
    public String solution(String my_string, int n) {
        String answer = &quot;&quot;;
        for(int i=0; i&lt;my_string.length(); i++){
            for(int j=0; j&lt;n; j++){
                answer += my_string.charAt(i);
            }
        }

        return answer;
    }
}</code></pre>
<ul>
<li>다른사람의 풀이) stringBuilder의 append, repeat 메서드 공부해보기</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 코딩테스트 입문 - Day 5]]></title>
            <link>https://velog.io/@yeob-yi/Programmersbeginner-day5</link>
            <guid>https://velog.io/@yeob-yi/Programmersbeginner-day5</guid>
            <pubDate>Tue, 23 May 2023 14:24:42 GMT</pubDate>
            <description><![CDATA[<h2 id="day5-수학-배열">[Day5] 수학, 배열</h2>
<h3 id="q1-옷가게-할인-받기">Q1. 옷가게 할인 받기</h3>
<p><strong>Question</strong>
머쓱이네 옷가게는 10만 원 이상 사면 5%, 30만 원 이상 사면 10%, 50만 원 이상 사면 20%를 할인해줍니다.
구매한 옷의 가격 price가 주어질 때, 지불해야 할 금액을 return 하도록 solution 함수를 완성해보세요.</p>
<p><strong>Thinking</strong></p>
<ol>
<li>if문 사용. 50만원 이상/30만원 이상/10만원 이상/10만원 이하 인 경우로 나눠 답 계산 (50만원 이상이 가장 범위가 넓으니까 50만원 이상부터 시작)</li>
</ol>
<p><strong>Answer</strong>
1차 답안</p>
<pre><code class="language-java">class Solution {
    public int solution(int price) {
        int answer = 0;

        // case 1: 50만원 이상
        if(price&gt;=500000) answer = price*0.8;
        // case 2: 30만원 이상
        else if(price&gt;=300000) answer = price*0.9;
        // case 3: 10만원 이상
        else if(price&gt;=100000) answer = price*0.95;
        // case 4: else (10만원 미만)
        else answer = price;

        return answer;
    }
}</code></pre>
<p>코드 실행 중 possible lossy conversion from double to int 오류 발생
-&gt; <strong>강제 형변환</strong>으로 해결</p>
<p>2차 답안 (최종)</p>
<pre><code class="language-java">class Solution {
    public int solution(int price) {
        int answer = 0;

        // 50만원 이상일 경우
        if(price&gt;=500000) answer = (int)(price*0.8);
        // 30만원 이상일 경우
        else if(price&gt;=300000) answer = (int)(price*0.9);
        // 10만원 이상일 경우
        else if(price&gt;=100000) answer = (int)(price*0.95);
        else answer = price;

        return answer;
    }
}</code></pre>
<h3 id="q2-아이스-아메리카노">Q2. 아이스 아메리카노</h3>
<p><strong>Question</strong>
머쓱이는 추운 날에도 아이스 아메리카노만 마십니다. 아이스 아메리카노는 한잔에 5,500원입니다. 머쓱이가 가지고 있는 돈 money가 매개변수로 주어질 때, 머쓱이가 최대로 마실 수 있는 아메리카노의 잔 수와 남는 돈을 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.</p>
<p><strong>Thinking</strong></p>
<ol>
<li>필요한 변수 2개; money를 5500으로 나눈 몫, 나머지</li>
<li>배열을 return -&gt; 처음부터 배열 길이 2로 선언</li>
</ol>
<p><strong>Answer</strong></p>
<pre><code class="language-java">class Solution {
    public int[] solution(int money) {
        int[] answer = {0, 0};

        answer[0] = (int)(money/5500);
        answer[1] = (int)(money%5500);

        return answer;
    }
}</code></pre>
<h3 id="q3-나이-출력">Q3. 나이 출력</h3>
<p><strong>Question</strong>
머쓱이는 40살인 선생님이 몇 년도에 태어났는지 궁금해졌습니다. 나이 age가 주어질 때, 2022년을 기준 출생 연도를 return 하는 solution 함수를 완성해주세요.</p>
<p><strong>Constraints</strong></p>
<ul>
<li>0 &lt; age ≤ 120</li>
<li>나이는 태어난 연도에 1살이며 1년마다 1씩 증가합니다.</li>
</ul>
<p><strong>Thinking</strong>
2022년 기준, 2022년생이 1살 -&gt; birth_year = 2022 - age + 1</p>
<p><strong>Answer</strong></p>
<pre><code class="language-java">class Solution {
    public int solution(int age) {
        int answer = 2022-age+1;

        return answer;
    }
}</code></pre>
<h3 id="q4-배열-뒤집기">Q4. 배열 뒤집기</h3>
<p><strong>Question</strong>
정수가 들어 있는 배열 num_list가 매개변수로 주어집니다. num_list의 원소의 순서를 거꾸로 뒤집은 배열을 return하도록 solution 함수를 완성해주세요.</p>
<p><strong>Constraints</strong></p>
<ul>
<li>1 ≤ num_list의 길이 ≤ 1,000</li>
<li>0 ≤ num_list의 원소 ≤ 1,000</li>
</ul>
<p><strong>Thinking</strong>
매개변수로 들어오는 배열의 길이를 알 수 없다 -&gt; num_list.length 크기의 배열 선언
반복문 이용해 순서 거꾸로 뒤집기</p>
<p><strong>Answer</strong></p>
<pre><code class="language-java">class Solution {
    public int[] solution(int[] num_list) {
        int len = num_list.length;
        int[] answer = new int[len];

        for(int i=0; i&lt;len; i++){
            answer[i] = num_list[len-1-i];
        }

        return answer;
    }
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[git 설치 및 설정]]></title>
            <link>https://velog.io/@yeob-yi/git-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%84%A4%EC%A0%95</link>
            <guid>https://velog.io/@yeob-yi/git-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%84%A4%EC%A0%95</guid>
            <pubDate>Mon, 26 Dec 2022 10:29:01 GMT</pubDate>
            <description><![CDATA[<h2 id="homebrew-설정">homebrew 설정</h2>
<p>사실 homebrew와 git 모두 저번에 설치는 했었는데, 딱 설치만 하고 아무것도 하지 않아 사용하기 전 초기 설정을 했다.</p>
<p>hombrew 설치하고나서 처음에 path 설정을 해주어야한다는데, 저번에 안했던 것 같아 구글에서 찾아서 설정해줬다.</p>
<pre><code class="language-bash">echo &quot;export PATH=/opt/homebrew/bin:$PATH&quot; &gt;&gt; ~/.zshrc</code></pre>
<p>똑바로 한거 맞겠지 ..?</p>
<h2 id="git-설정">git 설정</h2>
<pre><code class="language-bash">git config --global init.defaultBranch main
git config --global core.editor &quot;code --wait&quot;</code></pre>
<p>default branch 이름을 마스터에서 메인으로 바꾸고, 기본 에디터를 vim에서 vscode로 바꾸는 코드라고 했다.</p>
<pre><code>git config --global user.email &quot;-@naver.com&quot;
git config --global user.name &quot;~&quot;</code></pre><p>사용자 이름이랑 메일주소 설정 코드</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[파이썬 가상환경:: 아나콘다 사용하기]]></title>
            <link>https://velog.io/@yeob-yi/conda</link>
            <guid>https://velog.io/@yeob-yi/conda</guid>
            <pubDate>Sun, 01 May 2022 03:36:35 GMT</pubDate>
            <description><![CDATA[<p>작년에 한참 selenium을 이용해 크롤링하는 토이프로젝트를 해볼 때, 아나콘다를 사용하긴 했지만 정확히 아나콘다가 무엇인지도 알지 못했고, 가상환경의 개념도 이해가 어려웠다. 🥺</p>
<p>인공지능 입문 수업을 들으며 텐서플로, 사이킷런, 케라스 등 여러 파이썬 라이브러리를 사용할 일이 생겼는데, 파이썬 버전의 문제로 텐서프롤가 깔리지 않아 아나콘다를 사용했다.</p>
<p>이제는 가상환경의 개념을 어느정도 이해 했고, 적절하게 사용도 할 수 있게 된 것 같다.</p>
<p>나는 멋쨍이 2학년 😎</p>
<h1 id="아나콘다🐍-">아나콘다🐍 ?</h1>
<p>파이썬에는 다양한 라이브러리가 존재한다.</p>
<p>원래는 pip를 이용해 그러한 라이브러리들을 설치할 수 있지만, </p>
<ol>
<li>최신 파이썬 버전을 지원하지 않는 라이브러리가 있을 수도 있고 </li>
<li>프로젝트마다 파이썬 혹은 라이브러리의 버전을 다르게 하고 싶을 수도 있다</li>
</ol>
<p>그럴 때 아나콘다를 사용할 수 있다.</p>
<p>아나콘다는 프로젝트마다 다른 환경을 만들어(가상환경) 하나의 컴퓨터에서 여러 버전을 넘나들며 이용할 수 있게 해주고, 환경마다 필요한 패키지를 설치 및 제거하는 것을 도와준다.</p>
<p>특히, 일단 아나콘다를 설치하기만 하면 numpy와같이 기본적인 패키지들은 설치되기 때문에 더욱 편리하다.</p>
<h1 id="아나콘다-사용하기">아나콘다 사용하기</h1>
<p>설치는 되어있다는 가정 하에, 실질적인 사용 방법을 정리해보겠다.</p>
<h2 id="설치-확인하기">설치 확인하기</h2>
<ol>
<li>버전 확인: <code>conda --version</code>
현재 설치되어있는 아나콘다의 버전을 확인할 수 있다.</li>
<li>설치되어있는 파이썬 라이브러리 확인: <code>conda list</code>
현재 설치되어있는 파이썬 라이브러리가 출력된다.</li>
</ol>
<h2 id="새로운-패키지-설치-및-제거">새로운 패키지 설치 및 제거</h2>
<ol>
<li>패키지 설치: <code>conda install 패키지이름</code>
ex) <code>conda install tensorflow</code></li>
<li>패키지 제거: <code>conda remove 패키지이름</code></li>
</ol>
<p>새로운 패키지를 설치하다가 오류가 날 경우, <code>conda update --all</code>을 통해 기존에 설치된 패키지들을 업그레이드 해보자.</p>
<h2 id="가상환경-사용하기">가상환경 사용하기</h2>
<p>설치하려고 하는 라이브러리가 컴퓨터에 설치된 파이썬 버전을 지원하지 않는 경우도 있다.
<img src="https://velog.velcdn.com/images/yeob-yi/post/049a13f2-6e9f-49bd-8a70-cff70654051c/image.png" alt="설치오류"></p>
<p>(대충 텐서플로 쓰고싶으면 파이썬 버전 2.7.* / 3.7.* / 3.6.* / 3.5.* 깔라는 얘기)</p>
<p>그런데 컴퓨터에 깔려있는 파이썬 버전을 올리거나 내리고 싶지는 않을 때, 가상환경을 생성해 해결할 수 있다!</p>
<ol start="0">
<li>컴퓨터에 존재하는 가상환경 목록 보기: <code>conda info --envs</code></li>
<li>가상환경 생성: <code>conda create --name 가상환경이름 python=파이썬버전</code>
ex) <code>conda create --name JoyAI python=3.7</code>
지정해준 파이썬 버전이 설치된 JoyAI라는 가상환경이 생성된다.</li>
<li>가상환경 전환: <code>conda activate 가상환경이름</code>
ex) <code>conda activate JoyAI</code>
JoyAI라는 이름의 가상환경으로 전환된다.</li>
</ol>
<p>현재 내가 어떤 환경에 있는지는 터미널 가장 왼쪽의 괄호로 알 수 있다.
<img src="https://velog.velcdn.com/images/yeob-yi/post/8805d709-343b-44fd-9d0a-302998cdb0b9/image.png" alt="">
첫 번째 줄에서 <code>conda activate JoyAI</code>를 하기 전에는 base에 있었고, 위 명령을 통해 JoyAI라는 환경으로 전환되었다.
두 번째 줄에서 tensorflow를 설치한 곳은 JoyAI 환경이고, base로 돌아가면 tensorflow를 이용할 수 없다.</p>
<ol start="3">
<li>가상환경 종료하고 base로 돌아가기: <code>conda deactivate</code>
JoyAI 환경에서 base로 돌아간 것을 확인할 수 있다.
<img src="https://velog.velcdn.com/images/yeob-yi/post/b5062638-fece-45fa-9928-62c5f696ea3c/image.png" alt=""></li>
</ol>
<p>이제 가상환경 생성 및 패키지 설치 정도는 자유롭게 할 수 있다 !!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Github 프로필 꾸미기 : productive box, stats box]]></title>
            <link>https://velog.io/@yeob-yi/Github-%ED%94%84%EB%A1%9C%ED%95%84-gist</link>
            <guid>https://velog.io/@yeob-yi/Github-%ED%94%84%EB%A1%9C%ED%95%84-gist</guid>
            <pubDate>Sat, 30 Apr 2022 19:30:45 GMT</pubDate>
            <description><![CDATA[<p>GitHub README 꾸미기 | gist 꾸미기 | productive-box | github-stats-box</p>
<p>오랜만에 깃헙 프로필 꾸미기 병이 도졌다. <del>또 하라는 코딩은 안하고 이런거나 좋아하고</del></p>
<p>이번엔 GitHub Stats(깃허브 통계)와 productive box(커밋 시간대 통계)를 달아봤다.</p>
<p>gist 만들고, 토큰 발급하고, 레포지토리 포크 뜨고, 변수 몇 개 설정해준 뒤 액션 탭에서 enable 해주면 끝나지만, <del>해보기 전의 나는 몰랐기 때문에</del> 정리해두려고 한다.</p>
<h1 id="1-사전-준비">1. 사전 준비</h1>
<h2 id="11-gist-만들기">1.1 gist 만들기</h2>
<blockquote>
<p>GitHub gist? 코드 조각, 로그, 메모 등을 남길 때 사용할 수 있다고 한다.</p>
</blockquote>
<p>사실 정확하게 뭔지는 모르겠지만, 대충 크기 작은 파일 하나 쓸 수 있는 레포지토리같은 느낌(?)인 것 같다.</p>
<ol>
<li>깃허브 우측 상단 프로필 옆에 있는 🔽모양 아이콘 눌러서 New gist 눌러서 만들 수도 있고,
<img src="https://velog.velcdn.com/images/yeob-yi/post/01be9922-2859-4873-88f8-8084dd591bd5/image.png" alt="토글 버튼 눌렀을 때"> </li>
<li>그냥 <a href="https://gist.github.com/new">https://gist.github.com/new</a> 링크 이용해서 만들수도 있다.</li>
</ol>
<p>description은 비워두어도 되고, 제목, 내용 모두 아무거나 쓰면 된다.
어차피 나중에 productive box, stats box 내용에 맞게 바뀐다.
<img src="https://velog.velcdn.com/images/yeob-yi/post/ae22434b-2168-48f5-b1df-73ae18b630e4/image.png" alt="gist 생성화면">
* 단, 생성할 때 <strong>public</strong>으로 생성해주어야 한다!</p>
<p>1단계 끝 !</p>
<h2 id="12-토큰-발급하기">1.2 토큰 발급하기</h2>
<p>내 커밋과 각종 깃헙 기록들을 분석한 내용이 담길 것이기 때문에 토큰이 필요하다. </p>
<ol>
<li>Settings &gt; Developer settings &gt; Personal Access Tokens 들어가서 Create new token 해서 만들 수 있는데,</li>
<li><a href="https://github.com/settings/tokens/new">https://github.com/settings/tokens/new</a> 누르면 바로 갈 수 있다.</li>
</ol>
<p>Expiration은 마음대로 하고, repo, user에 권한을 주어야 한다.<img src="https://velog.velcdn.com/images/yeob-yi/post/71596812-6876-457e-889e-5a6876b3cf6b/image.png" alt=""></p>
<p>토큰은 처음 만들었을 때 밖에 안보여주니까 어디 잘 복사해두자</p>
<p>사전준비 끝</p>
<h1 id="2-프로젝트-셋업">2. 프로젝트 셋업</h1>
<h2 id="21-레포지토리-포크하기">2.1 레포지토리 포크하기</h2>
<p><a href="https://github.com/bokub/github-stats-box">My-GiHub-Stats</a>와 <a href="https://github.com/techinpark/productive-box">Productive-box</a> 레포지토리에 들어가서 포크 해온다.</p>
<p>설명 필요없징 ?_?</p>
<h2 id="22-토큰-넣어주기">2.2 토큰 넣어주기</h2>
<p>포크 떠 온 (내) 레포지토리에서, Settings &gt; Secrets &gt; Actions에 들어간다.
New repository secret을 누르고, Name에 <code>GH_TOKEN</code>을, <code>value</code>에 1.2에서 발급받은 토큰을 넣어준다. 
<img src="https://velog.velcdn.com/images/yeob-yi/post/614b4499-b308-4727-b8c0-84e97e33cee4/image.png" alt="new repository secret"></p>
<p>Add secret 버튼을 누르면 이러한 레포지토리 시크릿이 생성되어있다. 
<img src="https://velog.velcdn.com/images/yeob-yi/post/3da0ef9c-f8b4-4548-8bbd-3be19d0ab68c/image.png" alt="GH_TOKEN"></p>
<h3 id="221-productive-box">2.2.1 Productive box</h3>
<p>stats box는 <code>GIST_ID</code>를 코드에 바로 넣는 방식인데, productive box는 변수로 넣는 방식으로 되어있다.</p>
<p>1.1에서 생성한 gist의 주소 <code>gist.github.com/사용자이름/fasodaosngsiaogah</code>(막 친거임 내 gist 주소 아님) 중 마지막 부분 *<em><code>fasodaosngsiaogah</code> *</em>을 repository secrets에 추가해주면 된다. </p>
<p>GH_TOKEN과 동일하게 Settings &gt; Secrets &gt; Actions에 Name에 <code>GIST_ID</code>를, value에 <strong><code>fasodaosngsiaogah</code></strong> 부분을 넣어주면 된다.</p>
<h2 id="23-enable-해주기">2.3 enable 해주기</h2>
<p>레포지토리의 Actions 탭에서 enable 해주면 된다.
Upgrade Github Stats Gist (GitHub stats gist) / Update gist (productive box) 를 enable 해주면 된다.</p>
<h2 id="24-코드-수정">2.4 코드 수정</h2>
<h3 id="241-github-stats-box">2.4.1 GitHub-stats-box</h3>
<p><code>.github/workflows</code> 디렉토리에 들어가 run.yml 파일을 수정해준다.
1.1에서 생성한 gist의 주소가 <code>gist.github.com/사용자이름/fasodaosngsiaogah</code> 으로 나올텐데, 사용자 이름 뒤의 <strong><code>fasodaosngsiaogah</code></strong> 부분을 <code>GIST_ID:</code> 부분에 넣어주면 된다.</p>
<p>파일에 들어가서 오른쪽에 연필 모양을 누르면 깃허브에서 바로 수정이 가능하다! <del>(나만 아는 꿀팁인척)</del>
<img src="https://velog.velcdn.com/images/yeob-yi/post/50b389b8-a086-4daf-b2b7-d40cdd170cf0/image.png" alt=""></p>
<p><code>GIST_ID</code> 아래에 <code>ALL_COMMITS</code>와 <code>K_FORMAT</code>도 수정할 수 있다.
true가 default로 되어있는<code>ALL_COMMITS</code>를 false로 바꾸면 last year commits만 세아려준다.
false가 default로 되어있는 <code>K_FORMAT</code>을 true로 바꾸면 k 단위로 숫자를 표시해준다.</p>
<p>나는 아직 그만큼 커밋이 많거나 하지 않아서 그대로 뒀다.</p>
<h1 id="사후-작업">사후(?) 작업</h1>
<p>변경 사항을 커밋하고 프로필에 들어오면, 당연히(?) 아무 변화도 없다.</p>
<p>당황하지 말고 README customize your pins에서 새로 추가한 gist 두 개를 체크해준다.
<img src="https://velog.velcdn.com/images/yeob-yi/post/13690d73-e2de-4fe2-978a-c03a703e4568/image.png" alt=""></p>
<p>아까 gist 생성할 때 막 쳤던 내용이 뜬다면 포크해온 레포지토리의 readme를 살짝 수정해주고 Actions에서 build 되는 것을 잠시 기다려준 뒤 다시 프로필로 돌아오면 해결된다.</p>
<p>끝 !</p>
<p><img src="https://velog.velcdn.com/images/yeob-yi/post/9ad399cd-2c84-415a-9b55-dafb5aee8682/image.png" alt="">
* 저는 부엉이었다고 합니다</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준] 4673: 셀프 넘버]]></title>
            <link>https://velog.io/@yeob-yi/boj-4673</link>
            <guid>https://velog.io/@yeob-yi/boj-4673</guid>
            <pubDate>Mon, 18 Apr 2022 13:06:39 GMT</pubDate>
            <description><![CDATA[<h1 id="문제">문제</h1>
<p>[Silver_V] 정답 비율: 48%</p>
<p><a href="https://www.acmicpc.net/problem/4673">https://www.acmicpc.net/problem/4673</a></p>
<h1 id="생각">생각</h1>
<ol>
<li>생성자를 찾기는 힘들다. 배열을 만들고 생성자가 있는 수를 따로 표시해서 제외하는 방향으로 하자.</li>
<li>생성자를 찾는 계산은 따로 함수로 만들자</li>
</ol>
<h1 id="배운-점">배운 점</h1>
<ul>
<li>처음엔 result가 10000보다 큰 수가 나오면 바로 종료시켰는데, 그랬더니 뒷부분의 생성자가 있는 수들 중에 몇 개가 제외되지 않고 그대로 출력되었다.
알고보니 반복의 마지막즈음에 result가 10000보다 커졌다가 다시 작아지는 부분이 있었다.</li>
<li><blockquote>
<p>반복의 끝부분까지 꼼꼼히 확인해보자. 항상 증가하거나 항상 감소하지 않을 수 있다.</p>
</blockquote>
</li>
<li>이거,,, 생각보다 실버도 풀만 하잖아,,,?</li>
</ul>
<h1 id="코드">코드</h1>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;

int calculate(int num);

int main(){
    int result=0;
    int check[10000] = {0, };
    result = calculate(1);
    for(int i=2; i&lt;10000; i++){
        if(result-1 &lt; 10000)
            check[result-1] = 1;
        result = calculate(i);
    }

    for(int i=0; i&lt;10000; i++){
        if(check[i]==0)
            printf(&quot;%d\n&quot;, i+1);
    }
}

int calculate(int num){
    int ans;

    ans = num;
    do{
        ans += num%10;
    }while((num/=10) != 0);

    return ans;
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준] 2839: 설탕 배달]]></title>
            <link>https://velog.io/@yeob-yi/boj-2839</link>
            <guid>https://velog.io/@yeob-yi/boj-2839</guid>
            <pubDate>Mon, 18 Apr 2022 12:57:06 GMT</pubDate>
            <description><![CDATA[<h1 id="문제">문제</h1>
<p>[Bronze_I] 정답 비율: 34%</p>
<p><a href="https://www.acmicpc.net/problem/2839">https://www.acmicpc.net/problem/2839</a></p>
<h1 id="생각">생각</h1>
<ol>
<li>0~(5로 나눈 몫)만큼 반복하면서, 5로 나눈 나머지를 3으로 나눈 나머지가 0이 되면 가능한 경우이다.</li>
</ol>
<h1 id="배운-점">배운 점</h1>
<ul>
<li>여러 가지를 고려해야 할 경우 큰 수부터 고려하면 반복 횟수가 작아진다(편하다) !</li>
</ul>
<h1 id="코드">코드</h1>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;

int main(){
    // 0. 변수 설정 : 입력받은 무게, 5로 나눈 몫, 반복 중 봉지 수, 최소 봉지 수
    int weight, repeat, num, rem, min = 0;

    // 1. 무게 입력받기
    scanf(&quot;%d&quot;, &amp;weight);

    // 2. 5로 나눈 몫 구하기
    repeat = weight/5;

    // 3. 0부터 (5로 나눈 몫)까지 반복하면서 나머지를 3으로 나눈 나머지 구하기
    //     3-1. (나머지 == 0) 이면 봉지 수를 최소 봉지 수와 비교
    for(int i=0; i&lt;=repeat; i++){
        rem = weight - i*5;
        if(rem%3 == 0){
            num = i + rem/3;
            if(min == 0 || num &lt; min)
                min = num;
        }
    }

    if(min == 0)
        printf(&quot;%d&quot;, -1);
    else
        printf(&quot;%d&quot;, min);

    return 0;
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준] 1546: 평균]]></title>
            <link>https://velog.io/@yeob-yi/boj-1546</link>
            <guid>https://velog.io/@yeob-yi/boj-1546</guid>
            <pubDate>Mon, 18 Apr 2022 12:49:59 GMT</pubDate>
            <description><![CDATA[<h1 id="문제">문제</h1>
<p>[Bronze_I] 정답 비율 49%</p>
<p><a href="https://www.acmicpc.net/problem/1546">https://www.acmicpc.net/problem/1546</a></p>
<h1 id="생각">생각</h1>
<ol>
<li>개수만큼 반복해서 입력받기</li>
<li>최댓값 찾기</li>
<li>연산 -&gt; 함수 만들어 사용하기</li>
</ol>
<h1 id="배운-점">배운 점</h1>
<ul>
<li>새로 배운 것은 아니지만 remind한 것 : <code>int</code> 끼리 연산해도 <code>int</code> 값이 나온다. </li>
<li><blockquote>
<p><code>int</code>끼리의 연산에서 <code>double</code> 값을 결과로 얻기 위한 기교 : <code>*1.0</code> </p>
</blockquote>
</li>
</ul>
<h1 id="코드">코드</h1>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;

double calculate(int num, int M){
    return (num/(M*1.0) * 100);
}

int main(){
    int count = 0;
    int score[1000] = {0};
    int M = 0;
    double sum = 0;
    double ans = 0;

    scanf(&quot;%d&quot;, &amp;count);
    for(int i=0; i&lt;count; i++){
        scanf(&quot;%d&quot;, &amp;score[i]);
        if(M &lt; score[i])
            M = score[i];
    }

    for(int i=0; i&lt;count; i++){
        sum += calculate(score[i], M);
    }

    ans = sum/count;
    printf(&quot;%f&quot;, ans);
    return 0;
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준] 1157: 단어 공부]]></title>
            <link>https://velog.io/@yeob-yi/boj-1157</link>
            <guid>https://velog.io/@yeob-yi/boj-1157</guid>
            <pubDate>Mon, 18 Apr 2022 12:40:20 GMT</pubDate>
            <description><![CDATA[<h1 id="문제">문제</h1>
<p>[Bronze_I] 정답 비율 39%</p>
<p><a href="https://www.acmicpc.net/problem/1157">https://www.acmicpc.net/problem/1157</a></p>
<h1 id="생각">생각</h1>
<ol>
<li>알파벳 개수만큼의 배열을 생성해 값을 0으로 초기화한다.</li>
<li>문자열을 입력받는다</li>
<li>반복문을 이용해 한 글자씩 확인하며 해당 알파벳에 해당하는 Array의 값을 1 증가시킨다.</li>
<li>새로운 반복문을 이용해 가장 큰 수가 무엇인지 확인하고, 출력한다.</li>
</ol>
<h1 id="배운-점">배운 점</h1>
<ul>
<li>처음에 <code>for</code> 문 안의 종료조건으로 <code>i&lt;strlen(input</code>을 넣었더니 시간 초과가 나왔다. 
검색을 통해 알게 되었는데, 종료조건에 <code>strlen</code>을 넣으면 for문이 반복될 때마다 <code>strlen</code> 함수를 호출해 길이를 잰다고 한다.</li>
<li><blockquote>
<p>새로운 <code>int</code> 변수에 <code>strlen</code>의 값을 넣어준 뒤 종료조건에 넣어서 해결하였다.</p>
</blockquote>
</li>
<li>브론즈 문제에서도 배울 점이 있ㄷr ,,!!! 무시하지 마 !!!</li>
</ul>
<h1 id="코드">코드</h1>
<p>```cpp
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;</p>
<p>int main(){
    int lists[26] = {0};
    int index = 0;
    int max_index = 0;
    char max_value=&#39;A&#39;;
    char input[1000001];
    scanf(&quot;%s&quot;, input);</p>
<pre><code>// printf(&quot;%d %d\n&quot;, &#39;a&#39;, &#39;z&#39;); // 97 ~ 122 
// printf(&quot;%d %d&quot;, &#39;A&#39;, &#39;Z&#39;); // 65 ~ 90
int len = strlen(input);
for(int i=0; i&lt;len; i++){
    if(input[i]&gt;95)
        index = input[i]-97;
    else
        index = input[i]-65;
    lists[index]++;
}

for(int i=1; i&lt;26; i++){
    if(lists[max_index]==lists[i])
        max_value = &#39;?&#39;;
    else if(lists[max_index]&lt;lists[i]){
        max_index = i;
        max_value = &#39;A&#39;+i;
    }
}

printf(&quot;%c&quot;, max_value);
return 0;</code></pre><p>}
``</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준] 1145: 적어도 대부분의 배수]]></title>
            <link>https://velog.io/@yeob-yi/boj-1145</link>
            <guid>https://velog.io/@yeob-yi/boj-1145</guid>
            <pubDate>Sat, 16 Apr 2022 03:12:01 GMT</pubDate>
            <description><![CDATA[<h1 id="문제">문제</h1>
<p>[Bronze_I] 정답 비율 59%</p>
<p><a href="https://www.acmicpc.net/problem/1145">https://www.acmicpc.net/problem/1145</a></p>
<h1 id="생각">생각</h1>
<ol>
<li>적어도 세 개로? 가장 작은 수를 n배하면서 3개로 나눠지는지 봐야하나?
 -&gt; 그럼 1 2 3 4 5 같은 케이스가 안됨</li>
<li>3개씩 묶어 최소공배수를 구해야 하나?
 -&gt; Bronze_I 문제 주제에 너무 복잡함. <del>최소공배수 공식 모름.</del></li>
</ol>
<h1 id="배운-점">배운 점</h1>
<ul>
<li>브루트 포스(brute force) 알고리즘 : 완전탐색 알고리즘. 가능한 모든 경우의 수를 탐색하면서 요구조건에 충족되는 결과를 가져온다.
  완전탐색도 알고리즘의 하나다. 사실 최소공배수 공식을 찾아보며 복잡하게 생각하다가 너무 모르겠어서 검색을 해봤는데, 그냥 1부터 숫자를 키우면서 3개 이상으로 나눠지는지 확인해보면 되는 문제였다. <strong>간단하게 생각하자.</strong></li>
</ul>
<h1 id="코드">코드</h1>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;

int main(){
    int i, j;
    int check=0;
    int input[5];

    for(i=0; i&lt;5; i++){
        scanf(&quot;%d&quot;, &amp;input[i]);
    }

    i = 1;
    while(check&lt;3){
        check = 0;
        for(j=0; j&lt;5; j++)
            if(i%input[j]==0)
                check++;
        i++;
    }

    i--;
    printf(&quot;%d&quot;, i);
    return 0;
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준] 1110: 더하기 사이클]]></title>
            <link>https://velog.io/@yeob-yi/boj-1110</link>
            <guid>https://velog.io/@yeob-yi/boj-1110</guid>
            <pubDate>Sat, 16 Apr 2022 02:59:50 GMT</pubDate>
            <description><![CDATA[<h1 id="문제">문제</h1>
<p>[Bronze_I] 정답 비율 46%</p>
<p><a href="https://www.acmicpc.net/problem/1110">https://www.acmicpc.net/problem/1110</a></p>
<h1 id="생각">생각</h1>
<ol>
<li>복잡한 연산 -&gt; 함수로 만들어 코드를 분리하자</li>
<li>(입력받은 수)와 (함수의 리턴 값)이 같을 때까지 반복:
 (입력받은 수)와 (함수의 리턴 값) 비교
 2-1. 다르면 cycle(반복횟수) ++</li>
<li>(입력받은 수)와 (함수의 리턴 값)이 처음부터 같다면? (<code>if (cycle==0)</code> cycle = 1 )</li>
</ol>
<h1 id="배운점">배운점</h1>
<p>문제가 쉬워서 크게 배운 점은 없었다. 복잡한 연산은 함수로 만들어 분리하면 가독성에 도움이 된다 정도 ?</p>
<h1 id="코드">코드</h1>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;

int calculate(int num){
    int new=0;
    if(num&lt;10)
        new = num;
    else
        new = (num/10 + num%10)%10;
        new += (num%10)*10;
    return new;
}

int main(void){
    int cycle = 0;
    int input = 0;
    int temp=0;
    scanf(&quot;%d&quot;, &amp;input);

    while(input != temp){
        if(cycle == 0)
            temp = calculate(input);
        else
            temp = calculate(temp);
        cycle++;
    } 

    if(cycle==0)
        cycle = 1;

    printf(&quot;%d&quot;, cycle);
    return 0;
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준] 1032: 명령 프롬프트 ]]></title>
            <link>https://velog.io/@yeob-yi/boj-1032</link>
            <guid>https://velog.io/@yeob-yi/boj-1032</guid>
            <pubDate>Fri, 15 Apr 2022 17:14:10 GMT</pubDate>
            <description><![CDATA[<h1 id="문제">문제</h1>
<p>[Bronze_I] 정답 비율 53%</p>
<p><a href="https://www.acmicpc.net/problem/1032">https://www.acmicpc.net/problem/1032</a></p>
<h1 id="생각">생각</h1>
<ol>
<li>파일 이름의 개수 N회 입력받기</li>
<li>N회 반복: 파일 이름 입력받아 배열에 저장
 2-1. N은 50보다 작거나 같은 자연수, 파일 이름의 길이는 최대 50이므로 파일 이름을 입력받을 배열은 <strong>50글자를 저장할 공간이 50개 있는</strong> 2차원 배열</li>
<li>N-1회(파일의 수-1) 반복: 문자열(파일 이름)의 길이 만큼 반복하며 각 글자가 같은지 확인
 3-1. 다르다면 &#39;?&#39; 대입</li>
<li>문자열 출력</li>
</ol>
<h1 id="배운-점">배운 점</h1>
<ul>
<li><strong>50글자를 저장할 공간</strong>이 50개 있는 2차원 배열 생성 : arr[50][<strong>51</strong>] 해야함 (문자열은 배열의 마지막에 <code>&#39;\n&#39;</code>이 들어가야 하므로)
  오랜만에 C언어로 문제를 풀었더니 너무 쉬운 부분에서 실수함. 잊지 말 것.</li>
</ul>
<h1 id="코드">코드</h1>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

int main(){ 
    int num=0;
    int length=0;
    int i=0;
    char input[50][51];
    char ans[51];

    scanf(&quot;%d&quot;, &amp;num);
    for(i=0; i&lt;num; i++)
        scanf(&quot;%s&quot;, input[i]);

    length = strlen(input[0]);
    strcpy(ans, input[0]);
    for(int i=1; i&lt;num; i++)
        for(int j=0; j&lt;length; j++)
            if(ans[j]!=&#39;?&#39; &amp;&amp; ans[j]!=input[i][j])
                ans[j] = &#39;?&#39;;
    printf(&quot;%s&quot;, ans);

    return 0;
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[열혈C] Chapter02. 프로그램의 기본 구성]]></title>
            <link>https://velog.io/@yeob-yi/%EC%97%B4%ED%98%88C-Ch02</link>
            <guid>https://velog.io/@yeob-yi/%EC%97%B4%ED%98%88C-Ch02</guid>
            <pubDate>Fri, 08 Apr 2022 07:47:00 GMT</pubDate>
            <description><![CDATA[<p><img src="https://media.vlpt.us/images/yeob-yi/post/b1804835-fa40-42c1-9495-6e86919d356b/%E1%84%8B%E1%85%A7%E1%86%AF%E1%84%92%E1%85%A7%E1%86%AFC.jpeg" alt=""></p>
<h2 id="1-hello-world-들여다보기">1. Hello world! 들여다보기</h2>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
int main(void)
{
    printf(&quot;Hello world! \n&quot;);
    return 0;
}</code></pre>
<h3 id="01-c언어의-기본단위인-함수의-이해">01 C언어의 기본단위인 &#39;함수&#39;의 이해</h3>
<blockquote>
<p>C언어는 함수로 시작해서 함수로 끝난다</p>
</blockquote>
<ul>
<li>함수 : 적절한 입력과 그에 따른 출력이 존재하는 것</li>
<li>함수의 정의 : 만들어진 함수, 실행이 가능한 함수를 일컬음</li>
<li>함수의 호출 : 함수의 실행을 명령하는 행위</li>
<li>인자의 전달 : 함수의 실행을 명령할 때 전달하는 입력 값
➡️ 인자의 전달을 함수의 호출과정에서 동시에 일어남</li>
</ul>
<h3 id="02-예제-helloc에서의-함수는-어디에">02 예제 Hello.c에서의 함수는 어디에?</h3>
<ul>
<li>프로그램의 흐름 = 정해진 순서에 의해 진행되는 함수의 호출</li>
<li>모든 C언어 프로그램에서는 <code>main</code> 이라는 이름의 함수가 가장 먼저 호출됨</li>
<li><code>int main(void)</code> : int 형의 값을 <strong>반환</strong>하고 void 형의 값을 <strong>입력</strong>받는 main이라는 <strong>이름</strong>의 함수</li>
<li>hello world 프로그램에서 중괄호 <code>{}</code> 는 함수의 기능을 정의하는 <strong>함수의 몸체(body)</strong></li>
<li>중괄호 <code>{}</code> 내부는 위에서 아래로 순차적으로 실행됨</li>
</ul>
<h3 id="03-함수-내에-존재하는-문장의-끝에는-세미콜론-문자--을-붙여준다">03 함수 내에 존재하는 문장의 끝에는 세미콜론 문자 ; 을 붙여준다.</h3>
<ul>
<li>함수에서 각 문장의 끝에는 세미콜론 문자 <code>;</code> 를 사용해 문장의 끝임을 나타냄</li>
<li>모든 문장에 붙지는 않고, 조건문이나 반복문과 같은 컨트롤 문장에는 세미콜론이 붙지 않음</li>
</ul>
<h3 id="04-표준-라이브러리와-printf-함수">04 표준 라이브러리와 printf 함수</h3>
<ul>
<li><p>Hello world 프로그램의 <code>main</code> 함수에 있는 <code>printf(&quot;Hello world! \n&quot;);</code>
➡️ 문자열 <code>&quot;Hello world! \n&quot;</code> 을 인자로 전달하면서 <code>printf</code>라는 이름의 함수를 호출하는 문장</p>
</li>
<li><p>직접 <code>printf</code> 라는 함수를 만들지 않았지만, <code>printf</code> 함수는 <strong>표준 라이브러리</strong>(표준함수들의 모임)에 있는 <strong>표준함수</strong>(누구나 쓸 수 있도록 만들어진 함수)이기 때문에 호출할 수 있음</p>
</li>
</ul>
<h3 id="05-현-시점에-어울리는-헤더파일-선언의-필요성에-대한-설명">05 현 시점에 어울리는 헤더파일 선언의 필요성에 대한 설명</h3>
<ul>
<li><code>printf</code> 와 같은 표준함수의 호출을 위해서는 함수와 관련있는 <strong>헤더파일 선언</strong> 필요</li>
<li><code>#include &lt;stdio.h&gt;</code> 의 형태</li>
<li>헤더파일의 선언은 소스파일의 맨 앞부분, <code>main</code> 함수의 정의 전에 와야함</li>
</ul>
<h3 id="06-return은-함수의-종료와-값의-전달반환이라는-두-가지-의미를-지닌다">06 return은 함수의 종료와 값의 전달(반환)이라는 두 가지 의미를 지닌다</h3>
<ul>
<li><p>return 문의 의미</p>
<ol>
<li>함수를 호출한 영역으로 값을 전달(반환)</li>
<li>현재 실행중인 함수의 종료</li>
</ol>
</li>
<li><p><code>main</code> 함수에서 <code>return</code>은 반환값을 운영체제로 전달함
정상적으로 종료되었을 때 0, 비정상적인 상황으로 종료될 땐 0이 아닌 값</p>
</li>
</ul>
<h2 id="2-주석이-들어가야-완성된-프로그램">2. 주석이 들어가야 완성된 프로그램</h2>
<blockquote>
<p>주석(comment) : 프로그램 내에 삽입된 메모, 컴파일의 대상에서 제외되어 실행결과에는 영향을 주지 않음</p>
</blockquote>
<h3 id="01-주석의-필요성">01 주석의 필요성</h3>
<ul>
<li>프로그램을 분석할 때나 나중에 다시 볼 때를 위해,</li>
<li><em>주석은 선택이 아닌 필수*</em> !</li>
</ul>
<h3 id="02-블록-단위-주석">02 블록 단위 주석</h3>
<ul>
<li><code>/*</code> 으로 주석의 시작을, <code>*/</code> 로 주석이 끝났음을 명시할 수 있다.</li>
<li>한 줄은 물론, 두 줄 이상을 주석처리 할 때 사용할 수 있다.</li>
</ul>
<h3 id="03-행-단위-주석">03 행 단위 주석</h3>
<ul>
<li><code>//</code> 뒤에 등장하는 문장은 주석처리된다</li>
<li>한 줄을 주석처리할 때 사용할 수 있다</li>
</ul>
<h3 id="04-helloc에-주석-추가하기">04 Hello.c에 주석 추가하기</h3>
<pre><code class="language-cpp">/*
제목 : Hello world 출력하기
기능 : 문자열 출력
파일이름 : HelloComment.c
수정날짜 : 2022.04.08
*/
#include &lt;stdio.h&gt;   // 헤더파일 선언 

int main(void)  // main 함수의 시작
{
    /*
    이 함수 내에서는 하나의 문자열을 출력한다
    문자열은 모니터로 출력된다.
    */
    printf(&quot;Hello world! \n&quot;);  // 문자열 출력
    return 0;  // 0 반환
} //  main 함수 끝</code></pre>
<h3 id="05-주석처리에-있어서의-주의점">05 주석처리에 있어서의 주의점</h3>
<ul>
<li>블록 단위 주석은 중첩 불가</li>
<li>행 단위 주석은 블록 단위 주석의 내부에 포함될 수 있다</li>
</ul>
<h2 id="3-printf-함수의-기본적인-이해">3. printf 함수의 기본적인 이해</h2>
<h3 id="01-printf-함수를-이용한-정수의-출력과-서식문자">01 printf 함수를 이용한 정수의 출력과 서식문자</h3>
<ul>
<li>printf 함수는 첫 번째 인자로 전달된 문자열을 출력함</li>
<li>서식문자를 이용해 출력의 형태 지정 가능</li>
</ul>
<h3 id="02-출력의-형태를-다양하게-조합하는-것이-가능하다">02 출력의 형태를 다양하게 조합하는 것이 가능하다</h3>
<p>서식문자의 삽입 위치에는 제한이 없기 때문에 다양하게 문자열을 조합해 출력할 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[HTML ② : 시맨틱 마크업과 태그 및 속성 정리]]></title>
            <link>https://velog.io/@yeob-yi/html2</link>
            <guid>https://velog.io/@yeob-yi/html2</guid>
            <pubDate>Mon, 24 Jan 2022 07:09:40 GMT</pubDate>
            <description><![CDATA[<h1 id="시맨틱-마크업">시맨틱 마크업</h1>
<p>Semantic (의미론적인) + Markup (HTML로 문서를 작성하는 것)</p>
<blockquote>
<p><strong>의미를 잘 전달하도록 문서를 작성하는 것</strong> </p>
</blockquote>
<h2 id="왜-하는데">왜 하는데?</h2>
<ol>
  <li> SEO : 검색엔진 최적화에 유리하다.</li>
  <li> 웹 접근성 : 시각장애인이 웹을 편리하게 이용하는데 도움이 된다.</li>
  <li> 유지보수 : 정리된 마크업이 유지, 보수할 때 편리하다.</li>
</ol>

<h2 id="어떻게-하는데">어떻게 하는데?</h2>
<p>용도에 맞는 태그를 사용한다.
영역을 나눌 때는 <code>&lt;div&gt;</code> 대신 content sectioning 태그들을 이용하고, </p>
<h3 id="1-content-sectioning-태그-이용">1. Content sectioning 태그 이용</h3>
<p>웹 페이지를 역할에 따라 크게 나눠 보면, <code>&lt;header&gt;</code>, <code>&lt;nav&gt;</code>, <code>&lt;main&gt;</code>, <code>&lt;aside&gt;</code>, <code>&lt;footer&gt;</code> 로 나눌 수 있다. </p>
<p><code>&lt;header&gt;</code>와 <code>&lt;footer&gt;</code>는 이름 그대로이고, <code>&lt;nav&gt;</code>는 네비게이션 바, <code>&lt;main&gt;</code>은 페이지의 주요 내용 그리고 <code>&lt;aside&gt;</code>는 페이지와 직접적으로 관련이 있지는 않은 내용들을 담을 때 사용한다.</p>
<p>단순히 페이지를 나누는 것은 <code>&lt;div&gt;</code>로도 나눌 수 있지만, 그 영역이 페이지 내에서 하는 역할에 따라 위의 다섯 가지 태그들을 사용해 나누면 페이지의 구조를 이해하기 쉬워진다.</p>
<p>content sectioning 태그에는 위의 다섯 가지 태그 외에도 주소를 나타내는 <code>&lt;address&gt;</code>, 재사용 가능한 가장 작은 영역인 <code>&lt;article&gt;</code>, main 태그 안에서 다시 크게 영역을 나눌 때 사용하는 <code>&lt;section&gt;</code>이 있다. 
그리고 <code>&lt;h1&gt;</code>~<code>&lt;h6&gt;</code> 의 헤더 태그도 content sectioning 태그에 속한다.</p>
<h3 id="2-css-스타일을-명시하는-태그-이용하지-않기">2. CSS 스타일을 명시하는 태그 이용하지 않기</h3>
<p>HTML 문서를 작성할 때, <code>&lt;b&gt;</code> 태그나 <code>&lt;i&gt;</code> 태그를 이용하면 별다른 CSS 코드 없이도 글자를 진하게 혹은 기울여서 작성할 수 있다.</p>
<p>그러나 <code>&lt;b&gt;</code> 나 <code>&lt;i&gt;</code> 와 같은 태그는 별다른 의미 없이 글자를 꾸미기 위해 사용하는 것이기 때문에 시맨틱 마크업에는 적합하지 않다.</p>
<p>글자를 기울임과 동시에 강조해주는 <code>&lt;em&gt;</code> 태그나 글자를 진하게 하며 아주 강조하는 <code>&lt;strong&gt;</code> 태그를 이용하면 조금 더 시맨틱 마크업에 적합하다고 할 수 있다.</p>
<h1 id="태그">태그</h1>
<p>모든 태그를 정리할 수는 없겠지만, 이전 글에서 정리한 <code>&lt;p&gt;</code>, <code>&lt;a&gt;</code>, <code>&lt;img&gt;</code> 등 아주아주 기본적인 태그 다음으로 사용 빈도가 높은 태그들을 정리해보려고 한다.</p>
<p>(시맨틱 마크업을 위해서는 쓰지 말라고 했지만 ...)</p>
<ul>
<li><code>&lt;b&gt;</code> - 텍스트를 굵게 표시해준다. (<strong>볼드체</strong>)</li>
<li><code>&lt;i&gt;</code> - 텍스트를 눕혀서 표시해준다. (<em>이탤릭체</em>)</li>
<li><code>&lt;s&gt;</code> - 텍스트 중간에 줄을 그어준다. (<del>취소선</del>)</li>
<li><code>&lt;u&gt;</code> - 텍스트 아래에 줄을 그어준다. (<u>밑줄</u>)</li>
<li><code>&lt;div&gt;</code> - 태그만 썼을 때는 문서에 변화가 없다. 공간을 나눌 때 사용하고, <code>id</code> 나 <code>class</code> 속성을 통해 CSS로 꾸미기 쉽게 한다.</li>
<li><code>&lt;span&gt;</code> - 문장의 일부분만 선택해서 CSS로 꾸미고 싶을 때 사용한다. <code>&lt;div&gt;</code>와 거의 같은 역할인데, <code>&lt;div&gt;</code>는 block-level element라서 한 줄을 다 차지하기 때문에 문장의 일부분만 선택하고 싶을 때는 쓰기 어렵기 때문에 <code>&lt;span&gt;</code>을 사용한다. </li>
<li><code>&lt;br&gt;</code> - break line; 문단 내에서 줄을 바꿀 때 사용한다.</li>
<li><code>&lt;hr&gt;</code> - horizontal rule; 가로 선을 그어 단락을 구분할 때 사용한다.</li>
<li><code>&lt;sub&gt;</code> - 아랫첨자 (이것이<sub>sub</sub>)</li>
<li><code>&lt;sup&gt;</code> - 윗첨자 (이것은<sup>sup</sup>)</li>
</ul>
<h1 id="속성">속성</h1>
<p>이전 글에서 잠깐 언급했는데, <code>&lt;img&gt;</code> element에 사진의 주소 src나 대체 텍스트 alt 정보를 주는 것처럼, 속성을 통해 우리는 element에 추가적인 정보를 줄 수 있다.
그러한 속성들은 태그마다 다르기 때문에 태그를 공부할 때 함께 알아두어야 한다.</p>
<p>반면 모든 태그에 적용 가능한 &quot;전역속성&quot;들도 있는데, 대표적인 세 가지만 알아보려고 한다.</p>
<ul>
<li><code>style</code> - element에 적용할 스타일(CSS)를 작성할 수 있다. 다른 CSS 적용 방법보다 우선순위가 높다.</li>
<li><code>class</code> - element를 가리키는 이름으로, CSS를 작성할 때 주로 사용한다. 여러 element가 동일한 class를 가질 수 있다.</li>
<li><code>id</code> - element를 가리키는 이름인데, element마다 다른 id를 쓴다는 점에서 차이가 있다.</li>
</ul>
<p>CSS를 작성할 때는 하나하나 선택해주어야 하는 <code>id</code>보다는 여러 개를 동시에 선택할 수 있는 <code>class</code> 를 많이 사용하는 것 같다. </p>
<br>

<p><strong>참고</strong></p>
<ul>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element">mdn HTML elements reference</a></li>
<li><a href="https://www.youtube.com/watch?v=T7h8O7dpJIg&amp;feature=emb_title">드림코딩 엘리 &quot;HTML 태그 정리&quot;</a></li>
<li></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[HTML ① : 웹 공부 시작, HTML 개요]]></title>
            <link>https://velog.io/@yeob-yi/html1</link>
            <guid>https://velog.io/@yeob-yi/html1</guid>
            <pubDate>Sat, 22 Jan 2022 10:39:28 GMT</pubDate>
            <description><![CDATA[<h1 id="딴소리-잠깐">딴소리 잠깐</h1>
<p>여름방학에 진행한 방학 프로젝트, 그리고 2학기에 참가한 공공데이터 활용 공모전 모두 플러터와 파이어베이스를 이용해 앱을 만드는 프로젝트를 진행했었다.</p>
<p>플러터를 이용해 한 페이지를 구현하는 것 정도는 이제 조금 할 줄 알지만, 웹에 대한 기본이 부족하다 보니 페이지를 연결하는 등 단순 페이지 구현을 넘어선 다른 일들이 어렵게 느껴졌다.</p>
<p>그래서 겨울방학 동안 웹에 대해 공부해보기로 다짐했다. 나름대로 구글링을 해본 결과 udemy의 <a href="https://www.udemy.com/course/the-web-developer-bootcamp/">Web Developer Bootcamp</a> 강의가 평이 괜찮은 것 같았고,  마침 2022년 버전이 새로 나왔다. html, css, javascript, 그리고 그 외에 Ajax, node, express 등 많은 부분을 다뤄주는 것이 마음에 들어서 이 강의를 듣기로 했다.</p>
<p>한국어 자막이 달린 버전도 나왔었지만 어차피 나중에 자료를 찾아볼 때 영어로 찾을 일이 많을 것 같기도 하고, 리뷰에 달린 한국어 자막에 대한 평이 상당히 안좋은 것 같아 그냥 영어 버전을 구매했다. <del>어려운 영어는 아니라서 못알아듣는 부분은 거의 없는데 진도가 잘 안나가진다.</del></p>
<h1 id="html">HTML</h1>
<p>Hyper Text Markup Language, HTML은 페이지 안의 정보들을 담는 역할을 한다.</p>
<p>과거에는 table을 활용해 layout을 배치하는 등 단순히 정보를 담는 것 외에 다른 역할도 했지만, CSS의 발전으로 웹을 꾸미는 일은 CSS에게 넘겨주게 되었고, 이제는 정보를 담는 역할에 집중한다.</p>
<h2 id="element">Element</h2>
<p>C 프로그램이 여러 함수로 이루어진 것처럼, HTML은 element들의 집합이다.</p>
<h3 id="element-1">element?</h3>
<p>일반적인 element는 <code>시작태그 + 내용 + 종료태그</code> 로 이루어져 있다.</p>
<p>시작 태그는 <code>&lt;태그명&gt;</code>의 형태로, 종료 태그는 <code>&lt;/태그명&gt;</code>의 형태로 작성한다.</p>
<blockquote>
<p><code>&lt;p&gt;I am a paragraph&lt;/p&gt;</code></p>
</blockquote>
<p>위의 <code>&lt;p&gt;</code> element에서 <code>&lt;p&gt;</code>는 시작 태그(opening tag), <code>I am a paragraph</code>는 내용(contents), <code>&lt;\p&gt;</code>는 종료 태그(closing tag)이다.</p>
<h3 id="empty-element">empty element</h3>
<blockquote>
<p><code>&lt;img src=&quot;https://~.jpg&quot; alt=&quot;그림&quot;&gt;</code></p>
</blockquote>
<p>간혹, <code>&lt;img&gt;</code> 태그처럼 종료 태그가 없는 태그도 있는데, 이러한 태그를 빈 태그(empty tag)라고 부른다.</p>
<h3 id="attribute">attribute</h3>
<p>이미지를 보여줄 때 사용하는 <code>&lt;img&gt;</code> 태그는 이미지의 주소(src), 대체 텍스트(alt) 와 같은 추가적인 정보를 필요로 한다.
여기서 alt나 src와 같은 것들을 attribute라고 하고, 우리는 attribute를 통해 해당 element에게 추가적인 정보를 제공해줄 수 있다.</p>
<h2 id="basic-elements">Basic elements</h2>
<ul>
<li>제목(heading), <code>&lt;h1&gt;</code> ~ <code>&lt;h6&gt;</code></li>
<li>문단(paragraph), <code>&lt;p&gt;</code></li>
<li>리스트(list), <code>&lt;ol&gt;</code>(ordered), <code>&lt;ul&gt;</code>(unordered)
 리스트 안의 내용들은 <code>&lt;li&gt;</code> 태그로 작성</li>
<li>링크(anchor) - attribute로 주소(href)를 가짐 <code>&lt;a href=&quot;http://www.~&quot;&gt;</code></li>
<li>이미지(image) - attriubte로 이미지의 주소(src)와 대체 텍스트(alt)를 가짐, empty tag <code>&lt;img src=&quot;&quot; alt=&quot;&quot;&gt;</code></li>
<li>주석 <code>&lt;!--comment--&gt;</code></li>
</ul>
<h2 id="html-문서-구조">HTML 문서 구조</h2>
<pre><code>&lt;!DOCTYPE html&gt;
&lt;html&gt;

  &lt;head&gt;
    &lt;title&gt;tab name&lt;/title&gt;
  &lt;/head&gt;

  &lt;body&gt;
    &lt;h1&gt;html문서&lt;/h1&gt;
  &lt;/body&gt;

&lt;/html&gt;</code></pre><p>가장 단순한 html 문서는 위의 구조로 생겼다.</p>
<p>위에서부터 한 줄씩 살펴보면,</p>
<p><code>&lt;!DOCTYPE html&gt;</code> : HTML5임을 말해준다.
<code>&lt;html&gt;</code> : root element라고도 한다. 자식으로 <code>&lt;head&gt;</code>와 <code>&lt;body&gt;</code> 태그를 가진다.
<code>&lt;head&gt;</code> : metadata element라고도 한다. 페이지와 관련된 정보를 담고있는데, 브라우저에 표시되는 탭의 이름을 지정하는 <code>&lt;title&gt;</code> 태그, 문자셋(charset) 등 여러 정보를 지정할 수 있는 <code>&lt;meta&gt;</code> 태그 등이 <code>&lt;head&gt;</code> 태그 안에 들어간다.
<code>&lt;body&gt;</code> : 브라우저에 보여지는, 페이지의 주요 내용들이 담긴 부분이다
<br></p>
<p>element가 무엇인지, 기본적인 element들, 그리고 html 문서의 구조에 대해 정리해봤다. 이정도가 html의 기초라고 할 수 있겠다. 다음 글에는 시맨틱 마크업에 대해, 그리고 다른 주요 태그들을 정리해보겠다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[새해된지 보름이 지나고 하는 2021 회고]]></title>
            <link>https://velog.io/@yeob-yi/%EC%83%88%ED%95%B4%EB%90%9C%EC%A7%80-%EB%B3%B4%EB%A6%84%EC%9D%B4-%EC%A7%80%EB%82%98%EA%B3%A0-%ED%95%98%EB%8A%94-2021-%ED%9A%8C%EA%B3%A0</link>
            <guid>https://velog.io/@yeob-yi/%EC%83%88%ED%95%B4%EB%90%9C%EC%A7%80-%EB%B3%B4%EB%A6%84%EC%9D%B4-%EC%A7%80%EB%82%98%EA%B3%A0-%ED%95%98%EB%8A%94-2021-%ED%9A%8C%EA%B3%A0</guid>
            <pubDate>Sun, 16 Jan 2022 19:04:31 GMT</pubDate>
            <description><![CDATA[<p>여름방학동안 깃을 처음 배웠고, 2학기 중반이 다 되어서야 깃과 조금 친해질 수 있었다.
내년엔 1일 1커밋 하는걸로,,,!</p>
<h3 id="2021년에-나는-🤔">2021년에 나는 🤔</h3>
<p>스무 살이 되었고, 대학교에 입학했고, 깃허브 계정을 만들었고, 동아리 CRA에 들어갔다.</p>
<p>대학교에서, 동아리에서 좋은 선배들을 많이 만났고, 다양한 것들을 배웠으며, &#39;컴퓨터&#39; 공부를 시작했다.</p>
<p>나중에 보면 귀여울 수준이겠지만(물론 지금봐도 부끄러운 수준 🤫), 나름 열심히 살았던, 내 1학년을 엄청엄청 나중에도 기억하기 위해 ... 회고 시작 👏🏻</p>
<h1 id="1학기-🌝">1학기 🌝</h1>
<h2 id="한동대학교">한동대학교</h2>
<p>한동대학교에 입학했다.</p>
<p>서울 소재 대학교와 한동대를 두고 고민했는데, 한동대에 입학하기로 했다.</p>
<p>왜 한동대를 선택했냐고 묻는 친구들이 많았다.
홍보 영상 등에서 본 한동대의 분위기가 좋았고, 다양한 공동체 문화도 좋았다.
사실 남들을 이해시킬만큼 어떤 확실한 이유가 있지는 않았다.</p>
<p>어쨌든 1학년이 끝난 지금, 나는 내 선택을 후회하지 않는다.
좋은 선배들과 친구들을 만났고, 다양한 경험을 했고, 누구보다 재밌게, 그리고 부지런히 20살을 살았다.</p>
<h2 id="cra-👾">CRA 👾</h2>
<p>운좋게 컴퓨터 동아리 CRA(Computer Research Association)에 들어오게 되었다.</p>
<p><strong>지원</strong>
고등학생 때부터 컴퓨터공학을 생각했었던 덕분에 &#39;공동교육과정&#39;이라는 좋은 기회를 통해 파이썬 문법을 조금 배우고 랜덤함수를 이용한 간단한 보드게임 프로그램(노트북 옮기다가 파일이 없어져서 내 기억 속에만 남게 된 ,,,🥲)을 만들어보기도 했고, 자료구조도 조금 배워본 경험이 있던 나는 관련 경험을 지원서에 어필하며 컴퓨터 동아리 CRA에 지원했다.</p>
<p><strong>코딩테스트, 면접</strong>
코딩테스트를 본다길래 기억도 잘 안나는 파이썬 문법만 대충 살펴보고 줌 링크를 누른 나는 &quot;찢어진 달력의 남은 부분을 출력하라&quot;는 문제를 보고 주어진 시간(10분? 15분?) 내내 생각만 하다가 <code>print</code> 한 줄만 쓰고 면접으로 넘어가게 되었다. 생전 처음 보는 프로그래밍 문제였다. 솔직히 면접으로 넘어갈 때는 끝난 줄 알았다.</p>
<p>다행히 면접에서는 코딩테스트에 관한 질문은 많지 않았다. 그것보다 고등학생이 자료구조를 배워봤다는 점에서 흥미를 느낀 선배들이 자료구조와 관련해서 많은 질문을 해주셨고, 큐, 스택, 트리 등 알고 있는 용어는 다 동원해서 설명하다가 꽤 괜찮은 분위기에서 면접이 끝난 것 같았다.</p>
<p>일주일 쯤 뒤에 문자가 왔다. 합격이었다.</p>
<h2 id="인생-첫-번째-프로젝트--hisfinder">인생 첫 번째 프로젝트 : HisFinder</h2>
<p>크라에 들어온 신입은 이어지는 방학에 프로젝트를 하나 해야한다.
프로젝트를 마치기 전까지는 정회원이 아니라 준회원이다.</p>
<p><strong>팀 결성</strong>
크라 신입 기수 첫 번째 모임에서 프로젝트 아이디어를 생각해오라는 숙제를 받았고, 두 번째 모임에서 각자 생각해온 아이디어를 발표했다.</p>
<p>택시 매칭 및 카풀 서비스인 iTaxi, 중고물품 거래 플랫폼 서비스인 H-Safari 등 이미 많은 괜찮은 아이디어들이 방학 프로젝트를 통해 구현되었고, 서비스되고 있었다.
아이디어를 얻기 위해 실명카톡방을 분석하다가 학생증이나 카드, 그리고 여러 분실물들이 실카방 1, 2, 3에 나눠져서 올라온다는 것을 인식했고, &#39;물품 분실, 습득 플랫폼&#39;이라는 아이디어를 발표했다.</p>
<p>완전 동일한 아이디어로 주영이형이랑 혜림이누나가 발표를 했고, 자연스럽게 팀이 만들어졌다. 한결이의 합류로 4명이 한 팀으로 프로젝트를 하게 되었다. </p>
<p><strong>기획</strong>
플러터와 파이어베이스를 이용해 어플리케이션을 구현하기로 했다.</p>
<p>일주일에 한번씩 모여 제작할 어플의 기능과 페이지 등을 구상했고, 디자인했다. 매주 신입 기수 회의에서 진행상황을 발표했다.</p>
<p>아는 것 하나 없이 매주 회의하며 새로운 용어들을 들었다. 진짜 아는게 하나도 없었다. CRUD 등 들리는 단어 몇 개를 기억해놨다가 회의 끝나고 찾아보기도 했다. 🤫</p>
<p>어플리케이션의 기능들과 페이지들을 기획하며 한 학기가 끝났다.</p>
<h1 id="여름-방학-🍉">여름 방학 🍉</h1>
<h2 id="hisfinder">HisFinder</h2>
<p>종강하고 일주일의 휴가 뒤에 프로젝트가 시작되었다.
내 1학년 여름은 HisFinder로 꽉 찼다.</p>
<p><strong>flutter</strong> 
첫 2주간은 공부를 했고, 그 뒤로 본격적인 앱 개발을 했다.</p>
<p>아무것도 모르고 배우는 플러터는 쉽지 않았고, 코드를 작성하는 시간보다 구글에 검색하고 블로그를 쳐다보는 시간이 비교도 안될 만큼, 훨씬 많았다.</p>
<p>약 두 달간 매달려있다보니, 필요한 위젯을 찾아, 원하는 모양으로 위젯을 배치할 줄은 알게 되었다.</p>
<p>DB(firestore)에 연결하는 것은 정말 일주일 내내 매달려도 모르겠어서 한결이를 앉혀놓고 하나하나 배우기도 했다. <del>군대 간 한결아,,, 살앙해,,, 😭</del></p>
<p><strong>배운 점</strong>
여름방학 전, vs코드도 잘 쓸줄 모르던 나는 여름방학 내내 진행된 프로젝트 동안 엄청 많은 것을 배웠다.</p>
<p>플러터도 조금은 다룰 수 있게 되었고, 파이어베이스에 연결하는 것도 배웠고, 터미널도 조금 쓸 줄 아는 멋쨍이 😎 가 되었다. iterm을 깔고 터미널을 꾸미기도 했고, vim 에디터도 쓸 줄 알게 되었고, git의 기본적인 개념도 알게 되었다.</p>
<p>주영이형을 따라 시작한 티스토리에 프로젝트를 기록하며 기록의 중요성을 배울 수 있었고(<del>물론 프로젝트 기록만 하고 끝났지만</del>), 내가 궁금한 것들을 구글링을 통해 스스로 알아내는 것도 배웠다(구글링도 실력이지 ,,, 🙆🏻‍♂️).</p>
<h1 id="2학기-🏃🏻♂️">2학기 🏃🏻‍♂️</h1>
<h2 id="학교">학교</h2>
<p>C 프로그래밍, C 프로그래밍 실습, 공학설계입문 등 조금 전공스러운 과목을 듣기 시작했다.</p>
<p>다행히 C 와 C 실습에서는 괜찮은 성적을 받았지만, 학기 중에 너무 많은 프로젝트에 집중하며 살았던 것 같다. 공설입도 조금 아쉽고, 다른 과목 성적도 조금 아쉬움이 남는 것 같다.</p>
<h2 id="프로젝트--한동알리미">프로젝트 : 한동알리미</h2>
<p>한동 SW 페스티벌의 1학년 부문에 제출하려고 학교 홈페이지의 공지사항을 크롤링해서 보여주는 어플리케이션을 기획했다.</p>
<p>파이썬의 셀레니움을 이용해 페이지 로그인 및 공지사항 크롤링을 하고, 파이어베이스와 플러터를 이용한 어플리케이션을 만들 계획이었다. (<del>누구나 계획이 있다. 한 대 맞기 전까지는 - 마이클 타이슨</del>)</p>
<p>기능도 구상해봤고, 페이지 디자인도 나름 예쁘게 마쳤다. 밤 새면서 플러터로 로그인 페이지 프론트 구현도 했었다.</p>
<p>그런데 셀레니움을 돌릴 방법도, 셀레니움으로 크롤링 한 데이터를 파이어베이스로 넣는 방법을 몰랐다. 셀레니움을 돌리기 위해 아마존 EC2 서버를 열었고, 관련 내용을 공부해봤지만, 아는 거 없이 의욕만 넘치던 1학년한테는 무리였다.</p>
<p>상범이형이 코드 정리만 조금 해서 내기라도 하라고 했지만, 안냈다. 결과적으론 실패한 프로젝트지만, 프로젝트 하려고 며칠 밤도 새봤고, 나름 열심히 찾아보고 공부했고, 최선을 다했다. 그래서인지 별로 아쉬움은 남지 않았다. 🤔 </p>
<p>그냥 나중에 더 많은 것들을 배우고 나면 도전해 볼 주제가 하나 생긴 것 같다.</p>
<h2 id="프로젝트--운동하자">프로젝트 : 운동하자</h2>
<p>상범이형, 해린이누나, 용현이형, 영훈이형과 함께 대경권 공공데이터 활용 경진대회에 참가했다.</p>
<p>&#39;동기 부여&#39;를 메인 주제로, 운동 일지 기록과 체중 변화 기록, 그리고 친구들과 운동 시간 경쟁 등의 기능이 있었다. 공공데이터는 비만도와 체육시설 정보를 활용했고, 구현은 플러터와 파이어베이스를 이용했다.</p>
<p>나는 마이페이지 부분을 맡아 체중 변화 그래프, 비만도 그래프 등을 구현했다. 플러터와 파이어베이스를 연결해본 경험이 있어서 데이터베이스 연결은 어렵지 않았지만, 그래프는 처음 구현해보는거라 그래프 구현에 조금 시간이 걸렸다.</p>
<p>블로그만 하루종일 뒤적거렸던 첫 프로젝트 때와 달리, 공식 문서를 위주로 찾아봤고, 맡은 부분을 구현해낼 수 있었다.</p>
<p>교외 대회는 처음이었고, 수상까지 해서 더욱 의미가 있었던 것 같다. 대회 일정이 시험기간과 겹치기도 했고, 조금 시간이 빠듯해서 구현 퀄리티에 약간의 아쉬움도 남았다.</p>
<h2 id="수상-🏅">수상 🏅</h2>
<p>&#39;운동하자&#39; 어플로 대경권 공공데이터 활용 경진대회에서 우수상을 수상했다.
교내 C프로그래밍 경진대회에서 우수상을 수상했다.</p>
<h1 id="겨울방학-⛄️">겨울방학 ⛄️</h1>
<p>여름방학 동안 포항에 남아 공부해보니, 집에 가기보다 포항에 남아 공부하는 게 좋을 것 같다는 생각이 들었다.</p>
<p>캠프도 많이 듣고, 마침 외부 거주도 해보고싶었다. 그렇게 포항에 남았다.</p>
<h2 id="캠프">캠프</h2>
<p>소중대의 동계 SW 아카데미 중 C 고수되기 캠프, 자바 기초 캠프를 신청했고, 크라에서 주최하는 DS(Data Structure) 캠프도 신청했다.</p>
<p>C 고수되기 캠프에서는 mbti 검사 프로그램을 만들어보며 파일 입출력과 포인터에 대해 복습할 수 있었고, 자바 기초 캠프는 매주 약 20<del>30문제씩 나오는 과제를 해결하며 자바의 기초를 다지는 캠프다.(</del>현재 수강중인데 사실 좀 밀렸다.~~)</p>
<p>DS캠프에서는 개념적으로만 알던 스택과 linked list를 C언어로 구현해봤고, 관련 문제를 풀어봤다. 마지막 날에 진행했던 팀플에서는 콘솔로 오목을 구현했다. 새벽 4시반까지 코딩했고, 캠프 1등을 했다. </p>
<h2 id="프로젝트--대학시간-리뉴얼">프로젝트 : 대학시간 리뉴얼</h2>
<p><del>이쯤되면 프로젝트 중독자</del> 대학시간 리뉴얼 프로젝트에 참여했다.</p>
<p>처음에 HTML, CSS도 모르는 상태였는데 선배들이 받아주셨다.
HTML, CSS, JS를 공부했고, 리액트를 공부하고 있다.</p>
<p>작은 역할이라도 맡기 위해 열심히 공부해야겠다는 생각 뿐이다. 👨🏻‍💻</p>
<h2 id="목표">목표</h2>
<p>이번 방학 목표 중 (나에게) 가장 큰 목표는 것은 HTML, CSS, JS, 그리고 웹 전반에 대해 조금 배우는 것이다.</p>
<p>유데미 강의를 보며 공부중인데, 영어공부도 할 겸 영어강의를 듣고있는데 생각보다 진도가 너무 안나가져서 잘못 선택했나 싶기도 하다.</p>
<p>방학이 6주 정도 남은 것 같은데, C 언어 복습과 자바 기초 공부도 해 볼 계획이다.</p>
<p>쓰다보니 마음이 급해진다. 열심히 살아야겠다.</p>
<h1 id="연말정산">연말정산</h1>
<h2 id="잘한-점">잘한 점</h2>
<p>여러 프로젝트에 참여해보며 열심히 살았던 것 같다. 상도 두 개나 받았다.</p>
<h2 id="아쉬운-점">아쉬운 점</h2>
<p>참여해본 프로젝트가 다 플러터와 파이어베이스를 사용하는 거라서 다양하게 배우지는 못한 것 같아서 아쉽다. 또한 진짜 배포까지 해본 프로젝트가 없는 점도 아쉬움이 조금 남는다.</p>
<h2 id="새해-다짐">새해 다짐</h2>
<p>1학년 때 이런저런 프로젝트에 참여해봤지만, 배포를 못해본 아쉬움 때문인지 무작정 많은 프로젝트에 참여하기보다 프로젝트 한 가지를 하더라도 확실하게, 배포까지 해보고싶다.
그리고 학기 중에는 프로젝트보다 학점을 조금 더 신경쓰며 살아야겠다는 생각이 들었다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2021.11.12 TID]]></title>
            <link>https://velog.io/@yeob-yi/2021.11.12-TID</link>
            <guid>https://velog.io/@yeob-yi/2021.11.12-TID</guid>
            <pubDate>Fri, 12 Nov 2021 19:57:44 GMT</pubDate>
            <description><![CDATA[<h1 id="프로젝트">프로젝트</h1>
<h2 id="한동알리미">한동알리미</h2>
<p>파이썬 파이어베이스 연결(import firebase_admin, certificate ...)
DB(파이어스토어) 짜는중
document Read 했음 (Create, update 필요)</p>
<h2 id="운동하자">운동하자</h2>
<p>MyPage 내의 띠그래프 구현
Stack 이용해 축에 숫자 올림
범위에 따라 값 나눠서 삼각형 구현함</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[첫 글 : velog 시작 !]]></title>
            <link>https://velog.io/@yeob-yi/%EC%B2%AB-%EA%B8%80-velog-%EC%8B%9C%EC%9E%91</link>
            <guid>https://velog.io/@yeob-yi/%EC%B2%AB-%EA%B8%80-velog-%EC%8B%9C%EC%9E%91</guid>
            <pubDate>Thu, 30 Sep 2021 03:22:53 GMT</pubDate>
            <description><![CDATA[<h1 id="1-계기">1. 계기</h1>
<p>사실 블로그에 무언가를 기록하는 일은 이번 여름방학에 동아리 CRA 신입 멤버끼리 방학 프로젝트를 할 때 시작했었다. 🤫</p>
<p>같이 프로젝트를 진행했던 선배이자 프로젝트 멤버인 형들이 기록의 중요성과 필요성을 얘기해주었고, 직접 형들이 공부한 것들을 정리해둔 티스토리를 보며 정말 괜찮다는 생각이 들어 첫 블로그로 티스토리를 시작했다. 그렇게 방학동안 진행한 프로젝트에 관해, 일주일에 한 번 정도 프로젝트 진행 상황이나 일주일 동안 구현한 것들 등을 티스토리에 정리해두었다.</p>
<p>정리해둔 내용을 보며 뿌듯하다는 장점도 있었고, 더 많이 기록하기 위해 프로젝트를 더 열심히 하는 현상(?)이 발생하기도 했기 때문에 블로그의 장점을 충분히 느낄 수 있었다. 🙆🏻‍♂️ 🙆🏻‍♂️</p>
<p>하지만 블로그 목적이 컴퓨터와 관련된 공부 기록인데도 불구하고 티스토리는 코드를 넣을 때 불편했다. 또한, 가장 치명적인 단점은 예쁘지 않았다. 그래서 다른 블로그로 갈아타야겠다는 결심을 했다. ( 컴공은 역시 간지가 생명이지 ,, 😎 )</p>
<h1 id="2-블로그-목적">2. 블로그 목적</h1>
<p>앞서 말했듯 블로그의 가장 큰 목적은 공부한 내용들을 기록하는 것이다.</p>
<p>나중에 내가 공부했던 것들을 다시 찾아볼 수도 있고, 기록하는 것 자체가 동기부여가 되는 현상도 경험했기 때문에 이번엔 공부했던 내용들 정리뿐만 아니라 TIL(Today I Learned, <del>안되면 This Week I Learned라도</del>,,,, 🥲 )도 해보려고 한다.</p>
<h1 id="3-블로그-선택">3. 블로그 선택</h1>
<h2 id="3-1-후보">3-1. 후보</h2>
<p>다른 사람들 블로그랑 이것저것 찾아보니 기술블로그로 보통 티스토리, 벨로그, 깃헙 블로그를 많이 쓰는 것 같았다.</p>
<h3 id="1-티스토리--tistory-">1. 티스토리 ( tistory )</h3>
<p>첫 번째 후보는 티스토리.</p>
<p>장점으로는 먼저 방학동안 써봤다는 익숙함이 가장 크고, 다른 블로그들에 비해 글을 작성하거나 방문자 집계를 확인하는 등 블로그 관리도 편하다. 광고를 달아 수익을 낼 수 있다는 것도 무시할 수 없는 장점이다.</p>
<p>그러나 가장 큰 단점, 벨로그나 깃헙 블로그에 비해 간지가 안난다. css 커스터마이징을 통해 디자인을 수정할 수 있다고 어디서 본 것 같긴 하지만 공부한 것들 기록을 위해 시작한 블로그를 위해 또 공부를 해서 고칠만큼 티스토리에 진심은 아니기 때문에,,, 탈락.</p>
<p>아 그리고 이것저것 글을 써보며 느낀건데, 광고를 달만한 퀄리티의 글을 만들기가 쉽지 않다. 대학교 1학년이라 이제 하나 둘 배워가는데, 다른 사람들 블로그 다 찾아서 얻은 정보를 내 블로그에 써놓고 광고를 달 수는 없지 않은가 !! 그래서 큰 장점이 될 뻔 했던 광고까지 장점 역할을 하지 못하면서, 티스토리는 블로그 후보에서 탈락되었다.</p>
<h3 id="2-벨로그--velog-">2. 벨로그 ( velog )</h3>
<p>다음 후보는 벨로그. 컴퓨터 관련해서 이것저것 검색하다보면 티스토리 다음으로 많이 보여서 관심을 가지게 되었다.</p>
<p>가장 큰 장점은 역시 디자인. 딱 봤을 때 깔끔하기도 하고, (사실 막 예쁘다 이런 건 없지만) 개발자를 위한 블로그라는 컨셉 때문인지 간지 폭발이다. 😎 디자인 외에도 구글 검색에 잘 나온다는 것, 개발자들이 많이 이용하고, 따라서 관련 자료들이 많다는 것도 벨로그의 장점이라고 할 수 있을 것 같다.</p>
<p>단점으로는 티스토리와 달리 광고를 달 수 없다는 것(= 수익을 낼 수 없다는 것)이 있고, 마크다운 문법으로 작성되기 때문에 티스토리에 비해 작성이 조금 귀찮다는 점 등이 있는 것 같다.</p>
<p>그렇지만 이제 대학교 1학년인데(🤓 ) 광고를 달 퀄리티의 글을 올리기까지는 한참 남은 것 같고, github의 readme 파일도 마크다운 문법으로 작성되기 때문에 벨로그에 글을 쓰며 마크다운 문법에 익숙해지면 나중에 readme 파일 쓸 때도 도움이 될 것 같아 벨로그의 단점들은 그렇게 신경이 쓰이지 않았다.</p>
<h3 id="3-깃헙-블로그--github-blog-">3. 깃헙 블로그 ( github blog )</h3>
<p>거의 마지막 후보 깃헙 블로그.</p>
<p>깃헙이라는 이름 답게 쓰는 사람도 꽤 있고, 디자인도 꽤 괜찮아 보이긴 했다. 또 마크다운 문법으로 글을 쓰는 등 벨로그랑 비슷한 점도 있었다.</p>
<p>하지만 아직 깃을 잘 다룰 줄 모르기도 하고, 블로그를 하는 이유 중 하나인 커뮤니티의 기능이 약한 것 같아 결국 탈락. 🥺</p>
<p>블로그 성격의 글들은 벨로그에 쓰고, 나중에 이것저것 프로젝트도 많이 해보고 공부한 것도 많아지면 포트폴리오 느낌으로 페이지 하나정도 만들어봐야겠다는 생각은 남았다.</p>
<h3 id="4-기타--네이버-블로그-word-press-medium-등등-">4. 기타 ( 네이버 블로그, word press, medium 등등 )</h3>
<p>위에 개발자들이 많이 쓰는 세 가지를 제외하고도 굳이 찾자면 이런 것들이 있긴 하지만,,,</p>
<p>일단 네이버 블로그는 티스토리랑 비슷하지만 개발자들이 잘 쓰지도 않고, 코드를 올리는 등에 불편함이 많아서 제외.
워드프레스나 미디엄은 종종 쓰는 개발자들이 보이긴 하지만, 워드프레스는 아직 나에겐 너무 어려워 보이고 (사실 잘 모름), 미디엄도 외국 사람들이 주로 쓰고, 우리나라 사람들은 잘 안쓰는 것 같아서 둘 다 제외.</p>
<h2 id="3-2-결론">3-2. 결론</h2>
<p>그래서 결론은 벨로그.</p>
]]></description>
        </item>
    </channel>
</rss>