<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>magic_conch07.log</title>
        <link>https://velog.io/</link>
        <description>I'm "possible"</description>
        <lastBuildDate>Mon, 02 Sep 2024 00:09:14 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>magic_conch07.log</title>
            <url>https://velog.velcdn.com/images/magic_conch07/profile/e1de0233-0467-41a2-91f8-e8909354309c/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. magic_conch07.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/magic_conch07" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[C#] ! 및 ??, ??=, ?., ?[] 연산자]]></title>
            <link>https://velog.io/@magic_conch07/C-%EB%B0%8F-.-%EC%97%B0%EC%82%B0%EC%9E%90</link>
            <guid>https://velog.io/@magic_conch07/C-%EB%B0%8F-.-%EC%97%B0%EC%82%B0%EC%9E%90</guid>
            <pubDate>Mon, 02 Sep 2024 00:09:14 GMT</pubDate>
            <description><![CDATA[<h1 id="인트로">인트로</h1>
<p>프로젝트를 진행하며 신기한 연산자를 발견했다.
C# 에서 만든 연산자인데 역시 Microsoft인가 언어가 정말 끊임없이 발전하는 것 같다.</p>
<hr>
<h1 id="연산자">연산자</h1>
<h2 id="-null-forgiving-연산자">! (null-forgiving) 연산자</h2>
<p>먼저 !에 대해 설명할 것인데 !연산자라고 하면 흔히 아는 bool 값 앞에 !을 넣어 부정하는 논리 부정 연산자를 생각 할 수 있다. 하지만 내가 지금 설명할 것은 <strong>단항 후위 !연산자이다.</strong> 이렇게 장황하게 서술했지만 실상은 간단하다.</p>
<blockquote>
<p>이름 그대로 <code>null</code>이 아니라고 명시해준다. (억제)
즉 <code>CS8625</code> 경고를 지워준다.</p>
</blockquote>
<p>솔직히 굳이 사용해야 싶기도 하고 이런 쪽 개발도 아니라 잘 사용처는 모르겠다.</p>
<p>자세한 내용은 아래 링크를 보면 될 것이다.
<a href="https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/operators/null-forgiving#c-language-specification"><u>! (null-forgiving) 연산자(C# 참조)</u></a></p>
<hr>
<h2 id="null-조건부-연산자--및-">Null 조건부 연산자 ?. 및 ?[]</h2>
<p>이 연산자의 나 같은 경우 개발을 하면서 많이 사용해 본적이 있다.
이 연산자 또한 개념은 간단하다.</p>
<blockquote>
<p>피연산자가 <code>null</code>일 경우 <code>null</code>을 <strong>반환</strong>하는 것이다.
C# : a가 <code>null</code>로 <strong>평가</strong>되면 a?.x 또는 a?[x]의 결과는 <code>null</code>입니다.</p>
</blockquote>
<p>자세한 내용
<a href="https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/operators/member-access-operators#null-conditional-operators--and-"><u>Null 조건부 연산자 ?. 및 ?[] (C#)</u></a></p>
<hr>
<h2 id="-및--연산자---null-병합-연산자">?? 및 ??= 연산자 - null 병합 연산자</h2>
<p>이 연산자들 또한 개념은 간단하다. 위에서 학습한 결과를 토대로 어느정도 예측 할 수 있을 것이다. 바로 설명해 보겠다.</p>
<h3 id="null-병합-연산자-">null 병합 연산자 ??</h3>
<blockquote>
<p>?? 연사자는 왼쪽부터 <code>null</code>이 아닐 경우 왼쪽 피연산자를 반환한다. 
만약에 <code>null</code>일 경우에는 오른쪽 연산자 평가하고 반환한다.</p>
</blockquote>
<p>코드로 보면 이해하기 편할 것이다.</p>
<pre><code class="language-cs">a = b ?? c;</code></pre>
<table>
<thead>
<tr>
<th align="center">왼쪽 피연산자(b)</th>
<th align="center">오른쪽 피연산자(c)</th>
<th align="center">반환값</th>
</tr>
</thead>
<tbody><tr>
<td align="center">O</td>
<td align="center">null</td>
<td align="center">왼쪽 값(b)</td>
</tr>
<tr>
<td align="center">null</td>
<td align="center">O</td>
<td align="center">오른쪽 값(c)</td>
</tr>
</tbody></table>
<hr>
<h3 id="null-병합-대입-연산자-">null 병합 대입 연산자 ??=</h3>
<p>개념은 위 연산자와 비슷하다.</p>
<blockquote>
<p>왼쪽 피연산자가 <code>null</code>일 경우 오른쪽 피연산자를 값에 할당한다.</p>
</blockquote>
<pre><code class="language-cs">a ??= b;</code></pre>
<p>나는 <code>null 병합 대입 연산자</code>를 싱글톤 패턴을 만들때 쓴적이 있는데
아래와 같이 썼다.</p>
<pre><code class="language-cs">instance ??= this; // instance가 null이면 this를 할당</code></pre>
<p>문득 아래 코드와 뭐가 다른지 궁금해져 속도를 비교해 보기로 하였다.</p>
<pre><code class="language-cs">if(instance == null)
{
    instance = this;
}</code></pre>
<p>먼저 <code>??=</code>연산자로 실행해 보겠다.</p>
<pre><code class="language-cs">using System.Diagnostics;

static void Main(string[] args)
{
    long startTime, endTime;
    Test t1 = null;
    Stopwatch watch = new Stopwatch();

    watch.Start();
    startTime = watch.ElapsedTicks;

    for(int i = 0; i &lt; 100; ++i)
    {
        t1 = null;
        t1 ??= new Test();
    }

    endTime = watch.ElapsedTicks;
    watch.Stop();

    Console.WriteLine($&quot;{String.Format(&quot;{0:#,###.###} ns&quot;, (1000 * 1000 * 1000 * (endTime - startTime) / Stopwatch.Frequency))}&quot;);
}</code></pre>
<table>
<thead>
<tr>
<th align="center">테스트 케이스</th>
<th align="center">소요 시간</th>
</tr>
</thead>
<tbody><tr>
<td align="center">1</td>
<td align="center">83,000 ns</td>
</tr>
<tr>
<td align="center">2</td>
<td align="center">86,200 ns</td>
</tr>
<tr>
<td align="center">3</td>
<td align="center">78,500 ns</td>
</tr>
<tr>
<td align="center">4</td>
<td align="center">79,400 ns</td>
</tr>
<tr>
<td align="center">5</td>
<td align="center">85,700 ns</td>
</tr>
</tbody></table>
<p>사양에 따라 보통 <code>7~80,000 ns</code> 를 보이고 있다.
이제 for문 안쪽 내용을 바꿔서 해보겠다.</p>
<table>
<thead>
<tr>
<th align="center">테스트 케이스</th>
<th align="center">소요 시간</th>
</tr>
</thead>
<tbody><tr>
<td align="center">1</td>
<td align="center">84,700 ns</td>
</tr>
<tr>
<td align="center">2</td>
<td align="center">83,000 ns</td>
</tr>
<tr>
<td align="center">3</td>
<td align="center">82,000 ns</td>
</tr>
<tr>
<td align="center">4</td>
<td align="center">87,200 ns</td>
</tr>
<tr>
<td align="center">5</td>
<td align="center">76,300 ns</td>
</tr>
</tbody></table>
<p>어느정도 예상했지만 그냥 차이가 없는 수준이다.
그나마 <code>??=</code> 연산자의 장점이라면 코드가 한줄이 된 정도? 
그냥 자기 취향대로 쓰면 될 것같다.</p>
<p>자세한 내용
<a href="https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/operators/null-coalescing-operator"><u>?? 및 ??= 연산자 - null 병합 연산자 (C#)</u></a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[와! 떨어졌다 ^^7]]></title>
            <link>https://velog.io/@magic_conch07/%EC%99%80-%EB%96%A8%EC%96%B4%EC%A1%8C%EB%8B%A4.-7</link>
            <guid>https://velog.io/@magic_conch07/%EC%99%80-%EB%96%A8%EC%96%B4%EC%A1%8C%EB%8B%A4.-7</guid>
            <pubDate>Sat, 25 May 2024 14:19:43 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/magic_conch07/post/ff1a5fd6-e442-4d97-b8a9-e43783693740/image.gif" alt=""></p>
<hr>
<h1 id="stac-대회-예선에서-떨어졌다-7">STAC 대회 예선에서 떨어졌다 ^^7</h1>
<p><img src="https://velog.velcdn.com/images/magic_conch07/post/780d5ab8-5520-4f0e-a42b-236873399acc/image.png" alt=""></p>
<p>장난이고</p>
<p><img src="https://velog.velcdn.com/images/magic_conch07/post/6b9a2900-cec4-4e30-b32a-4c37742c5d8c/image.png" alt=""></p>
<hr>
<p>Smart teen app challge라고 skt에서 매년 진행하는 큰 대회가 있는데 일반 엔터로
개발팀에 예선 기획서를 넣었다가 그냥 빠꾸를 당해버렸다.</p>
<p>으아아아아아아아ㅏ</p>
<p>살고싶다</p>
<p>근데 떨어진지는 며칠정도 지났지만 좀 귀찮기도 했고 ㅋㅋ
마음 좀 정리 하느라 좀 글이 늦어졌다. <del>많이 늦어졌다. ㅋㅋ</del></p>
<p>음...</p>
<p>그래서 그런지 지금 글을 쓰는 와중에 아무 생각도 안난다. 무언가 쓸때는 그때 바로바로 쓰는게 맞는 것 같다. </p>
<hr>
<h1 id="분석🔍">분석🔍</h1>
<p>성장은 실패와 경험을 통해 일어나는 것이다. 떨어졌다 해도 가만히 있는 건 아니지 않나?
나는 좌절하지 않고 더 나은 사람이 되기 위해 <strong>성장</strong>하기 위해 오늘도 달려나간다. 
그래서 떨어진 이유에 대한 분석을 진행해 보자!</p>
<h2 id="팀-결성">팀 결성</h2>
<p>일단 처음부터 팀 결성에 문제가 많았다. 팀원간 같이 팀 활동을 안해보기도 했고 너무 급작스럽게 만들어져 횡설수설 하느 경향도 있었다. 나는 여기서 팀장직을 맡았는데 팀장직도 할까 말까 하다 어찌저찌 내가 한 것도 있다. <del>하고 싶은 마음도 있었긴 했고</del> </p>
<h2 id="팀장">팀장</h2>
<p>먼저 내 문제부터 말을 해보자면 경험이 많이 부족했다. 또한 내가 리더쉽이 부족했던 것 같다.
팀원에게 전달하는 내용도 잘 전달하지 못했던 것 같고 내가 애들을 이래라 저래라 잘 이끌지 못했다. 이건 성격상도 있고 여러 요인과 일정 겹침 등 다양한 요인들로 좋지 못한 결과를 불러 왔다.</p>
<h2 id="의사소통">의사소통</h2>
<p>제일 큰 요소중 하나다. 사실상 의사소통 때문에 떨어진 경향이 있다. 
정말 이번 기회를 통해 많은 것을 느꼈는데 의사소통이 정말로 중요하다는 것을 느꼈다. 
또한 대회를 만만치 않고 세상은 차갑다. 
제대로 이야기를 해보자면 일단 경험이 부족했다. 팀 활동을 많이 해보지 않았던 것이 컸던 것 같다. 이것은 나뿐 아니라 팀원 전체도 문제가 많았다. 또한 살짝 똑부러진 애? 이런 친구가 없어서 제대로 된 이야기를 빨리 진행해보지 못했다. 기획에 대한 이야기를 해도 기획에 컨셉부분 등 큰 틀만 잡고 개발 일정을 잡고 팍팍 진행해서 일을 진행하며 팀원들이 무엇을 해야 될지 모르는 상황들이 많이 생기고 일이 제대로 진행도 되지 못했다. 또한 의사소통이 부족하여 어떻게 일이 진행되고 있는지 무엇이 부족한지? 무엇이 필요한지? 모르고 일이 진행됬다. <del>이러니까 팀이 안굴러가지</del> 그래도 그나마 막바지에 선생님께 멘토링도 받고 여러 시행착오를 통해 어느정도 의사소통 과정을 원할히 진행 할 수 있게 됐다. 원하는 바가 무엇인지 제대로 전달을 하고 기획에 없는 부분들을 많이 채워가기 시작했다.</p>
<h2 id="기획서">기획서</h2>
<p>위 얘기를 이어가서 막바지 부분에 기획서에 많은 부분을 채우고 거의 제출 직전 1~2일을 밤을 세고 달렸다. 그런데 주변을 안보고 달려서 일까? 내가 어디로 향하는지 조차 눈치채지 못했다.
기획서에 없는 부분을 채우고 했으면 예선 통과될 만 한데 왜 떨어졌냐면 우리가 어떤 게임인지 설명을 하고 컨셉 얘기를 기획서에 잘 담아냈지만 최종적으로 뭘하는 게임인데? 를 담아내지 못한 것이었다. 정확히 게임의 기능이나 컨셉에 대한 이야기를 많이 했지 정확히 무엇을 어떻게 해서 어떠한 재미도 얻을 수 있는지 이러한 내용들이 부족했다. 그래서 떨어진건지 심사위원들에 사정을 알 수 없다지만 이 원인이 제일 큰 것 같다. </p>
<h2 id="결론">결론</h2>
<p>의사소통 과정이 많이 부족하여 제대로 된 기획을 하지 못하였다. 
그러므로 기획서에 많은 빈약한 점이 보여 통과되지 못했나 싶다.</p>
<h1 id="소감">소감</h1>
<p>재밌었다. 재밌으면 다가 아닐까?
정말 많은 경험을 했다. 고통과 바꾼 성취도 느껴봤고 의사소통 과정에 대해서도 팀장인 리더에 관해서도 값진 경험을 했다. 많은 내면의 성장도 있었다.
후회하느냐? 라고 한다면 나는 후회하지 않다고 자신있게 말할 수 있다. 
성공했다면 느끼지 못할 감정을 느끼고 많은 경험을 통해 성장 할 수 있으니까</p>
<blockquote>
<p><strong>밑바닥을 찍어봐야 올라갈 수 있지 않겠는가?</strong></p>
</blockquote>
<p>지금 글을 쓰기 귀찮은 마음도 있고 너무 늦기도 한 것인지 글의 퀄리티도 낮은 것 같고
볼게 못되 보인다. 그래도 끝까지 읽어 주셨으면 감사합니다. ㅎㅎ
그럼 이만</p>
<blockquote>
<p>더 나은 내일을 위하여 
성장하는 사람이 되도록</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[완벽주의의 완성]]></title>
            <link>https://velog.io/@magic_conch07/%EC%99%84%EB%B2%BD%EC%A3%BC%EC%9D%98%EC%9D%98-%EC%99%84%EC%84%B1</link>
            <guid>https://velog.io/@magic_conch07/%EC%99%84%EB%B2%BD%EC%A3%BC%EC%9D%98%EC%9D%98-%EC%99%84%EC%84%B1</guid>
            <pubDate>Wed, 15 May 2024 12:54:10 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>If I waited for perfection... I would never write a word.
    - Margaret Atwood-</p>
</blockquote>
<hr>
<h1 id="⭐let-go">⭐Let&#39; go</h1>
<p>오랜만이다!
글을 안쓴지 한달정도 넘었다. <del>진짜 오래됐네</del> 글도 많이 쌓여있다. 한 4<del>5개 정도?</del>이것도 많이 지움거임...<del>~ 뭐... 변명을 해보자면 그동안 일이 굉장히 많았다. ~</del>진짜로~~ 개인적인 사정도 겹치고 학교 과제 나 대회 준비를 하느라 몸이 갈려나간 것 같다.</p>
<p>뭐... 그런 사정 때문에 글을 미루기도 했고 이번 글의 제목이자 본내용인 
<strong>&quot;완벽주의&quot;</strong> 때문이기도 하다. 
그래서 오늘 할 이야기는 죽어가는 식물 같은 내 블로그에 한 줌의 이슬을 시작으로 다시 블로그를 생기있게 만들어 보려 한다. 그럼 시작하도록 하자</p>
<hr>
<h1 id="💯완벽주의">💯완벽주의</h1>
<p><img src="https://velog.velcdn.com/images/magic_conch07/post/8e91c35b-d1f1-4a90-903d-95d1040fbf55/image.png" alt="">
<img src="https://velog.velcdn.com/images/magic_conch07/post/05ef34fe-0063-424f-b040-7fd290b75911/image.png" alt=""></p>
<p>나는 완벽주의 성향을 갖고 있다. <del>뭐 근데 나뿐만 아니라 다른 사람들 모두 조금씩은 갖고 있지 않을까?</del> 어쨌든 이 성향이 뭐가 문제냐면?</p>
<p>지금 이게 문제이다. 이 말을 이해하려면 완벽주의를 알고 가야 하는데 
간단하게 살펴보자, 완벽주의 말 그래도 완벽을 추구하는 것이다. 오히려 추구 이상이 될 수도 있다. 이 성향을 보인 사람들의 특징은 만족하지 못한다는 점이다. 지금 내가 하는 것보다 나은 것은 없을까? 이게 맞는 걸까? 아니면 계획만 세우다 여러 일들이 무산될 수도 있다. <del>지금 내가 이 글을 쓰고 있는 와중에도 맞춤법을 문법 검사기까지 돌려가며 신경 쓰고 있다.</del>
물론 나쁜 것만은 아니라고 할 수 있다. 하지만 문제는 계획만 세우다 끝나거나 중도 포기를 선언해 버린다거나 일이 능률이 떨어지거나 팀 활동을 할때에는 너무 비합리적인 기대치로 팀원간에 불화가 생길 수 있다. </p>
<p>이러한 복합적인 이유로 지금 이 상태가 문제라는 것이다. <del>좋은 점도 있고</del> 그래서 이 글을 쓴 것이기도 하다. <del>내 문제를 고치고 싶어서</del></p>
<hr>
<h1 id="🎉해결책">🎉해결책</h1>
<p><strong>해결책은 간단하다.</strong></p>
<h3 id="1-👍칭찬하기">1. 👍칭찬하기</h3>
<hr>
<p><img src="https://velog.velcdn.com/images/magic_conch07/post/c1267e81-34aa-4737-b26b-8ed7e09db96e/image.png" alt=""></p>
<p>칭찬은 댕댕이도 춤추게 한다 라고 하던가?
스스로 칭찬하고 북돋아줘야 한다. 완벽주의의 기준은 자기의 기준이므로 언제든지 변할 수 있다. 그리고 다른 사람에게 칭찬과 인정의 욕구를 스스로에게 찾지 않으면 타인에게 번져 타인에게 의존되는 성향이 될 수 있다.
그러므로 스스로 잘했다 칭찬해주자!</p>
<h3 id="2-😊만족하기">2. 😊만족하기</h3>
<hr>
<p><img src="https://velog.velcdn.com/images/magic_conch07/post/7f5f2d1a-7d00-4033-ad74-c22fe6919b86/image.png" alt=""></p>
<p>위가 되야지 이 해결책이 적용된다. 참는다라는 맥락도 있다.
그저 여기서 만족하면 된다. <del>그러면 퀄리티가 떨어지는 거 아님?</del>
퀄리티가 떨어질 수 있지만 이정도로 말한 정도면 이미 퀄은 괜찮은 수준이다. 그렇기도 하고 여기서 만족하지 않는다면 끝이 없을 수도 있다. 완벽주의 성향이 심한 사람인 경우 이미 엄청난 것을 이뤘어도 자신을 부정하고 비난하게 된다. 그렇다고 너무 빨리 만족을 해버려 끝은 내면 더 성장할 수 없고 더 좋은 결과물을 얻어내기 힘들다. 
그렇다고 해서 능률이 저하되거나 시작도 못하는 것도 문제이다. <del>거 참 어렵네</del> 정말 어렵다. 그래도 간단히 생각해보면 지나치지만 않으면 된다. 자기 자신을 기준으로 &#39;이 정도면 많이 했다&#39; 정도에 멈추면 되지 않을까?</p>
<h3 id="3-👊일단-시작하기">3. 👊일단 시작하기</h3>
<hr>
<p><img src="https://velog.velcdn.com/images/magic_conch07/post/1c9490f7-750b-47f0-8c52-850833ada26f/image.png" alt=""></p>
<p>이 해결책은 계획 단계에서 큰 힘을 발휘할 것 같은데
간단하다 일단 시작하는 것이다. 계획에서 힘을 빼지 않는 것이기도 하다.
<del>그래도 계획은 큰틀이라도 잡고가야 안정적일 수 있다 생각한다.</del></p>
<p>Just Do it
<img src="https://velog.velcdn.com/images/magic_conch07/post/a1a809d5-4a5c-4abd-8087-880a5ee1e2fc/image.png" alt=""></p>
<hr>
<h3 id="✍️정리">✍️정리</h3>
<p>그저 스스로 다독여주며 자신이 할수 있는 데 만큼 무리하지않고 하면되지 않을까? 정말 완벽주의 성향은 어려운 것 같다. 긍정적인 측면도 부정적인 측면도 있지만 긍정적인 측면이야 말로 자기 자신을 한계로 밀어붙여 더 성장할 수 도 있고 세상에 정말 완벽하고 아름다운 것이 탄생할 수 있지 않을까? 그래도 부정적인 측면도 무시할순 없다. 
그래도 우리 한번 해보도록 해보자 </p>
<hr>
<h1 id="📅계획">📅계획</h1>
<p>계획은 아주아주 간단하다.
그러므로 일단 난 그동안 지난 날들을 반성하며 글을 써볼 예정이다.</p>
<p>바로<del>~</del>!</p>
<h3 id="✏️하루-일지-프로젝트">✏️하루 일지 프로젝트</h3>
<p>이번 글을 시작으로 매일 그냥 글을 써보는 것이다.</p>
<p><img src="https://velog.velcdn.com/images/magic_conch07/post/331705f0-d93c-4bfa-a9c9-a5c9b9aae7f7/image.gif" alt=""></p>
<p>글이 엉성해도 내용이 짧아도 매일매일 하루 일지를 쓰는 것이다. 또한 주말에 시간이 있을 때 글을 다듬으면 되니 문제없다. 이렇게 매일매일 글을 쓰다보면 습관도 들며 글도 잘 써지지 않을까? 또한 내 완벽주의 성향을 가꿔 나에게 많은 도움이 된다면 그걸로 만족한다.</p>
<p>명색에 개발자 블로그로 여기서는 조금더 개발에 관련된 것을 올릴 예정으로
하루 일지는 아래 나의 티스토리에서 확인할 수 있다.
<a href="https://magiclibrary.tistory.com/">개발자의 일상</a></p>
<hr>
<h1 id="📌결론">📌결론</h1>
<p>오늘은 내 성향과 나의 생각에 대한 이야기를 많이 나눈 것 같다. <del>명색에 개발자 블로그인데 개발 관련이 없어도 괜찮을까?</del> 이 완벽주의 성향을 외면하지 말고 똑똑하게 이용해 보자 어쨌든 나의 성장의 좋은 거름이 된다면 나는 힘들고 귀찮아도 기꺼이 받아들이겠다. </p>
<blockquote>
<p>내일보다 더 성장한 오늘을 위해
<img src="https://velog.velcdn.com/images/magic_conch07/post/abdfc551-b3bc-4566-8ad6-84905e2f48ab/image.png" alt=""></p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[해보자!]]></title>
            <link>https://velog.io/@magic_conch07/%ED%95%B4%EB%B3%B4%EC%9E%90</link>
            <guid>https://velog.io/@magic_conch07/%ED%95%B4%EB%B3%B4%EC%9E%90</guid>
            <pubDate>Sat, 23 Mar 2024 19:55:24 GMT</pubDate>
            <description><![CDATA[<h2 id="프롤로그">프롤로그</h2>
<p>본 내용에 들어가기전 이 글을 쓰는 목적을 알고 갔으면 좋겠다는 생각이다.
일단 내생각을 먼저 말하자면 이 글을 쓰기 전까지는 마음가짐이 덜 되 있었던거 같다. <del>자세한 것은 본 내용에서</del> 글을 쓰는 와중에도 무엇을 써야할 지 잘은 모르겠다. 나의 목적은 이 글을 씀으로 나 자신을 알아가고 블로그에 글을 씀으로써 세상의 나를 표현했으면 좋겠다. &quot;난 최고야!&quot;</p>
<h1 id="introduce">Introduce</h1>
<p><img src="https://velog.velcdn.com/images/magic_conch07/post/fbdd25c8-7b42-4629-af80-968ed4089ae3/image.png" alt=""></p>
<p>내 소개를 하자면 개발자를 지망하고 있는 현재 나는 경기 게임 마이스터고에서 재학중인 2학년이다. <del>굳이 소개가 필요할까?</del> 어쨋든 </p>
<hr>
<h1 id="fire">FIRE!</h1>
<p><img src="https://velog.velcdn.com/images/magic_conch07/post/25e33af0-0d61-4860-92da-d5568b97532f/image.png" alt=""></p>
<p><strong>내 마음속 연료의 불을 지펴준 것은 선배의 Velog와 포트폴리오를 본 순간이다.</strong> <del>참고로 현재 진행중이다.</del> 일단 위 사진처럼 아주 뜨겁게 불타오르고 있다. <del>사실 글을 쓰다가 다시 쓰는 거라 그때의 감정은 조금 무뎌졌다.</del> 이 글을 쓴 계기가 되었고 나의 삶에 원동력이 되기까지 하였다. <del>그 글은 선배의 허락을 맡으면 링크를 걸어두도록 하겠다.</del> 글의 내용을 보면 자기 성찰?, 일상? 글 정도인데 
<strong>나는 그곳에서 많은 감정을 느꼈다.</strong></p>
<hr>
<h1 id="본론">본론</h1>
<p><img src="https://velog.velcdn.com/images/magic_conch07/post/6b79499a-589d-41ce-a1b1-fa2241eee0e3/image.png" alt=""></p>
<p>위 글에 대한 설명을 보태자면 그 글을 보며 선배는 대단하다고 느꼈다. 많은 자기계발 책과 유튜브 영상을 보고 삶을 경험함으로써 느끼지만 비교는 별로 좋지 못한 행동이다. 하지만 선배를 보는 순간 내 삶과 비교하기 시작했다. 나는 1학년때 공부에 집중하지도 못하고 게임에 집중하지도 못하고 자기계발도 제대로 한 것도 아니고 뭐 하나 제대로 잡고 간 것이 없는 어정쩡한 삶은 보내왔다. 그러나 보니 포트폴리오에 적을 것 하나 없었고 텅텅 빈 화면만 날 감싸올 뿐이 었다. 하지만 선배의 1학년은 나보다는 한게 많았던 것 같다. 포폴에는 적을 것과 보여줄게 많았고 나는 한 없이 초라해보였다. 그런데 보통 사람들이었으면 마음의 꺾임이 올만한데 나는 거기서 <strong>살아날려는 아주 작은 불씨</strong>를 보았다. 내 마음에는 저 선배를 꺽고 싶다는 의지가 생겨 난 것이다. 건강한 승부욕이 발동된 것이었다. <del>지금은 조금 시들지 몰라도</del> 그러므로 나는 이 글을 쓰고 있는 것이다. <del>글 하나 쓴다고 이기진 않겠지</del> 시작이 절반이라는 말이 있듯이 나는 이 글로 다시 시작함으로써 2학년은 제대로 보내야겠다. 생각하고 있다. 근데 이 의지는 이 글을 쓰기 전 부터는 조금씩 이어져 왔다. 2학년이 되며 그 좋아하던 게임도 끊을 지경이었으니 <del>참고로 지금은 하나도 안한다</del> 뭐 이런 행동을 가능케 한 것도 그저 놀기만 하지않고 그래도 공부의 끈을 잡으며 자기계발로 마인드 세팅을 한 덕분이 었다고 생각한다. 그러므로 이제는 게임만큼 공부의 흥미를 느끼고 재미를 즐기고 있다.</p>
<hr>
<h1 id="나는-도대체-뭘까">나는 도대체 뭘까?</h1>
<p><img src="https://velog.velcdn.com/images/magic_conch07/post/8459d899-e96e-4ace-a611-1610045e8034/image.png" alt=""></p>
<p>본론만 하면되지 뭘 또 이런 걸 끄집어 오냐 볼 수 있지만 이왕 시작한 김에 끝까지 글을 읽어줬으면 한다. 그러므로 조금 더 내 얘기를 해보겠다. 뭐 앞서 말했듯 나의 고등학교 1학년은 어정쩡한 삶을 보냈다. 이것 말고도 내 인생을 조금만 되돌아 봐도 그냥 내 인생이 어정쩡한 것만 같다. 공부의 흥미를 느꼈으나 학교에서 배우는 사교육의 형태나 주입식 교육같은 것은 내 체질에 맞지 않았고 그래도 예전부터 만드는 것을 좋아하고 컴퓨터 같은 기계도 좋아하고 초등학생때 스크래치나 엔트리 같은 블록코딩도 깔짝깔짝(?) 다뤄보니 지금 이 고등학교까지 오게 되었던 것 같다. 또한 나는 옛날부터 또래 애들 보다는 깊게 생각했던 것 같다. 빨리 차가운 현실에 마주쳐서일까 내가 싫어하는 행동은 남들도 싫어하니 하지 않는다는 역지사지 마인드가 강했고 도덕을 준수했다. 뭐 이것말고도 남들은 신경쓰지 않는 부분까지 배려하려 했고 바닥에 있는 쓰레기를 줍는 등 남들은 신경쓰지 않은 일들을 남몰래 해오곤 했다. 또 자기 결정을 잘 하지 못하였는데 어려서부터 중립을 좋아하고 한쪽으로 치우치지 않고 항상 모두를 만족시키고 싶기 때문이었다. 찬반 토론이나 얘기를 할때도 두쪽 의견을 종합해 나오는 최선의 결과물을 말하기도 하였으니까 그러면서 점점 나는 색 없는 흰색 도화지가 되어갔다. 딱히 잘하는 것도 없었고 못하는 것도 없고 항상 치우쳐지지 않았으니까 이쯤으로 일단 내 이야기를 일단락하려 한다. 말하고 싶은 건 많지만 이 글의 취지와 어울리지 않으니 다음에 또 이야기 해보도록 하겠다.</p>
<hr>
<h1 id="goal">Goal!</h1>
<p><img src="https://velog.velcdn.com/images/magic_conch07/post/cc069a39-9e29-4a99-948e-edb3d57fa998/image.png" alt=""></p>
<p><strong>목표</strong>
누구나 사람은 목표하나는 가지고 살아가야한다 생각한다. 나도 그 목표가 있고 일단 지금 현재로써는 그 목표는 내 고등학교 2학년을 알차게 보내자는 것이다. 1학년때 텅텅빈 포폴도 채워보고 나를 내세울만한 것도 만들어보고 3학년떄 취업을 준비할 것도 만들어보고 조금더 자세하게 보자면 지금 진행중인 SmatTeen App Challenge라는 대회를 팀원들과 재밌게 해보자는 것이 지금 당장의 목표이긴 하다. 수행평가 만점이나 더 많은 지식쌓기 등등 굉장히 많지만 <del>생각보다 할게 많네 ㅎㅎ</del> 그래도 하고 싶은대로 끝까지 해볼 것이다. 그리고 내 진짜 목표는 <strong>2033년 성공하는 대기업 게임회사 CEO가 되는 것이다.</strong> 
이 목표까지 달성하려면 지금의 목표도 열심히 해야겠지 그리고 진짜 재밌고 하고 싶은대로 낭만있게 인생을 즐길 것이다.</p>
<hr>
<h1 id="그래서-하고-싶은-말이-뭔데">그래서 하고 싶은 말이 뭔데?</h1>
<p><img src="https://velog.velcdn.com/images/magic_conch07/post/112f42fe-f8e2-4cd6-8b0f-22b91595f4f2/image.png" alt=""></p>
<p>음... 그냥 그렇다고 내가 누구인지 알고싶기도 하였고 그냥 이 글을 쓰며 생각도 정리해보고 목표도 설정해보고 의욕도 다지고 싶어 써 보았고 나는 진짜 <strong>대단한 사람</strong>이 될거라고 말하고 싶다. 내가 어떤 사람인지 뭐하는 사람인지 세상의 나를 표현해 보고 싶기도 하고 인생을 가꾸고 싶고 해볼 것도 많은 것 같다. 이 글이 다른 사람에게 도움이 될지 모르겠지만 내가 선배의 글을 보고 의욕을 얻고 의지가 생긴 것처럼 &quot;누구에게는 도움이 되지 않을 까?&quot; 라는 생각도 해본다.</p>
<hr>
<h1 id="글을-마치며">글을 마치며</h1>
<p>블로그도 처음이고 이렇게 긴 글을 써본적도 처음인 것 같다. 처음에는 굉장히 즉흥적으로 시작했지만 나쁘지 않게 잘 마무리 된것 같다. <del>아닌가?</del> 뭐 어쨌든 하고 말도 굉장히 많았고 못해본 말도 굉장히 많았던 것 같다. 또한 쓰다보니 이게 에세이도 아니고 자기소개서도 아니고 일상글도 아닌데 정리도 안되있고 무슨 해괴망층한 이상한 짬뽕글이 탄생한 것 같은데... 아무렴 어때? 그래도 프롤로그에서 말했던 것처럼 나 자신을 조금이라도 더 알아간 것 같고 이 글을 보여줌으로써 세상에 나를 표현한 것 같은 기분이 든다. 내 생각을 정리하는데에도 도움을 줬던 것 같고 여러모로 썩 나쁘지 않았던 것 같다. 그럼 마지막으로 내가 감명깊게 읽은 율냥이라는 작가에 작은어른을 남기고 가겠다. 솔직히 꼭 읽어봤으면 한다. <del><strong>진짜로</strong></del>
삶에 굉장히 큰 도움이 될것이다. 
오늘도 좋은 하루이길 기원하며 <del>너무 아재 같나? 뭐 어찌됐든 도움이 되면 그만이지</del></p>
<blockquote>
<p><a href="https://brunch.co.kr/brunchbook/jlus2">작은 어른</a></p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Unity] Jump는 Addforce or Velocity?]]></title>
            <link>https://velog.io/@magic_conch07/Unity-Jump%EB%8A%94-Addforce-or-Velocity</link>
            <guid>https://velog.io/@magic_conch07/Unity-Jump%EB%8A%94-Addforce-or-Velocity</guid>
            <pubDate>Sat, 23 Mar 2024 17:55:20 GMT</pubDate>
            <description><![CDATA[<h1 id="jump">JUMP</h1>
<p>게임을 개발하며 점프를 구현해야하는 상황은 반드시 오게될것이다.<del>점프가 있는 정상적인 상황이라면</del> 그래서 대부분 점프를 Addforce 아니면 Velocity로 구현할 것인데 난 처음에는 Addforce로 구현하였다. 대충 코드를 보자</p>
<pre><code class="language-cs">rigidbody.AddForce(Vector2.up * _jumpPower, ForceMode.Impulse);</code></pre>
<p> 이렇게 점프를 구현해 봤다. 하지만 점프를 테스트 할 수록 치명적인 오류를 보았다. 바로 연속으로 점프를 할때마다 중간중간 원래 점프보다 높게 뛰거나 낮게 뛰는 것을 발견하였다. 문제의 원인은 AddForce 이 친구 자체에 있었는데</p>
<p> AddForce는 말 그대로 물체에게 힘을 주는 것이다. 그러면 뭐 별문제가 될 수 있나? 라고 생각 할 수 있는데 Unity에서 Rigidbody 컴포넌트는 질량과 관성이 존재한다. 
AddForce는 힘을 가해 속도를 누적시킨다. 그러면 관성의 영향을 받게 된다. 그러므로 점프를 할때 관성의 영향 때문에 불균형한 점프가 되는 것이다.
이 문제를 해결하려면 질량과 관성의 영향을 받지 않는 Rigidbody의 Velocity인 속도를 이용하면 될 것이다. 코드를 보자</p>
<pre><code class="language-cs">rigidbody.velocity = new Vector3(_rigidbody.velocity.x,_jumpPower, _rigidbody.velocity.z);</code></pre>
<p>Velocity는 속도로 벡터이다. 그러므로 벡터를 넘겨줘야 하며 점프를 할때 움직임이 제한 되지 않도록 0이 아닌 현재 나의 속도를 넣어줬다. 이러면 점프 불균형이 없어지게 될 것이다.</p>
<hr>
<h2 id="추가-공부">추가 공부</h2>
<p>아래 링크를 걸어두었으니 Unity Rigidbody와 Addforce, Velocity를 더 잘 알고 싶으면 Unity API를 보는 것을 추천한다. </p>
<p><a href="https://docs.unity3d.com/ScriptReference/Rigidbody.html">Unity Rigidbody</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준 문제풀기] 1094번 : 막대기]]></title>
            <link>https://velog.io/@magic_conch07/%EB%B0%B1%EC%A4%80-%EB%AC%B8%EC%A0%9C%ED%92%80%EA%B8%B0-1094%EB%B2%88-%EB%A7%89%EB%8C%80%EA%B8%B0</link>
            <guid>https://velog.io/@magic_conch07/%EB%B0%B1%EC%A4%80-%EB%AC%B8%EC%A0%9C%ED%92%80%EA%B8%B0-1094%EB%B2%88-%EB%A7%89%EB%8C%80%EA%B8%B0</guid>
            <pubDate>Sun, 17 Mar 2024 09:04:21 GMT</pubDate>
            <description><![CDATA[<p>문제 링크 : <a href="https://www.acmicpc.net/problem/1094">https://www.acmicpc.net/problem/1094</a></p>
<hr>
<p><img src="https://velog.velcdn.com/images/magic_conch07/post/befc3d80-23b4-4d21-8ee5-7ee0e4d710c3/image.png" alt=""></p>
<hr>
<h1 id="문제">문제</h1>
<blockquote>
<p>지민이는 길이가 64cm인 막대를 가지고 있다. 어느 날, 그는 길이가 
Xcm인 막대가 가지고 싶어졌다. 지민이는 원래 가지고 있던 막대를 더 작은 막대로 자른다음에, 풀로 붙여서 길이가 Xcm인 막대를 만들려고 한다.
막대를 자르는 가장 쉬운 방법은 절반으로 자르는 것이다. 
지민이는 아래와 같은 과정을 거쳐서 막대를 자르려고 한다.
지민이가 가지고 있는 막대의 길이를 모두 더한다. 
처음에는 64cm 막대 하나만 가지고 있다. 이때, 
합이 X보다 크다면, 아래와 같은 과정을 반복한다.
가지고 있는 막대 중 길이가 가장 짧은 것을 절반으로 자른다.
만약, 위에서 자른 막대의 절반 중 하나를 버리고 남아있는 막대의 길이의 합이 X보다 크거나 같다면, 위에서 자른 막대의 절반 중 하나를 버린다.
이제, 남아있는 모든 막대를 풀로 붙여서 Xcm를 만든다.
X가 주어졌을 때, 위의 과정을 거친다면, 몇 개의 막대를 풀로 붙여서 Xcm를 만들 수 있는지 구하는 프로그램을 작성하시오. </p>
</blockquote>
<hr>
<h1 id="입력">입력</h1>
<blockquote>
<p>첫째 줄에 X가 주어진다. X는 64보다 작거나 같은 자연수이다.</p>
</blockquote>
<hr>
<h1 id="출력">출력</h1>
<blockquote>
<p>문제의 과정을 거친다면, 몇 개의 막대를 풀로 붙여서 Xcm를 만들 수 
있는지 출력한다.</p>
</blockquote>
<hr>
<h1 id="예제">예제</h1>
<p><img src="https://velog.velcdn.com/images/magic_conch07/post/3fd1c0ab-7a7d-490c-aa0a-8a68a36152db/image.png" alt=""></p>
<hr>
<p>문제를 보자 64를 절반으로 32 16 8 4 2 1... 보이지 않는가? 숫자의 수열이 2진수이다. 그러면 비트연산을 이용하면 쉽게 풀 수 있을 것이다. 
첫번째 예제를 보면 23이다. 23을 2진수로 표현하면(64자리 까지 표현 하였다.) 0010111 이다. 아래 사진을 보자</p>
<p><img src="blob:https://velog.io/3b98789e-a2d9-4e37-84de-c7ce5bfe0bd6" alt="업로드중.."></p>
<p>23은 2진수로 64자리까지 0010111 여기서 1을 찾아내면 되니 1은 4개 정답은 4가 나오는 것이다. 그러면 간단하게 for문을 7번 돌며 비트 연산을 하면 쉽게 1을 찾아 낼 수 있을 것이다. 코드를 보자</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

int main()
{
    int input = 0;  // 사용자 입력 변수
    int result = 0; // 답 출력 변수

    std::cin &gt;&gt; input; //사용자 입력 받기

    for (int i = 0; i &lt; 7; ++i)
    {
        if (input &amp; (1 &lt;&lt; i)) //0010111 &amp;연산으로 1을 왼쪽으로 i만큼씩 증가시킴
        {
            ++result;
        }
    }

    std::cout &lt;&lt; result;
}</code></pre>
<p>첫번째 if문 부터 차근차근 코드를 살펴보자</p>
<p>첫번째 if문에서는 1을 i(0)만큰 왼쪽으로 쉬프티 연산 시키면 0000001
&amp;연산을 하면 겹치는 곳은 1 부분 밖에 없으니  답은 1로 result값이 증가된다. 
이제 똑같이 반복해주면 된다.
<code>input 값 : 0010111</code> <code>첫번째 if문 값 : 0000001</code> <code>&amp;연산 : 1</code> <code>result 값 증가</code>
<code>input 값 : 0010111</code> <code>첫번째 if문 값 : 0000010</code> <code>&amp;연산 : 2</code> <code>result 값 증가</code>
<code>input 값 : 0010111</code> <code>첫번째 if문 값 : 0000100</code> <code>&amp;연산 : 4</code> <code>result 값 증가</code>
<code>input 값 : 0010111</code> <code>첫번째 if문 값 : 0001000</code> <code>&amp;연산 : 0</code> <code>result 그대로</code></p>
<p>이대로 쭉 반복하다보면 답이 나올 것이다.
답은 <code>4</code></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준 문제풀이] 10813번 : 공 바꾸기]]></title>
            <link>https://velog.io/@magic_conch07/%EB%B0%B1%EC%A4%80-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-10813%EB%B2%88-%EA%B3%B5-%EB%B0%94%EA%BE%B8%EA%B8%B0</link>
            <guid>https://velog.io/@magic_conch07/%EB%B0%B1%EC%A4%80-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-10813%EB%B2%88-%EA%B3%B5-%EB%B0%94%EA%BE%B8%EA%B8%B0</guid>
            <pubDate>Wed, 13 Mar 2024 14:28:21 GMT</pubDate>
            <description><![CDATA[<p>문제 링크 : <a href="https://www.acmicpc.net/problem/10813">https://www.acmicpc.net/problem/10813</a></p>
<hr>
<p><img src="https://velog.velcdn.com/images/magic_conch07/post/c0ac23e9-ca3d-496d-905b-2f387f3db562/image.png" alt=""></p>
<hr>
<h1 id="문제">문제</h1>
<blockquote>
<p>도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 바구니에는 공이 1개씩 들어있고, 처음에는 바구니에 적혀있는 번호와 같은 번호가 적힌 공이 들어있다.
도현이는 앞으로 M번 공을 바꾸려고 한다. 도현이는 공을 바꿀 바구니 2개를 선택하고, 두 바구니에 들어있는 공을 서로 교환한다.
공을 어떻게 바꿀지가 주어졌을 때, M번 공을 바꾼 이후에 각 바구니에 어떤 공이 들어있는지 구하는 프로그램을 작성하시오</p>
</blockquote>
<hr>
<h1 id="입력">입력</h1>
<blockquote>
<p>첫째 줄에 N (1 ≤ N ≤ 100)과 M (1 ≤ M ≤ 100)이 주어진다.
둘째 줄부터 M개의 줄에 걸쳐서 공을 교환할 방법이 주어진다. 
각 방법은 두 정수 i j로 이루어져 있으며, i번 바구니와 j번 바구니에 
들어있는 공을 교환한다는 뜻이다. (1 ≤ i ≤ j ≤ N)
도현이는 입력으로 주어진 순서대로 공을 교환한다.</p>
</blockquote>
<hr>
<h1 id="출력">출력</h1>
<blockquote>
<p>1번 바구니부터 N번 바구니에 들어있는 공의 번호를 공백으로 구분해 출력한다.</p>
</blockquote>
<hr>
<p>간단하게 N개의 바구니에 1번부터 N번까지 번호가 매겨져 있는 공이 있고
M번 i와 j 끼리 교환하면된다. 그림으로 봐보자</p>
<p><img src="https://velog.velcdn.com/images/magic_conch07/post/7ddb408f-dcfc-4073-a608-25f04491e375/image.png" alt=""></p>
<p>이런 형식에서 i와 j 교환을 M번 반복하면 되는 것이다.
<img src="https://velog.velcdn.com/images/magic_conch07/post/7944091b-5633-484e-b0fd-97473fb22160/image.png" alt=""></p>
<p>그럼 이제 코드로 구현을 해보자</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int main()
{
    int n, m, i, j, temp;
    int arr[101] = { 0 };

    std::cin &gt;&gt; n &gt;&gt; m;

    for (int x = 0; x &lt; n; ++x)
    {
        arr[x] = x + 1;
    }

    for (int x = 0; x &lt; m; ++x)
    {
        std::cin &gt;&gt; i &gt;&gt; j;

        temp = arr[i - 1];
        arr[i - 1] = arr[j - 1];
        arr[j - 1] = temp;

    }

    for (int z = 0; z &lt; n; ++z)
    {
        std::cout &lt;&lt; arr[z] &lt;&lt; &quot; &quot;;
    }
}</code></pre>
<p><img src="https://velog.velcdn.com/images/magic_conch07/post/43ed90ff-6e04-42bc-bab3-5974365e4fe7/image.png" alt=""></p>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준 문제풀이] 10810번 : 공 넣기]]></title>
            <link>https://velog.io/@magic_conch07/%EB%B0%B1%EC%A4%80-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-10810%EB%B2%88-%EA%B3%B5-%EB%84%A3%EA%B8%B0</link>
            <guid>https://velog.io/@magic_conch07/%EB%B0%B1%EC%A4%80-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-10810%EB%B2%88-%EA%B3%B5-%EB%84%A3%EA%B8%B0</guid>
            <pubDate>Wed, 13 Mar 2024 09:25:42 GMT</pubDate>
            <description><![CDATA[<p>문제 링크 : <a href="https://www.acmicpc.net/problem/10810">https://www.acmicpc.net/problem/10810</a></p>
<hr>
<p><img src="https://velog.velcdn.com/images/magic_conch07/post/3e90271d-3547-43b5-918b-4d63bfb190f4/image.png" alt=""></p>
<hr>
<h1 id="문제">문제</h1>
<blockquote>
<p>도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 또, 1번부터 N번까지 번호가 적혀있는 공을 
매우 많이 가지고 있다. 가장 처음 바구니에는 공이 들어있지 않으며, 
바구니에는 공을 1개만 넣을 수 있다.
도현이는 앞으로 M번 공을 넣으려고 한다. 
도현이는 한 번 공을 넣을 때, 공을 넣을 바구니 범위를 정하고, 
정한 바구니에 모두 같은 번호가 적혀있는 공을 넣는다. 만약, 바구니에 
공이 이미 있는 경우에는 들어있는 공을 빼고, 새로 공을 넣는다. 
공을 넣을 바구니는 연속되어 있어야 한다.
공을 어떻게 넣을지가 주어졌을 때, M번 공을 넣은 이후에 각 바구니에 
어떤 공이 들어 있는지 구하는 프로그램을 작성하시오.</p>
</blockquote>
<hr>
<h1 id="입력">입력</h1>
<blockquote>
<p>첫째 줄에 N (1 ≤ N ≤ 100)과 M (1 ≤ M ≤ 100)이 주어진다.
둘째 줄부터 M개의 줄에 걸쳐서 공을 넣는 방법이 주어진다. 
각 방법은 세 정수 i j k로 이루어져 있으며, i번 바구니부터 j번 바구니까지에 k번 번호가 적혀져 있는 공을 넣는다는 뜻이다. 
예를 들어, 2 5 6은 2번 바구니부터 5번 바구니까지에 6번 공을 
넣는다는 뜻이다. (1 ≤ i ≤ j ≤ N, 1 ≤ k ≤ N)
도현이는 입력으로 주어진 순서대로 공을 넣는다.</p>
</blockquote>
<hr>
<h1 id="출력">출력</h1>
<blockquote>
<p>1번 바구니부터 N번 바구니에 들어있는 공의 번호를 공백으로 구분해 출력한다. 공이 들어있지 않은 바구니는 0을 출력한다.</p>
</blockquote>
<hr>
<p>간단하게 M번 공을 넣는 것을 입력받고 i에서 j까지의 범위에 k번의 공을 넣으면 되는 것이다. 반복문과 배열을 사용할 수 있다.</p>
<p>조금 더 쉽게 이해하기 위해 그림으로 보자 예제 입력을 기준으로 
5개의 바구니, 1부터 5번의 공 그리고 4번 공을 넣을 수 있는 기회가 있다.</p>
<p><img src="https://velog.velcdn.com/images/magic_conch07/post/e7adcc64-77d1-47ac-965a-b7ec1bc18663/image.png" alt=""></p>
<p>이렇게 세팅을 할 수 있다. 그리고 아래의 조건대로 값을 할당 할 수 있을 것이다.</p>
<p><img src="https://velog.velcdn.com/images/magic_conch07/post/489fefb7-f2b3-4f7b-afcc-c39e26bf68b3/image.png" alt=""></p>
<p>이렇게 M번 반복을 하고 1번 부터 5번까지의 바구니에 몇번 공이 들었는지 출력하면 된다. </p>
<p>코드로는 이렇게 표현 하면 될 것이다.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int main()
{
    int n, m, i, j, k;
    int arr[101] = { 0 };

    std::cin &gt;&gt; n &gt;&gt; m;

    for (int x = 0; x &lt; m; ++x)
    {
        std::cin &gt;&gt; i &gt;&gt; j &gt;&gt; k;
        for (; i &lt;= j; ++i)
        {
            arr[i - 1] = k;
        }
    }

    for (int z = 0; z &lt; n; ++z)
    {
        std::cout &lt;&lt; arr[z] &lt;&lt; &quot; &quot;;
    }
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[C++의 연산자 순서의 중요성]]></title>
            <link>https://velog.io/@magic_conch07/%EC%97%B0%EC%82%B0%EC%9E%90-%EC%9A%B0%EC%84%A0%EC%88%9C%EC%9C%84%EC%99%80-%EA%B2%B0%ED%95%A9%EC%84%B1</link>
            <guid>https://velog.io/@magic_conch07/%EC%97%B0%EC%82%B0%EC%9E%90-%EC%9A%B0%EC%84%A0%EC%88%9C%EC%9C%84%EC%99%80-%EA%B2%B0%ED%95%A9%EC%84%B1</guid>
            <pubDate>Mon, 11 Mar 2024 16:36:19 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>&quot;인간은 망각의 동물이다&quot;
&quot;사용한 지식만이 기억에 남는다&quot;</p>
</blockquote>
<hr>
<p>코딩 문제를 풀다 굉장히 흥미로운 것을 발견하였다.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int main()
{
    int n = 100;
    int m = 1;

    std::cout &lt;&lt; n &gt; m ? 123 : 456;
}</code></pre>
<p>우리는 모두 똑똑하기 때문에 당연히 삼항연산자 정도는 간단하게 할 수 있다.(?)
그런데 코드를 컴파일하면 놀라운 사실을 알 수 있다. <del>그다지 놀랍진 않다 어짜피 똑똑한 Visual Studio가 오류를 알려준다.</del> 바로 오류가 난다는 것이다. 그런데  비교 연산자에 괄호를 씌우면 문제는 없을 거다. 
<span style="color: rgba(255,255,0,1)"><strong>그런데 문제는 지금 부터다</strong></span> 코드를 보자</p>
<hr>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int main()
{
    int n = 100;
    int m = 1;

    std::cout &lt;&lt; (n &gt; m) ? 123 : 456;
}</code></pre>
<p><strong>맞다.</strong> 전혀 문제가 없어 보인다(?). <del>문제가 있다 하면서 없음? 놀리는 거임?</del>
진정하고 잘 봐보자. <del>솔직히 잘 봐도 모르겠다</del> 우리는 분명 괄호를 씌어 비교 연산을 먼저 해 오류를 해결했다. 그런데 아마 이 코드를 실행해 보면 결과값이 이상할 것이다.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int main()
{
    int n = 100;
    int m = 1;

    std::cout &lt;&lt; (n &gt; m) ? 123 : 456;

}</code></pre>
<pre><code>output : 1</code></pre><p>자 뭔가 이상하다. 분명히 n이 m보다 크니까 True 그러면 123이 나와야 우리가 아는 삼항 연산자 아닌가? </p>
<p>하지만 답은 연산자 우선순위의 있다. 
밑에 표를 보자</p>
<hr>
<p><img src="https://velog.velcdn.com/images/magic_conch07/post/4e5c60ac-bc83-4411-9c43-09cfc3d551b1/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/magic_conch07/post/24024405-466c-4e45-b376-35401470f155/image.png" alt="">
출처 : <a href="https://computer-science-student.tistory.com/156">https://computer-science-student.tistory.com/156</a></p>
<hr>
<p>std::cout &lt;&lt; 이 코드를 보면 <span style = "background-color: rgba(255, 220, 20, 0.4)">&lt;&lt;</span> 이 연산자는 입출력 연산자로 사용하고 있지만 사실상 비트 연산자이다. 왜냐하면 입출력 연산자는 연산자 오버로딩으로 만든 연산자이기 때문이다. 그러면 조건 연산인 삼항 연산자는 연산순서가 굉장히 낮다 그렇기 때문에 이 코드에서 1이 출력 된 것이다. </p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int main()
{
    int n = 100;
    int m = 1;

    std::cout &lt;&lt; (n &gt; m) ? 123 : 456;

}</code></pre>
<pre><code>output : 1</code></pre><p>그러면 해결 방법으로 삼항연산을 더 빠르게 하기 위해 삼항 연산 전체에 괄호를 씌우는 방법이 있다. 이제 제대로 동작할 것 이다.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int main()
{
    int n = 100;
    int m = 1;

    std::cout &lt;&lt; (n &gt; m ? 123 : 456);

}</code></pre>
<pre><code>output : 123</code></pre><p>마지막으로 말을 마치며 C#의 경우 아래 코드와 같이 C#에서의 입출력은 함수의 형태를 띈다. </p>
<pre><code class="language-cs">namespace Magic
{
    public class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(&quot;Hello, World!&quot;);
        }
    }
}</code></pre>
<p>하지만 C++의 경우는 std::cout &lt;&lt; 형태로 함수 형태가 아닌 연산자를 사용하고 있다. 이런게 가능한 이유는 cout이 함수가 아닌 객체로 이루어져 있긴 때문인데 
이 내용은 다음 시간에 다루도록 하자</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[C++ 자료구조] 1강]]></title>
            <link>https://velog.io/@magic_conch07/%EC%8A%AC%EA%B8%B0%EB%A1%9C%EC%9A%B4-C%EC%83%9D%ED%99%9C-1%EA%B0%95</link>
            <guid>https://velog.io/@magic_conch07/%EC%8A%AC%EA%B8%B0%EB%A1%9C%EC%9A%B4-C%EC%83%9D%ED%99%9C-1%EA%B0%95</guid>
            <pubDate>Wed, 06 Mar 2024 12:08:12 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>&quot;인간은 망각의 동물이다&quot;
&quot;사용한 지식만이 기억에 남는다&quot;</p>
</blockquote>
<hr>
<h2 id="c-너는-대체-뭐니">C++ 너는 대체 뭐니?</h2>
<blockquote>
<p>C++은 기존 C언어의 기능을 추가하고 절차지향적 언어에 
<strong><span style = "background-color : rgba(50,200,0,0.4)">객체지향(OOP)</span></strong>를 도입하여 만든 언어이다.</p>
</blockquote>
<ul>
<li><del>우리는 소개가 중요한게 아니라 넘어가도록 하자</del></li>
</ul>
<hr>
<p><img src="https://velog.velcdn.com/images/magic_conch07/post/3c370ead-7d6b-4577-99bf-882c820e8d4a/image.png" alt=""></p>
<h2 id="span-style--color--rgba255-255--1절차지향spanprocedural-programming"><span style = "color : rgba(255, 255, , 1)">절차지향</span>(Procedural Programming)</h2>
<blockquote>
<p>절차 지향은 말 그대로 위에서 아래로 흐르듯이 <strong><span style = "background-color : rgba(200,200,30,0.4)">순차적</span></strong>이게 진행하는 프로그래밍 기법이다</p>
</blockquote>
<h3 id="장점">장점</h3>
<ul>
<li>컴퓨터와 처리구조가 유사해 처리 속도가 굉장히 빠르다.</li>
</ul>
<h3 id="단점">단점</h3>
<ul>
<li>유지보수가 어렵다.</li>
<li>디버깅이 어렵다.</li>
<li>코드에 순서가 민감하기 때문에 순서를 바뀌면 결과값 도출이 어렵다.</li>
</ul>
<hr>
<p><del>지금 까지는 유사 맛보기로 이제 Deeep(?) 하게 가 보자</del>
<img src="https://velog.velcdn.com/images/magic_conch07/post/e8470564-f58f-43ce-9088-45bdd6690ea7/image.png" alt=""></p>
<h2 id="span-style--color--rgba100-255-50-1객체지향spanobject-oriented-programming"><span style = "color : rgba(100, 255, 50, 1)">객체지향</span>(Object-Oriented Programming)</h2>
<blockquote>
<p>C++ 의 꽃이라 불러도 과언이 아닐 만큼 C++을 대표하는 특징중 하나이다.</p>
</blockquote>
<ul>
<li>객체 지향은 실제 세계를 모델로 프로그래밍을 한다 볼 수 있다.</li>
</ul>
<h3 id="객체란">객체란?</h3>
<blockquote>
<ul>
<li>사전적인 정의로 실제 존재하는 것.</li>
</ul>
</blockquote>
<ul>
<li>속성과 기능이 존재하는 프로그램 단위</li>
</ul>
<p><img src="https://velog.velcdn.com/images/magic_conch07/post/2ca0bcd6-3f7f-4719-9155-258568e8abe2/image.png" alt=""></p>
<p>객체를 톱니에 빗대 표현 할 수 있다. 톱니 각각의 객체를 서로 조립하여 무언가를 만드는 것이 객체 지향 프로그래밍이라 할 수 있다. 
객체는 <span style ="background-color : rgba(170,220,0,0.6)"><strong>부품화</strong></span>와 <span style ="background-color : rgba(200,150,50,0.6)"><strong>재사용성</strong></span>의 특징을 띈다.</p>
<p><del>객체지향은 나중에 더 자세히 다뤄 보자</del></p>
<hr>
<h1 id="span-style--color--rgba180-130-70-1언매니지드-언어spanunmanaged-language"><span style = "color : rgba(180, 130, 70, 1)">언매니지드 언어</span>(Unmanaged Language)</h1>
<blockquote>
<p>메모리 할당과 해제를 직접 관리한다</p>
</blockquote>
<ul>
<li>직접 메모리 할당과 해제를 하기 때문에 속도가 빠르다는 장점이 있다</li>
</ul>
<p>C, C++은 C#과 다르게 언매니지드 언어로 C#은 가비지 컬렉터(Garbage collector)<img src="https://velog.velcdn.com/images/magic_conch07/post/340910c6-05e7-4282-9781-a9598d56b2e0/image.png" alt="">
라는 친구가 메모리를 자체적으로 할당과 해제를 해주며 
사용자가 구체적인 메모리 관리를 할 수 없다. </p>
<p>하지만 그와 달리 언매니지드 언어는 메모리 할당과 해제를 통해 
직접적인 메모리 관리를 할 수 있다.</p>
<hr>
<h1 id="정리">정리</h1>
<ul>
<li>C++은 객체지향(OOP) 언어이다.</li>
<li>절차지향(PP)은 순차적이게 진행되는 프로그래밍 기법이다.</li>
<li>객체지향(OOP)은 톱니를 다루듯이 각각의 개체를 조립하여 무언가 만드는 프로그래밍 기법이다.</li>
<li>C++은 언매니지드 언어로 메모리 할당과 해제로 메모리 관리를 할 수 있다.</li>
</ul>
<p>지금까지 간단하게 C++을 알아봤다 자세히 알아보고 싶으면 ???(아직 준비 못함)를 보도록 하자.</p>
]]></description>
        </item>
    </channel>
</rss>