<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>dong_min_god.log</title>
        <link>https://velog.io/</link>
        <description>코린이 탈출 기원</description>
        <lastBuildDate>Mon, 30 Jan 2023 15:49:57 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>dong_min_god.log</title>
            <url>https://velog.velcdn.com/images/dong_min_god/profile/4795b7c0-cf63-453d-b773-24153b9dc273/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. dong_min_god.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/dong_min_god" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[PS][Baekjoon] 10799_쇠막대기]]></title>
            <link>https://velog.io/@dong_min_god/PSBaekjoon-10799%EC%87%A0%EB%A7%89%EB%8C%80%EA%B8%B0</link>
            <guid>https://velog.io/@dong_min_god/PSBaekjoon-10799%EC%87%A0%EB%A7%89%EB%8C%80%EA%B8%B0</guid>
            <pubDate>Mon, 30 Jan 2023 15:49:57 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/dong_min_god/post/38461eae-9046-44d0-b5ff-b1d419721636/image.png" alt=""></p>
<p><strong>&lt;문제 접근&gt;</strong></p>
<ul>
<li>레이저를 만났을 때 스택에 쌓여있는 막대기 갯수를 총 갯수에 더해준다.</li>
<li>잘려나가고 남은 나머지 부분은 총 갯수에 1을 더해준다.</li>
</ul>
<p></br></br></p>
<p><strong>&lt;코드&gt;</strong></p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;stack&gt;

using namespace std;

void check_str(string str) {
    int sum = 0;
    int str_size = str.length();
    stack&lt;int&gt; s;

    for (int i = 0; i &lt; str_size; i++) {
        if (str[i] == &#39;(&#39;) s.push(str[i]);
        else if (str[i] == &#39;)&#39; &amp;&amp; str[i - 1] == &#39;(&#39;) {
            s.pop();
            sum += s.size();
        }
        else {
            sum++;
            s.pop();
        }
    }
    cout &lt;&lt; sum;
}

int main()
{
    string input;
    cin &gt;&gt; input;
    check_str(input);

    return 0;
}</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[PS][Baekjoon] 9012_괄호]]></title>
            <link>https://velog.io/@dong_min_god/PSBaekjoon-9012%EA%B4%84%ED%98%B8</link>
            <guid>https://velog.io/@dong_min_god/PSBaekjoon-9012%EA%B4%84%ED%98%B8</guid>
            <pubDate>Mon, 30 Jan 2023 07:39:49 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/dong_min_god/post/85ef2b20-a8b4-44af-a27b-312ab7515141/image.png" alt=""></p>
<p><strong>&lt;문제접근&gt;</strong></p>
<ul>
<li>괄호가 제거되는 경우는 가장 바깥쪽부터 일어나므로 후입선출의 원리인 스택을 이용한다.</li>
<li>case분류를 한다
1) 스택이 비어있는가 - 스택에 push
2) 스택이 차있는가 - 괄호의 제거 조건인 짝을 맞추었는가? 제거 / 그 외의 경우 스택에 push
3) 마지막으로 다 입력했을 때 스택이 비어있는가 - VPS / 스택에 데이터가 남아있다면 VPS가 아님</li>
</ul>
<p></br></br></p>
<p><strong>&lt;코드&gt;</strong></p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;stack&gt;

using namespace std;
int t;

void check_str(string str) {
    int str_size = str.length();
    stack&lt;int&gt; s;
    for (int i = 0; i &lt; str_size; i++) {
        if (s.empty()) s.push(str[i]);
        else {
            if (s.top() == &#39;(&#39; &amp;&amp; str[i] == &#39;)&#39;) s.pop();
            else s.push(str[i]);
        }
    }
    if (s.empty()) cout &lt;&lt; &quot;YES&quot; &lt;&lt; &quot;\n&quot;;
    else cout &lt;&lt; &quot;NO&quot; &lt;&lt; &quot;\n&quot;;
}

int main()
{
    cin &gt;&gt; t;
    while (t--) {
        string input;
        cin &gt;&gt; input;
        check_str(input);
    }

    return 0;
}</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[PS][Baekjoon] 2960_에라토스테네스의 체]]></title>
            <link>https://velog.io/@dong_min_god/PSBaekjoon-2960%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98-%EC%B2%B4</link>
            <guid>https://velog.io/@dong_min_god/PSBaekjoon-2960%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98-%EC%B2%B4</guid>
            <pubDate>Fri, 27 Jan 2023 03:04:43 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/dong_min_god/post/7a121c7c-1b3f-4532-bebe-71c8ceef351b/image.png" alt=""></p>
<p><strong>&lt;문제접근&gt;</strong></p>
<ul>
<li>P와 P의 배수를 prime배열에 for문을 이용해 체크한다.</li>
<li>처음 체크하는 P와 P의 배수만 vector에 push_back한다.</li>
</ul>
<p><br/><br/></p>
<p><strong>&lt;코드&gt;</strong></p>
<pre><code>#include &lt;iostream&gt;
#include &lt;vector&gt;

using namespace std;

int main()
{
    vector&lt;int&gt; v;
    int prime[1001] = { 0, };
    int n, k;

    cin &gt;&gt; n &gt;&gt; k;
    for (int i = 2; i &lt;= n; i++) {
        for (int j = 1; i * j &lt;= n; j++) {
            if (prime[i * j] == 0) {
                v.push_back(i * j);
                prime[i * j] = 1;
            }
        }
    }
    cout &lt;&lt; v[k - 1];
}</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[RTOS] TASK]]></title>
            <link>https://velog.io/@dong_min_god/RTOS-TASK</link>
            <guid>https://velog.io/@dong_min_god/RTOS-TASK</guid>
            <pubDate>Sun, 22 Jan 2023 10:44:24 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/dong_min_god/post/599eecf9-0d96-493a-97ad-b0811a979c1a/image.png" alt=""></p>
<ul>
<li>실제로 cpu는 물리적으로 하나밖에 없다</li>
<li>task마다 가상의 cpu가 한 개씩 있다고 가정한다.</li>
<li>가상의 cpu마다 stack memory를 할당받는다.</li>
<li>stack memory는 task마다 다른 size로 할당해줄 수 있다.
<br/><br/></li>
</ul>
<p><img src="https://velog.velcdn.com/images/dong_min_god/post/723d0086-7bda-46fb-9075-8e5eaff2f977/image.png" alt=""></p>
<ul>
<li><strong>Multitask</strong>는 cpu가 하나가 존재할 때 동시 동작하는 것이 아니라 <strong>시간을 분할해서 개별적인 task를 실행</strong>할 수 있도록 해준다.
<br/><br/></li>
</ul>
<p><img src="https://velog.velcdn.com/images/dong_min_god/post/bcdcc60d-98c3-473d-81ec-bb224fb30003/image.png" alt=""></p>
<ul>
<li>task간의 통신(IPC)</li>
<li>task a와 b는 <strong>Inter Process Communication</strong>을 통해 정보를 주고받을 수 있다.
<br/><br/></li>
</ul>
<p><img src="https://velog.velcdn.com/images/dong_min_god/post/0975e139-f165-4e14-ac2d-5ada04151831/image.png" alt=""></p>
<ul>
<li>Multitasking 환경에서 kernel은 실행 중에 상태를 계속 변경한다.</li>
<li><strong>running, ready, blocked</strong> 상태 중의 하나에 상시 위치한다.</li>
<li>running(execute) / ready, blocked(Not execute)</li>
<li>ready는 실행될 예정이지만 아직 자기 차례가 오지 않은 task</li>
<li>blocked는 잠자고 있는 상태(sleep,waiting)</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[RTOS] Multitasking이란]]></title>
            <link>https://velog.io/@dong_min_god/RTOS-Multitasking%EC%9D%B4%EB%9E%80</link>
            <guid>https://velog.io/@dong_min_god/RTOS-Multitasking%EC%9D%B4%EB%9E%80</guid>
            <pubDate>Sat, 21 Jan 2023 16:04:00 GMT</pubDate>
            <description><![CDATA[<pre><code>int c; // key 변수
main()
{
    // while문을 통해서 사용자가 어떤 key를 눌렀는지 확인하고 있다.
    while(1){
        c = getButtonkey();
        ...
    }
}

// 사용자가 어떤 key를 눌렀는지 확인하는 함수
// getButtonkey() 함수는 응용 프로그램에서 호출하는 방법으로만 실행할 수 있다.
getButtonkey()
{    // 버튼 키처리...
    return(HW_KEY);
}</code></pre><ul>
<li><p>이런 형식을 Multitasking이라 부르진 않는다😂
<br/><br/></p>
<pre><code>int c; // key 변수
main()
{
  int tid;

  // kernel API
  taskCreate(&quot;task_Buttonkey&quot;, ...);
  ...
}
</code></pre></li>
</ul>
<p>//Task(작업)함수
task_Buttonkey()
{    // Multitasking 구조에서는 task_Buttonkey의 동시 실행이 가능하다.
    while(1){
    // 버튼 키처리...
    c = HW_KEY;
    }
}</p>
<p>```</p>
<ul>
<li>두 개의 작업(Main task, task_Buttonkey)가 동시 실행되는 중 -&gt; Multitasking</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[RTOS] 강의 내용정리 시자크]]></title>
            <link>https://velog.io/@dong_min_god/RTOS-%EA%B0%95%EC%9D%98-%EB%82%B4%EC%9A%A9%EC%A0%95%EB%A6%AC-%EC%8B%9C%EC%9E%90%ED%81%AC</link>
            <guid>https://velog.io/@dong_min_god/RTOS-%EA%B0%95%EC%9D%98-%EB%82%B4%EC%9A%A9%EC%A0%95%EB%A6%AC-%EC%8B%9C%EC%9E%90%ED%81%AC</guid>
            <pubDate>Sat, 21 Jan 2023 16:01:34 GMT</pubDate>
            <description><![CDATA[<p>취준하면서 공부해야 할 내용이 너무 많다..😂</p>
<p>보기만 해서는 머리에 남을 리가 만무하니 열심히 복기하면서 정리해보자</p>
<p>힘든 시기지만 긍정적으로.. 올해 상반기 취뽀하자 으쌰으쌰🔥</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Algorithm] GCD, LCM]]></title>
            <link>https://velog.io/@dong_min_god/Algorithm-GCD-LCM</link>
            <guid>https://velog.io/@dong_min_god/Algorithm-GCD-LCM</guid>
            <pubDate>Sat, 21 Jan 2023 04:18:41 GMT</pubDate>
            <description><![CDATA[<p>최대공약수(GCD, Great Common Divisor)와 최소공배수(LCM, Least Common Multiple)을 구해보자</p>
<p>⚡ <strong>최대공약수</strong></p>
<p>최대 공약수는 <strong>나머지 연산을 활용하는 유클리드 호제법</strong>을 이용하여 쉽게 구할 수 있다.</p>
<p>입력으로 들어온 두 수 a,b에 대하여 b=a<em>k+r 이라 표현하면 *</em>a,b의 최대공약수는 a,r의 최대공약수와 같다는 원리**를 이용한다.</p>
<p>1) 반복문 사용</p>
<pre><code>int gcd(int a, int b){
    while(b!=0){
        int r = a%b;
        a = b;
        b = r;
    }
    return a;
}       </code></pre><p>2) 재귀함수 사용</p>
<pre><code>int gcd(int a, int b){
    if(b==0) return a; 
    // b==0인 경우 더 이상 최대 공약수를 갖지 않아서 a를 반환
    else return gcd(b, a%b);
    // 유클리드 호제법을 활용하여 a,b의 최대공약수를 b,(a%b)로 구한다.
}</code></pre><p>⚡ <strong>최소공배수</strong></p>
<p>최소공배수는 <strong>두 수 a,b를 곱하고 최대공약수로 나누어주면 된다.</strong></p>
<pre><code>int lcm(int a, int b){
    return a*b / gcd(a,b);
}</code></pre><p>🔥 c++17이상 부터는 <numeric>헤더에 gcd,lcm 함수가 추가되어 있으며 유클리드 호제법으로 구현되어 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[PS][Baekjoon] 10610_30]]></title>
            <link>https://velog.io/@dong_min_god/PSBaekjoon-1061030</link>
            <guid>https://velog.io/@dong_min_god/PSBaekjoon-1061030</guid>
            <pubDate>Fri, 20 Jan 2023 13:41:04 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/dong_min_god/post/6159ce1d-4e0e-480b-9ea8-7e80243cd142/image.png" alt=""></p>
<p><strong>&lt;문제 접근&gt;</strong></p>
<ul>
<li>입력을 string으로 받는다</li>
<li>각 자리의 숫자를 vector에 넣는다</li>
<li>최대값을 도출하기 위해 역으로 sorting한다.</li>
<li>vector의 마지막 인덱스의 값이 0인지와 vector에 들어간 숫자의 합이 3의 배수인지 확인한다.</li>
</ul>
<p><br/><br/>
<strong>&lt;코드&gt;</strong></p>
<pre><code>#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
#include &lt;string&gt;

using namespace std;

int main()
{
    string s;
    vector&lt;int&gt; num;
    int sum = 0;

    cin &gt;&gt; s;

    for (int i = 0; i &lt; s.size(); i++) {
        num.push_back(s[i] - &#39;0&#39;);
        sum += num[i];
    }
    sort(num.rbegin(), num.rend());

    if (num[num.size() - 1] == 0 &amp;&amp; sum % 3 == 0)
        for (int i = 0; i &lt; num.size(); i++)
            cout &lt;&lt; num[i];
    else
        cout &lt;&lt; &quot;-1&quot;;
}</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[C] Call by value & Call by reference]]></title>
            <link>https://velog.io/@dong_min_god/C-Call-by-value-Call-by-reference</link>
            <guid>https://velog.io/@dong_min_god/C-Call-by-value-Call-by-reference</guid>
            <pubDate>Fri, 13 Jan 2023 10:00:43 GMT</pubDate>
            <description><![CDATA[<p>함수로 값을 넘겨주는 방식에는 크게 두가지가 있습니다.</p>
<ul>
<li>Call by value(값에 의한 호출)</li>
<li>Call by reference(참조에 의한 호출)</li>
</ul>
<hr>
<p>⚡ <strong>Call by value</strong></p>
<ul>
<li>함수에서 값을 복사해서 전달하는 방식으로 인자로 전달되는 변수를 함수의 매개변수에 복사합니다.</li>
<li>복사된 값은 인자로 전달한 변수와 별개의 변수가 되어 매개변수 값을 변경해도 원래의 변수에 영향을 미치지 않습니다.</li>
</ul>
<pre><code>#include &lt;stdio&gt;

void swap(int a, int b)
{
    int tmp;

    tmp = a;
    a = b;
    b = tmp;
}

int main()
{
    int a,b;
    a=10; b=20;

    printf(&quot;swap 전 : %d %d\n&quot;, a, b);
    swap(a,b);
    printf(&quot;swap 후 : %d %d\n&quot;, a, b);

    return 0;
}

** result **
swap 전 : 10 20
swap 후 : 10 20</code></pre><hr>
<p>⚡ <strong>Call by reference</strong></p>
<ul>
<li>함수에서 값 대신 주소값을 전달하는 방식</li>
<li>주소값 참조를 통해 함수 내 매개변수 값 변경을 통해 원래의 변수 값도 변경됩니다.<pre><code>#include &lt;stdio&gt;
</code></pre></li>
</ul>
<p>void swap(int *a, int *b)
{
    int tmp;</p>
<pre><code>tmp = *a;
*a = *b;
*b = tmp;</code></pre><p>}</p>
<p>int main()
{
    int a,b;
    a=10; b=20;</p>
<pre><code>printf(&quot;swap 전 : %d %d\n&quot;, a, b);
swap(a,b);
printf(&quot;swap 후 : %d %d\n&quot;, a, b);

return 0;</code></pre><p>}</p>
<p>** result **
swap 전 : 10 20
swap 후 : 20 10
```</p>
]]></description>
        </item>
    </channel>
</rss>