<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>jaegom's study room</title>
    <link>https://dsjgm921.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Wed, 6 May 2026 17:19:45 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>jaegomhoji</managingEditor>
    <item>
      <title>머신러닝/딥러닝에 필요한 기초 수학 with 파이썬 (2장)</title>
      <link>https://dsjgm921.tistory.com/227</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;* &lt;a href=&quot;https://ko.wikipedia.org/wiki/%EC%9C%84%ED%82%A4%EB%B0%B1%EA%B3%BC:TeX_%EB%AC%B8%EB%B2%95%20&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;LATEX 문법 위키 링크&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;** 티스토리의 서식에 따라서 적용이 안될 수 있다고 한다. Like 이 페이지 ㅜㅜ.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2장 함수: 세상의 모든 것을 입력과 출력으로 바라보기&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 함수란 무엇인가?&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - 입출력 관계를 수학적으로 기술하기 위한 도구이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - 함수를 도구로 사용하여 입출력 관계를 정밀하게 설명하는 작업을 '모델링'이라고 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;- 정확한 정의는?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 공집합이 아닌 두 집합 X,Y에 대해서 X의 각 원소에 Y의 원소가 1대1 대응일 때, 이 대응 f를 X에서 Y로의 함수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 지도 학습의 관점에서 입력 집합 X와 출력 집합 Y간의 관계인 대응 f를 찾는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 함수가 1대1 대응인 관계인 이유&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 동일한 입력이 들어가면 동일한 출력이 나와야 하기 때문임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 그렇다면 이 때 어떤 입력 x에 따라 출력 y가 결정됨, y의 변화는 x의 변화에 종속되어 있는 관계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 따라서 x를 독립변수(독립적으로 변화하고) y를 종속변수(x의 변화에 종속된 변수)라고 한다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;-&amp;nbsp; 함수의 기호 표현은?&lt;/b&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - &lt;span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;X&lt;/span&gt;&lt;span&gt;&amp;rarr;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;Y&lt;/span&gt;&lt;/span&gt; ,두 집합과의 관계를 강조한 표현&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - &lt;span&gt;&lt;span&gt;y&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;) , 입력과 출력관계를 강조한 표현&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 첫번째 표현이, 입력과 출력이 여러 개인 함수를 나타날 때 관계를 좀 더 명확하게 표현할 수 있음.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;X&lt;/span&gt;&lt;span&gt;&amp;rarr;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;Y 관계에서 집합 x는 함수 f의 정의역(domain)이라고 하고,&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 집합 Y는 함수 f의 공역(codomain)이라고 한다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;b&gt;- 입출력 관계(함수의 성질 혹은 경향)는 시각화로 파악하기 좋다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- 좌표계를 통해서 시각화 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- 좌표계는 차원(공간)에서 존재하는 대상을 고유한 숫자로 표현하는 시스템이다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- 많은 경우 직교 좌표계 ( rectangular coordinate system = cartesian coordinate system )을 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;- 함수는 어떤 것이 있나?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 대표적으로 다항함수, 지수함수, 로그함수, 삼각함수 등이 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 다항함수&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 다항함수란, 다항식으로 이루어진 함수를 말한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 다항식이란 항(term)이 여러개인 식을 말한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 항이란, 어떤 숫자와 문자로 이루어진 계산단위이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 즉, 어떤 숫자와 문자로 이루어진 항이 여러개인 식으로 이루어진 함수이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - ex)&amp;nbsp; ( &lt;span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;&lt;span&gt;x**&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;2) + (&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;minus;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;x) &lt;/span&gt;&lt;span&gt;+(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;2) 은 다항식이다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 단항식 역시 다항식에 포함된다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 지수함수&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 지수함수란, y = a ** x 처럼 거듭제곱 꼴의 함수를 말함.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - a는 밑(상수), x는 지수(변수)이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 함수의 관점에서, y라는 출력은 상수 a를 몇 번(x번) 거듭해서 곱해야 나오는 관계인건지?를 찾는것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 지수함수는 x의 변화에 대해서 y의 변화가 매우 크다. exponential 지수적으로 증가한다는 표현.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 지수 법칙. 따로 정리 안하겠음.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 조건 y = a**x 일때 밑 a &amp;gt; 0, a != 1.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - a = 1이면 거듭제곱해도 1이다. 상수함수.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - a &amp;gt; 0 인 이유는 여러가지가 있음.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 대표적으로 a &amp;gt; 0 일 때 연속하며 미분가능함.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 지수함수의 기본 법칙들이 성립하기 위한 조건.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 거듭제곱근&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 2이상의 정수 n에 대해서 x**n = a이라면, x를 a의 n제곱근이라고 함.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 거듭제곱근은 n개 존재하며, 무리수일 수도 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 이 말은, 항상 유리수로 표현이 안될 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 따라서 굳이 루트 표기를 하는 이유가 거듭제곱근을 표하기 편리하기 때문인 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 자연상수&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - ( 1 + 1/x ) ** x. 2.78..... 무리수임.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 위의 지수식에서 x 가 무한히 커지면 ( 극한 ) 1/x은 0에 가까워지기 때문에 밑이 1이 됨.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 따라서 &lt;b&gt;x가 아무리 커져도&lt;/b&gt; &lt;b&gt;2.78....이라는 특정 값에 수렴&lt;/b&gt;하게 되는 것임.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - &lt;b&gt;자연상수 e가 밑인 지수함수 e**x는 미분해도 e**x임. 즉 도함수가 자기 자신인 유용한 성질이 있다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 베르누이가 밝혀내고ㅡ 오일러가 자연상수 e로 처음 표기하여 논문에 등장함.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - python에서는 math.e , numpy.e에 상숫값이 소숫점 아래 15자리로 정의되어 있음.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - float64 포맷임 = 64비트 부동 소수점&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 부호부 = 1 비트, 지수부 11비트, 가수부 52 비트&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 가수부 52비트는 2진수임. 아래의 로그 성질을 이용하면, 52 * log2임. log2는 0.301 정도라 곱하면 15~&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;178&quot; data-origin-height=&quot;33&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYxJZp/btsIBfl8SGD/GasCsbYce4xVUqKPwfCwd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYxJZp/btsIBfl8SGD/GasCsbYce4xVUqKPwfCwd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYxJZp/btsIBfl8SGD/GasCsbYce4xVUqKPwfCwd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYxJZp%2FbtsIBfl8SGD%2FGasCsbYce4xVUqKPwfCwd0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;178&quot; height=&quot;33&quot; data-origin-width=&quot;178&quot; data-origin-height=&quot;33&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 로그함수&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 지수 함수의 역함수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 따라서 로그함수의 정의역은 양의 실수이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 지수 함수가 ( x=0 ,f(x)=1 ) 을 지나니, 로그 함수는 ( 1, 0 )을 지난다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 지수 함수가 밑이 달라져도 반드시 ( 0,1 )을 지나듯이, 로그 함수 밑이 달라져도 ( 1, 0 )을 반드시 지난다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 로그함수의 계산 법칙. 따로 정리 안하겠음.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - &lt;b&gt;파이썬에서 임의의 밑을 가지는 로그를 계산하기 위해서는 밑 변환 성질을 활용하여야 함.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - math나 numpy 라이브러리를 활용할 수 있음&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - np.log(x) / np.log(base) 이면 밑이 base이고 진수가 x인 로그함수임&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 역함수&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -&lt;/b&gt; 역함수란?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 어떤 함수에 이 출력 y를 입력하면 합수의 입력인 x를 출력해주는 함수&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 역함수의 존재 조건&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - &lt;b&gt;역함수가 항상 존재하는 것은 아님&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 정의역과 공역이 1대1 대응일 때만 존재함&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 예를 들어, 지수함수는 1대1 대응임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 로지스틱 시그모이드 함수&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 로지스틱 시그모이드 함수란?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - sig(z) = 1 / (1 + e ** -z) 인 s자 형태의 함수&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - &lt;b&gt;정의역은 실수 전체이나, 함숫값은 0 에서 1 사이임&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 어떤 값이라도 0 에서 1 사이로 변환되게 함. 따라서 스쿼싱 함수라고 부르기도 함.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 확률적으로 해석하기도 함.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 수 체계에 대해서&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - 자연수, N ( Natural Number )&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 자연수의 갯수는 무한하지만, 셀 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - 정수, Z ( Z is like Alpha ~ Omega )&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 정수는 자연수에 0과 음수를 더한 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 정수도 무한히 많지만 셀 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Z를 알파~오메가 처럼 사용한 것은, 이제 이산적인 모든 수를 포함하는 집합을 찾았기 때문이다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - 유리수, Q ( Quotients, rational number )&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 분자와 분모로 정수를 갖는 분수로 나타낼 수 있는 수.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - rational number는 ratio 즉, 비율이 있는 수를 뜻함.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 자연수와 정수역시 유리수임. ex) 4/2 = 2, 13/1 = 13. 이처럼 분자와 분모로 정수를 갖는 분수로 나타낼 수 있기 때문임.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 무한하지만 셀 수 있음.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - 무리수, I ( Irrational number )&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Irrational, 즉 비율로 표현하기 힘든 수.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 무한히 많으며 셀 수 없음.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - 실수, R ( Real Number )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 유리수와 무리수를 더한 수.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 수직선을 그었을 때 그 위에 있는 모든 수.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 실수의 대부분은 무리수임.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 무한히 많으며 셀 수 없음.&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; -&amp;nbsp;&lt;/p&gt;</description>
      <category>딥러닝 수학</category>
      <author>jaegomhoji</author>
      <guid isPermaLink="true">https://dsjgm921.tistory.com/227</guid>
      <comments>https://dsjgm921.tistory.com/227#entry227comment</comments>
      <pubDate>Tue, 16 Jul 2024 01:48:54 +0900</pubDate>
    </item>
    <item>
      <title>머신러닝/딥러닝에 필요한 기초 수학 with 파이썬</title>
      <link>https://dsjgm921.tistory.com/226</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1장 머신러닝이란과 선형회귀&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;b&gt; &amp;nbsp; - 머신러닝이란 무엇인가?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 말 그대로 컴퓨터에게 무언가를 가르치는 것. &amp;lt;- 인간은 이를 직관적으로 처리할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 어떻게 가르칠까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 입출력의 관계를 가르친다 ( 지도 학습 )&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 관계를 어떻게 알까?&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 수학적으로 좋은 관계인지 아닌지 계산한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 좋은 관계인지 아닌지 어떻게 알까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 좋은 관계이면 줄어드는 수치를 설정한다. ( Loss function=손실함수 or Objective Function=목적함수 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 이 수치란 어떻게 계산될까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 예측치와 타겟을 비교한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 어떻게 비교할까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 좌표상에서 비교한다. 우리는 수식을 통해 어떤 관계나 가설을 나타낼 수 있다. ex) h = ax + b&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - h stands for hypothesis&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - h = ax + b는 인공신경망의 노드로 취급하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - h = (a*x) + (b*1) 꼴로 생각할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 이때, 입력:(x,1) , 출력:(a*x) + (b*1)이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 입력에 곱해지는 벡터를 가중치라고 하며, &lt;b&gt;w(볼드임) 라고 표현한다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - &lt;/b&gt;위에서 &lt;b&gt;w&lt;/b&gt; = [w1,w2] 이며, w1 = a, w2 = b 라고 볼 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - h(x,&lt;b&gt;w&lt;/b&gt;) = w1*x + w2 라는 가설을 제시할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 위의 가설을 좋은 가설인가? 이제 이 가설(예측치)와 타겟(레이블)을 비교한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;228&quot; data-origin-height=&quot;39&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ocnfk/btsIAQtuJRq/B1l89Zkk3oJWakzVqtx79K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ocnfk/btsIAQtuJRq/B1l89Zkk3oJWakzVqtx79K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ocnfk/btsIAQtuJRq/B1l89Zkk3oJWakzVqtx79K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Focnfk%2FbtsIAQtuJRq%2FB1l89Zkk3oJWakzVqtx79K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;228&quot; height=&quot;39&quot; data-origin-width=&quot;228&quot; data-origin-height=&quot;39&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 비교하는 과정에서 발생하는 차이(손실)을 L(Loss Function)이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 좋은 관계이면 수치가 줄어든다고 했는데, 우리는 이 가중치 &lt;b&gt;w &lt;/b&gt;= [w1, w2] 를 조정하면서 관계를 수정함으로써 L을 줄일 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- 손실함수를 줄이기 위해서, 급격히 변화하는 부분을 찾아, 그 반대 방향으로 그라디언트를 업데이트 한다. ( 뒤에서 다시 다룰 것임 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 자칫 잘못하면 손실이 커질 수 있는데, 이때 그라디언트에 에타( &lt;span style=&quot;background-color: #ffffff; color: #202124; text-align: left;&quot;&gt;&amp;eta;)를 곱해서 조금씩 업데이트 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124; text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - &lt;span style=&quot;background-color: #ffffff; color: #202124; text-align: left;&quot;&gt;&amp;eta;는 lr ( Learning Rate )를 뜻한다. 보통은 1e-4~5 정도의 수치를 설정한다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124; text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 이러한 안전장치를 통해서, 최종적으로 가설을 좋은 관계가 되도록 안전하게 업데이트(최적화 할 수 있다)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;b&gt; - 다시, 머신러닝이란 컴퓨터를 통해 어떤 입력과 출력의 관계를 계산하여 잘 찾도록 최적화(개선) 하는 것을 말한다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 이 개선과정을 통계쪽에서는 회귀(regression), 비통계쪽에서는 피팅(fitting)이라고 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &lt;b&gt;&amp;nbsp; - 머신러닝에는 다양한 문제 형태에 적용할 수 있는 여러 방법론이 있다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- 마스터 알고리즘은 존재하지 않는다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- 머신러닝 [ 지도 : 분류, 회귀 등, 비지도 : 군집화, 차원 축소 등, 강화학습 ]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- 현재로써는 지도학습이 맛있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*** 위의 예제 코드&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;Weight_shift = [] &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;Loss = [] &lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; gradient_diff(num_iter, eta):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;&quot;&quot;_summary_&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; Args:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; num_iter (_type_): _description_&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; eta (_type_): _description_&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; &quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; np.random.seed(&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;921&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; random_weight = np.random.randn()&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; range(num_iter):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;# get gradient &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; grad = np.dot(X.T,np.dot(random_weight,X)-Y) &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;# MSE LOSS에 대한 도함수 &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;# update weight &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; random_weight -= eta * grad &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;# save weight diff &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Weight_shift.append(random_weight)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;# MSE LOSS 계산하여 리스트에 저장 &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Loss.append(((np.dot(random_weight,X) - Y )**&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;).sum()/&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;# when calculation is done&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;# draw plot &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; i == num_iter -&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x= np.linspace(-&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fig, (ax1,ax2,ax3) = plt.subplots(&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fig.set_size_inches((&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;15&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;))&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ax1.plot(M_1[&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;],M_1[&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;], &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'ko'&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;, markersize=&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;, label = &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;Y&quot;&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ax1.plot(x,np.dot(random_weight,x), c=&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'r'&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;, lw=&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;, label = &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;Y_Hat&quot;&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ax1.legend(fontsize = &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; )&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ax2.plot(Loss[:], &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;--&quot;&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;, label = &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'loss'&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ax2.legend(fontsize = &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; )&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ax2.set_xlabel(&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'iteration'&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ax2.set_ylabel(&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'Loss value'&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ax3.plot([i+&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; range(num_iter)],Weight_shift[:], label = &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'weight update'&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ax3.plot(&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;,original_weight, &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'ro'&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ax3.set_xlabel(&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'iteration'&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ax3.set_ylabel(&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'weight value'&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ax3.legend(fontsize = &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; )&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;# plt show at the last moment.. otherwise, the result will not properly show &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; plt.show()&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;gradient_diff(&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0.0004&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1008&quot; data-origin-height=&quot;448&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/R8xGe/btsIAbrkOjY/rVwDDLiz75FkafdPiZg2Z1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/R8xGe/btsIAbrkOjY/rVwDDLiz75FkafdPiZg2Z1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/R8xGe/btsIAbrkOjY/rVwDDLiz75FkafdPiZg2Z1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR8xGe%2FbtsIAbrkOjY%2FrVwDDLiz75FkafdPiZg2Z1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1008&quot; height=&quot;448&quot; data-origin-width=&quot;1008&quot; data-origin-height=&quot;448&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 좌) 가중치 업데이트를 통해 가설로 제시한 수식이 좋은 관계로 계선 되었음.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 중) 관계가 개선됨에 따라서 loss 역시 iteration이 늘어날 수록 줄어들고 있음.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 우) 관계가 개선됨에 따라서 weight update역시 변화율이 더디고 있음.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*** Loss Function ( MSE )에 대한 도함수 계산 손풀이.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;span style=&quot;background-color: #1e1e1e; color: #d4d4d4; text-align: start;&quot;&gt;np.dot(X.T,np.dot(random_weight,X)-Y)&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;743&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZAUbT/btsIAV2wOgr/7xxfz4jX4jR8RBFqkWlseK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZAUbT/btsIAV2wOgr/7xxfz4jX4jR8RBFqkWlseK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZAUbT/btsIAV2wOgr/7xxfz4jX4jR8RBFqkWlseK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZAUbT%2FbtsIAV2wOgr%2F7xxfz4jX4jR8RBFqkWlseK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;713&quot; height=&quot;960&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;743&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>딥러닝 수학</category>
      <author>jaegomhoji</author>
      <guid isPermaLink="true">https://dsjgm921.tistory.com/226</guid>
      <comments>https://dsjgm921.tistory.com/226#entry226comment</comments>
      <pubDate>Tue, 16 Jul 2024 00:33:15 +0900</pubDate>
    </item>
    <item>
      <title>고수준 파일연산과 저수준 파일연산 ( Python )</title>
      <link>https://dsjgm921.tistory.com/225</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;저수준 파일 연산 :&lt;/b&gt;&amp;nbsp;파일 시스템의 기본 기능을 직접 다루는 작업을 의미&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[특징]&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 직접 제어 : &lt;/b&gt;파일과 디렉토리에 대한 직접적인 접근과 제어를 가능하게 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- 운영체제의 커널이 제공하는 시스템 호출을 직접 사용하여 파일을 읽어와서 신속함.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- 열린 파일을 참조할 때 파일 기술자 file descriptor 사용 : fd를 사용하여 파일에 대한 작업 수행.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 세부적 처리 : &lt;/b&gt;각종 파일 시스템 호출을 세밀하게 처리 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 에러 관리 : &lt;/b&gt;직접 에러 처리해야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 복잡성 : &lt;/b&gt;고수준 연산보다 코드가 더 복잡하고 길어질 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- POSIX 표준에서는 주로 내장된&lt;b&gt; os함수의 open, read, write, close 메소드&lt;/b&gt;&amp;nbsp;등을 사용한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그렇지만, 다음과 같은 코드는 open을 사용하더라도, 파일 객체를 사용하기 때문에 고수준 파일 연산이다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1718083949545&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 파일 객체 사용
with open(src, 'r') as foo:
    content = foo.read() # 파일 내용 읽기
    print(content)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;아래는 파일 기술자를 사용하는 저수준 파일 연산&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1718084016526&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import os

# 파일 기술자 사용
fd = os.open(src, os.O_RDONLY)  # 파일 열기 (파일 기술자를 반환)
content = os.read(fd, 100)  # 최대 100 바이트 읽기
print(content)
os.close(fd)  # 파일 닫기&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;고수준 파일 연산 :&lt;/b&gt; 파일 및 디렉토리 작업을 추상화하여 직관적이고 사용하기 쉽게 만든 함수&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[이점]&lt;/b&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 사용 편의성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 코드 가독성&lt;/b&gt; : ex) shutil.move(src,dst)는 파일 이동 작업임을 코드로 명확히 알 수 있다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 에러 처리의 안정성 :&lt;/b&gt;&amp;nbsp;고수준 함수는 에러처리를 포함하여 작업을 수행해서 사용자가 편하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 재사용성 :&lt;/b&gt;&amp;nbsp;표준 라이브러리의 고수준 함수는 다양한 상황에서 재사용할 수 있어서 개발 시간이 절약된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 파이썬에서는 주로&lt;b&gt; shutil&lt;/b&gt;&amp;nbsp;등의 함수를 사용한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;정리&lt;/b&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저수준 파일 연산은 보다 세밀하고 정밀한 파일 조작이 필요할 때 유용하지만, 고수준 파일 연산은 코드의 간결성과 편리성을 제공하기 때문에 일반적인 파일 작업에서는 더 자주 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;shutil 파이썬 공식 문서 링크&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.python.org/ko/3.11/library/shutil.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.python.org/ko/3.11/library/shutil.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1718082798626&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;shutil &amp;mdash; High-level file operations&quot; data-og-description=&quot;Source code: Lib/shutil.py The shutil module offers a number of high-level operations on files and collections of files. In particular, functions are provided which support file copying and removal...&quot; data-og-host=&quot;docs.python.org&quot; data-og-source-url=&quot;https://docs.python.org/ko/3.11/library/shutil.html&quot; data-og-url=&quot;https://docs.python.org/3/library/shutil.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/nqzI2/hyWlhKeWzM/0rdTvWdDyu98uLYidhptA1/img.png?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200&quot;&gt;&lt;a href=&quot;https://docs.python.org/ko/3.11/library/shutil.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.python.org/ko/3.11/library/shutil.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/nqzI2/hyWlhKeWzM/0rdTvWdDyu98uLYidhptA1/img.png?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;shutil &amp;mdash; High-level file operations&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Source code: Lib/shutil.py The shutil module offers a number of high-level operations on files and collections of files. In particular, functions are provided which support file copying and removal...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.python.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;lt; 유의할 점 &amp;gt;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;shutil은 파일의 메타 데이터를 복사하지 않는다. ex) ACL, 그룹 등&amp;nbsp;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;POSIX ( 리눅스, 유닉스 ), Mac, WIndows 모두 해당한다.&amp;nbsp;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ACL (Access Control List)&lt;/b&gt;: 파일에 대한 상세한 권한 설정을 나타냅니다. 예를 들어, 특정 사용자나 그룹이 파일에 대해 어떤 권한을 가지고 있는지를 정의합니다. 이 정보가 복사되지 않습니다. -&amp;gt; 접근 권한&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;파일 소유자 및 그룹&lt;/b&gt;: 파일의 소유자와 그룹 정보가 복사되지 않습니다. 원본 파일의 소유자와 그룹 설정이 새로운 파일에는 반영되지 않습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상 딥러닝 배포 프레임워크에서 shutil.rmtree로 이미지와 annotation temp폴더를 지우는 이유를 알아보았다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;python&quot; style=&quot;color: #444444; text-align: justify;&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt; os.system(권한부여 + &quot;rm -rf &quot; + folder_path)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 코드가 길어진다&lt;/p&gt;
&lt;pre class=&quot;python&quot; style=&quot;color: #444444; text-align: justify;&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;os.rmdir()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 빈 디렉토리만 지울 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;pre style=&quot;color: #444444; text-align: justify;&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import shutil
shutil.rmtree(src, ignore_errors=True)&lt;/code&gt;&lt;/pre&gt;</description>
      <author>jaegomhoji</author>
      <guid isPermaLink="true">https://dsjgm921.tistory.com/225</guid>
      <comments>https://dsjgm921.tistory.com/225#entry225comment</comments>
      <pubDate>Tue, 11 Jun 2024 14:34:45 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 - LV 0- 1일차 복습</title>
      <link>https://dsjgm921.tistory.com/224</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제 1. 두 수의 차&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;정수 num1과 num2가 주어질 때, num1에서 num2를 뺀 값을 return하도록 soltuion 함수를 완성해주세요.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;제한사항&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;50000&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;le; num1 &amp;le; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;50000&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;50000&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;le; num2 &amp;le; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;50000&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution(num1, num2):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; answer = (&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;lambda&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; num1, num2 : num1 - num2)(num1, num2)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; answer&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;lambda 를 사용해서 간결하게 표현할 수 있다. 들어가는 수는 순서대로이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(lambda x,y : x-y)(num1,num2)가 더 나은 코드.&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;solution(&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;) # 1&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제 2. 두 수의 곱&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;정수 num1, num2가 매개변수 주어집니다. num1과 num2를 곱한 값을 &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 하도록 solution 함수를 완성해주세요.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;제한사항&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;le; num1 &amp;le; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;100&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;le; num2 &amp;le; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;100&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution(num1:int, num2:int)-&amp;gt;int:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; answer = num1 * num2 &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; answer&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;solution(&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;) # 12&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 마찬가지로, lambda를 사용하면&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution(num1:int, num2:int)-&amp;gt;int:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; answer = (&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;lambda&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; x,y : x*y)(num1, num2)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; answer&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제 3. 몫 구하기&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;정수 num1, num2가 매개변수로 주어질 때, num1을 num2로 나눈 몫을 &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 하도록 solution 함수를 완성해주세요.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;제한사항&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;lt; num1 &amp;le; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;100&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;lt; num2 &amp;le; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;100&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution(num1, num2):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;assert&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; num1 * num2 !=&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; answer = num1//num2&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; answer&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 제한 사항을 잘 읽어보면, 주어진 변수 두 개 모두 0 초과라서 assert문은 필요가 없다. 그냥 사용해봄.&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;solution(&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;) # 1&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제 4. 숫자 비교하기&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;정수 num1과 num2가 매개변수로 주어집니다. 두 수가 같으면 &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 다르면 -&lt;/span&gt;&lt;span style=&quot;color: #f44747;&quot;&gt;1을&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; retrun하도록 solution 함수를 완성해주세요.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;제한사항&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;le; num1 &amp;le; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;000&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;le; num2 &amp;le; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;000&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution(num1, num2):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; num1==num2 &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;굉장히 직관적인 파이썬의 one-line 코딩. 역시 보기 너무 좋다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제 5. 나머지 구하기&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;정수 num1, num2가 매개변수로 주어질 때, num1를 num2로 나눈 나머지를 &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 하도록 solution 함수를 완성해주세요.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하고 빠른 버전 O(1)&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution1(num1, num2):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; answer = num1%num2&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; answer&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;느리고 안좋은 버전. O(n)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 문제에서는 while이나 for등의 조건문은 최대한 안쓰는 것이 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수가 커지니 time.time() 으로 10초 이상 차이 나기도 함.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간 복잡도 차이가 명확하다.&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution2(num1, num2):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;#return num1%num2&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; num1 &amp;gt;= num2:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; num1 -= num2&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; num1&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제 6. 나이 구하기&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;머쓱이는 선생님이 몇 년도에 태어났는지 궁금해졌습니다. &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f44747;&quot;&gt;2022년&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 기준 선생님의 나이 age가 주어질 때, 선생님의 출생 연도를 &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 하는 solution 함수를 완성해주세요&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;lt; age &amp;le; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;120&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;나이는 태어난 연도에 &lt;/span&gt;&lt;span style=&quot;color: #f44747;&quot;&gt;1살이며&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 매년 &lt;/span&gt;&lt;span style=&quot;color: #f44747;&quot;&gt;1월&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #f44747;&quot;&gt;1일마다&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #f44747;&quot;&gt;1살씩&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 증가합니다.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution(age):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; 태어난 해에 1살임. &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; 2022년도 기준으로 2022년도 출생은, &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; 2022 - 2022 = 0 이지만 +1 살임. &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; 따라서 현재연도+1이 되어야 함. &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; &quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; answer = &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2023&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; - age&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; answer&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제 7. 두 수의 합&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;# 두 수의 합 &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;정수 num1과 num2가 주어질 때, num1과 num2의 합을 return하도록 soltuion 함수를 완성해주세요.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;000&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;le; num1 &amp;le; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;000&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;000&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;le; num2 &amp;le; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;000&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉬운 버전&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution(num1, num2):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; answer = num1 + num2 &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; answer&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력 튜플로 받아서 람다로 전부 더하기&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;solution=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;lambda&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; *x:sum(x)&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제 8. 배열의 평균 값&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;le; numbers의 원소 &amp;le; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;000&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;le; numbers의 길이 &amp;le; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;100&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;정답의 소수 부분이 &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;.0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 또는 .5인 경우만 입력으로 주어집니다.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution1(numbers):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; answer =&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; x &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; numbers:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; answer += x &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; answer /= len(numbers) &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; answer&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;solution([&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;89&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;90&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;91&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;92&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;93&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;94&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;95&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;96&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;97&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;98&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;99&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;]) # 94&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 방법 말고도,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;import numpy as np&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;np.mean([array])도 가능하다&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 방법도 가능하다. ( 숫자가 정렬되어 있고, 간격이 같아서 )&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution2(numbers):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; num_len = len(numbers)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; answer = (numbers[&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;]+numbers[-&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;]) * (num_len /&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; answer /= num_len&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; len(numbers) %&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; !=&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; answer = numbers[int((num_len -&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;) / &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;)]&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; answer&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10억 단위 이상으로 연산을 시키면, for문 O(n) 이 아래 index로 바로 접근하는 O(1)보다 2.5초 이상 느렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제 9. 각도기&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;각에서 &lt;/span&gt;&lt;span style=&quot;color: #f44747;&quot;&gt;0도&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 초과 &lt;/span&gt;&lt;span style=&quot;color: #f44747;&quot;&gt;90도&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 미만은 예각, &lt;/span&gt;&lt;span style=&quot;color: #f44747;&quot;&gt;90도는&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 직각, &lt;/span&gt;&lt;span style=&quot;color: #f44747;&quot;&gt;90도&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 초과 &lt;/span&gt;&lt;span style=&quot;color: #f44747;&quot;&gt;180도&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 미만은 둔각 &lt;/span&gt;&lt;span style=&quot;color: #f44747;&quot;&gt;180도는&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 평각으로 분류합니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;각 angle이 매개변수로 주어질 때 &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;예각일 때 &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;, 직각일 때 &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;, 둔각일 때 &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;, 평각일 때 &lt;/span&gt;&lt;span style=&quot;color: #f44747;&quot;&gt;4를&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; return하도록 solution 함수를 완성해주세요.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;예각 : &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;lt; angle &amp;lt; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;90&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;직각 : angle = &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;90&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;둔각 : &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;90&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;lt; angle &amp;lt; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;180&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;평각 : angle = &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;180&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;제한사항&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;lt; angle &amp;le; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;180&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;angle은 정수입니다&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution(angle):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; answer = (angle // &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;90&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;) * &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; + (angle % &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;90&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;) * &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; answer&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;90도로 나눈 몫은 ( 0,1,2 ) * 2 -&amp;gt; ( 0, 2, 4 )로 바로 답.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나머지가 있다면 True 일때 1, False일 때 0.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제 10. 짝수의 합&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 하도록 solution 함수를 작성해주세요.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;lt; n &amp;le; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1000&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3가지로 풀어봤다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 정직한 답.&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution(n):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; answer = &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; nums &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; range(&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;,n+&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; nums % &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; == &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; answer += nums&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; answer&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. list comprehension. 간결하고 직관적인 답.&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution(n):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; sum([i &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; range(&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;, n + &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;)])&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. DP풀면서 썼던 memoization 사용. 복습. 어쨌든 점화식으로 표현 가능하니까 이렇게 풀 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;i번째 배열의 항은 = i-1번째 배열의 항 + 2*i 이다.&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution(n):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; # n이 2 이하일 경우 바로 끝&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; n &amp;lt; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; arr = [&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;] * (n // &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; + &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;) # 짝수니까 배열은 반만 만들어도 된다.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; arr[&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;] = &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0 # 0번째 , 1번째는 미리 할당해놓는다.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; arr[&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;] = &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; k &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; range(&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;, n // &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; + &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;): # 2부터 끝까지 가자~&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; arr[k] = arr[k - &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;] + &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; * k # 점화식&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; arr[n // &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;]&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제 11. 양꼬치&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제 12. 두 수의 나눗셈&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;정수 num1과 num2가 매개변수로 주어질 때, &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;num1을 num2로 나눈 값에 &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #f44747;&quot;&gt;000을&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 곱한 후 정수 부분을 &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;lt; num1 &amp;le; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;100&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;lt; num2 &amp;le; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;100&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution(num1, num2):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; int((num1/num2)*&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제 13. 중복된 숫자 개수&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;정수가 담긴 배열 array와 정수 n이 매개변수로 주어질 때, &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;array에 n이 몇 개 있는 지를 &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 하도록 solution 함수를 완성해보세요.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노가다&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution(array:list, n:int)-&amp;gt;int:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; cnt = &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; num &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; array:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; num == n:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cnt += &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; cnt&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉬운 길&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution(array, n):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; array.count(n)&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 14. 머쓱이보다 키 큰 사람&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;머쓱이는 학교에서 키 순으로 줄을 설 때 몇 번째로 서야 하는지 궁금해졌습니다. &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;머쓱이네 반 친구들의 키가 담긴 정수 배열 array와 머쓱이의 키 height가 매개변수로 주어질 때, &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;머쓱이보다 키 큰 사람 수를 &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 하도록 solution 함수를 완성해보세요.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;le; array의 길이 &amp;le; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;100&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;le; height &amp;le; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;200&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;le; array의 원소 &amp;le; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;200&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;array.sort()를 사용할 수 있었던 이유는, 배열의 길이가 100보다 작기 때문이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;O(n log n )을 해도 무방했음.&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution(array:list, height:int)-&amp;gt;int:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; 정렬을 한 뒤, 처음으로 머쓱이보다 키 큰 사람이 나오는 인덱스를 찾고,&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; 전체 길이에서 빼주면 구할 수 있음 &lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; &quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; n = &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; array.sort() &lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; n &amp;lt; len:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; array[n] &amp;gt; height:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;break&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; n += &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; answer = len(array) - n &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; answer&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution(array, height):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; 정렬을 하지 않는게 O(n) 임. &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; 정렬을 하면 O(n log n) 이다. &lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; 작은 n 값에서는 O(n log n)과 O(n)의 차이가 크지 않을 수 있습니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; 큰 n 값에서는 O(n log n)이 O(n)보다 더 큰 시간이 소요됩니다. &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; n = 10인 경우, log(10) &amp;asymp; 2.3 따라서 n log n &amp;asymp; 10 * 2.3 = 23 , n log n(23) &amp;gt; n(10)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; n = 100인 경우, log(100) &amp;asymp; 4.6 따라서 n log n &amp;asymp; 100 * 4.6 = 460 , n log n (460) &amp;gt; n (100)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; n = 1000인 경우, log(1000) &amp;asymp; 6.9 따라서 n log n &amp;asymp; 1000 * 6.9 = 6900 &lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; &quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; sum(&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; a &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; array &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; a &amp;gt; height)&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;array가 100까지기 때문에, 사실 100부터도 n log n &amp;gt; n 이지만, 큰 차이가 없었던 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 효율적으로 짜는 코드는 for문을 이용한 O(n)으로, 위와 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제 15. 중앙값 구하기&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마찬가지로, array가 홀수이고 100보다 적은 경우&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같이 구할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution(array):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; 정렬 후, 홀수라서&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; 중앙의 인덱스만 구하면 된다. &lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; 힌트는 array의 길이가 &amp;lt; 100. &lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; 만약 array의 길이가 &amp;gt; 10000 이상이었으면?&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; &quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; array.sort()&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; array[len(array)//&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;]&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 array가 일정 크기 이상이라면, quick select 알고리즘으로 풀도록 하자.&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;# 퀵 셀렉트 방식 &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&lt;a href=&quot;https://devraphy.tistory.com/&quot;&gt;https://devraphy.tistory.com/&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;372 # 이 블로그 참고하기&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제 16. 짝수는 싫어요&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;정수 n이 매개변수로 주어질 때, &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;n 이하의 홀수가 오름차순으로 담긴 배열을 return하도록&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;solution 함수를 완성해주세요.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;le; n &amp;le; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;100&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1부터 2씩 증가시키면서 배열에 넣기&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution(n):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; arr = [] &lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; range(&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;,n+&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; arr.append(i)&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; arr&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제 17. 피자 나눠 먹기 1&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;머쓱이네 피자가게는 피자를 일곱 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 주어질 때, &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;모든 사람이 피자를 한 조각 이상 먹기 위해 필요한 피자의 수를 &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 하는 solution 함수를 완성해보세요.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인원수/피자조각으로 몇 판이 필요한지 계산하고,&amp;nbsp; 나머지가 있으면 1판을 더 더해준다.&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution(n):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; n // &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; + ( &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; n%&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; ) &lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GPT발 코드도 재밌다. 1명이어도 1판을 먹어야 되기 떄문에 ( n+6 = 7 )으로 1이 되게 해줬다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution(n):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; (n+&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;) // &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;7&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제 18. 옷가게 할인 받기&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;머쓱이네 옷가게는 &lt;/span&gt;&lt;span style=&quot;color: #f44747;&quot;&gt;10만&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 원 이상 사면 &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;%, &lt;/span&gt;&lt;span style=&quot;color: #f44747;&quot;&gt;30만&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 원 이상 사면 &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;%, 5&lt;/span&gt;&lt;span style=&quot;color: #f44747;&quot;&gt;0만&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 원 이상 사면 &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;%를 할인해줍니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;구매한 옷의 가격 price가 주어질 때, 지불해야 할 금액을 &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 하도록 solution 함수를 완성해보세요.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;le; price &amp;le; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;000&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;000&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;price는 &lt;/span&gt;&lt;span style=&quot;color: #f44747;&quot;&gt;10원&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 단위로(&lt;/span&gt;&lt;span style=&quot;color: #f44747;&quot;&gt;1의&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 자리가 &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;) 주어집니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;소수점 이하를 버린 정수를 return합니다.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노가다 코드&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution(price):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; price &amp;gt;= &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;500000&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; price *= &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0.80&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;elif&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; price &amp;gt;= &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;300000&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; price *= &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0.90&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;elif&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; price &amp;gt;= &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;100000&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; price *= &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0.95&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; int(price)&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# 결제가격 : 할인율의 형태로 얼마를 구매했을때 어느정도 할인받을 수 있는지 &lt;b&gt;문제에 맞게 가독성이 좋아진 코드.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# 내림차순으로 정렬을 해줘야 종료 시점이 알맞게 된다.&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;# 일부러 딕셔너리를 큰 값부터 작은 값 찾으면 return하면서 종료되도록 정렬함. &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution(price):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; discount_rates = {&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;500000&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0.8&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;300000&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0.9&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;100000&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0.95&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp;# dic.items()로 key 와 value를 받는다. &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; discount_price, discount_rate &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; discount_rates.items():&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # 만약 결제 가격이 할인가격의 key보다 같거나 크다면 ( 그 이상의 할인율이 적용되어야 한다 )&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; price &amp;gt;= discount_price:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# 할인요금을 계산하여 반환하면서 종료.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; int(price * discount_rate)&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제 19. 아이스 아메리카노 , 특이사항 없음&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution(money):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; [ money // &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;5500&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; , money % &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;5500&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; ]&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제 20. 개미군단.&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;개미 군단이 사냥을 나가려고 합니다. &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;개미군단은 사냥감의 체력에 딱 맞는 병력을 데리고 나가려고 합니다. &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;장군개미는 &lt;/span&gt;&lt;span style=&quot;color: #f44747;&quot;&gt;5의&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 공격력을, 병정개미는 &lt;/span&gt;&lt;span style=&quot;color: #f44747;&quot;&gt;3의&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 공격력을 일개미는 &lt;/span&gt;&lt;span style=&quot;color: #f44747;&quot;&gt;1의&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 공격력을 가지고 있습니다. &lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;예를 들어 체력 &lt;/span&gt;&lt;span style=&quot;color: #f44747;&quot;&gt;23의&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 여치를 사냥하려고 할 때, 일개미 &lt;/span&gt;&lt;span style=&quot;color: #f44747;&quot;&gt;23마리를&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; 데리고 가도 되지만, &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;장군개미 네 마리와 병정개미 한 마리를 데리고 간다면 더 적은 병력으로 사냥할 수 있습니다. &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;사냥감의 체력 hp가 매개변수로 주어질 때, &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;사냥감의 체력에 딱 맞게 최소한의 병력을 구성하려면 &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;몇 마리의 개미가 필요한지를 return하도록 solution 함수를 완성해주세요.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;hp는 자연수입니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;le; hp &amp;le; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1000&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for + while문의 형태로 그리디 알고리즘을 사용해도 되는 문제이다. 동전 문제 ( 동전을 가장 적게 가져가려는 ~ )&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주어진 자원에서 양적으로 최소의 자원만 할당할 수 있을지에 관한 문제들이 비슷한 형태.&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; solution(hp):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; # 딱 맞게 최소한의 병력 &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; # 그리디 알고리즘 , 동전 문제 &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp; &amp;nbsp; &quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; ant_cnt = &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; ant_attk = [&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;] # 순서는 내림차순 정렬되어야 한다.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; ants &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; ant_attk:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; much = (hp//ants) # 최대한 계산할 수 있는 만큼 큰 단위부터 계산, 몫 = 몇 마리인지.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; hp -= much*ants # 현재 피에서 까준다.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ant_cnt += much # 개미 수를 합산해준다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; ant_cnt&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;solution(&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;999&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;) # 201&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;</description>
      <category>코딩테스트/프로그래머스 LV.0</category>
      <author>jaegomhoji</author>
      <guid isPermaLink="true">https://dsjgm921.tistory.com/224</guid>
      <comments>https://dsjgm921.tistory.com/224#entry224comment</comments>
      <pubDate>Tue, 4 Jun 2024 00:07:50 +0900</pubDate>
    </item>
    <item>
      <title>코딩 테스트 팁 요약</title>
      <link>https://dsjgm921.tistory.com/223</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;[ 딩코딩코 ]의 코딩 테스트 팁 요약&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영상 링크 : &lt;a href=&quot;https://www.youtube.com/watch?v=P1Nrv0xSRL8&quot;&gt;https://www.youtube.com/watch?v=P1Nrv0xSRL8&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코딩 테스트는 가장 낮은 허들이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 3가지 능력을 함양해야 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;배경지식 : &lt;/b&gt;기초적인 프로그래밍 지식 ( 가장 배우기 쉬우나, 처음 하면 어려움 )
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;ex) 피타고라스의 원리를 알기 위해서 알아야 할 것이 많다..&lt;/li&gt;
&lt;li&gt;아예 &lt;b&gt;프로그래밍 기초 지식&lt;/b&gt;이 없으면 처음부터 하기 힘들고, 여기서 많이 포기한다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기초적인 수학지식&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;구현력 : &lt;/b&gt;문제 유형화 능력 + 생각한 로직대로 코드를 짜는 능력이라고 생각.&amp;nbsp;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;아가리만 터는 개발자들이 많다. 직접 만들어보면 됨.&lt;/li&gt;
&lt;li&gt;알고리즘을 생각한 뒤 &quot;의식적으로&quot; 많이 짜보자. &lt;b&gt;많이 풀어보면 된다.&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;연상력 : &lt;/b&gt;문제 유형화 + 풀이에 대한 힌트를 얻는 능력.&amp;nbsp;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;입력값, 출력값, 데이터의 형식을 보고 힌트를 얻을 수 있는 능력&lt;/li&gt;
&lt;li&gt;어떤 특징이 있을 때, 아 이건 이렇게 풀어야 되는구나!&lt;/li&gt;
&lt;li&gt;ex) 아 n &amp;gt; 1000000이니까 정렬 O(n log n)을 하면 불리하구나. O(n)만 활용해서 풀자.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리하면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기초적인 프로그래밍 지식을 공부하고 이론적인 측면을 살려서 문제를 많이 풀어보면, 어떤 문제가 어떻게 풀릴지 감이 올 것이다.&lt;/p&gt;</description>
      <category>코딩테스트</category>
      <author>jaegomhoji</author>
      <guid isPermaLink="true">https://dsjgm921.tistory.com/223</guid>
      <comments>https://dsjgm921.tistory.com/223#entry223comment</comments>
      <pubDate>Sun, 2 Jun 2024 22:41:51 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 - LV 0 기록용 페이지</title>
      <link>https://dsjgm921.tistory.com/222</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;LV0은 퇴근하고 하루 20문제 이상 풀기.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2024-06-03 기록&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;코딩테스트 입문 캘린더.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;1027&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oGzgt/btsHLQhKaX5/87Dp0maM6hNCZWPhrrnlL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oGzgt/btsHLQhKaX5/87Dp0maM6hNCZWPhrrnlL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oGzgt/btsHLQhKaX5/87Dp0maM6hNCZWPhrrnlL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoGzgt%2FbtsHLQhKaX5%2F87Dp0maM6hNCZWPhrrnlL1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;764&quot; height=&quot;1027&quot; data-filename=&quot;코딩테스트 입문 캘린더.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;1027&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2024-06-02 기록&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;코딩테스트 입문 캘린더_240602.png&quot; data-origin-width=&quot;956&quot; data-origin-height=&quot;1281&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqZMTw/btsHMvb1mKy/b5zOpvXxldeJvQB9GBM7i0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqZMTw/btsHMvb1mKy/b5zOpvXxldeJvQB9GBM7i0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqZMTw/btsHMvb1mKy/b5zOpvXxldeJvQB9GBM7i0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqZMTw%2FbtsHMvb1mKy%2Fb5zOpvXxldeJvQB9GBM7i0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;745&quot; height=&quot;998&quot; data-filename=&quot;코딩테스트 입문 캘린더_240602.png&quot; data-origin-width=&quot;956&quot; data-origin-height=&quot;1281&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>코딩테스트/프로그래머스 LV.0</category>
      <author>jaegomhoji</author>
      <guid isPermaLink="true">https://dsjgm921.tistory.com/222</guid>
      <comments>https://dsjgm921.tistory.com/222#entry222comment</comments>
      <pubDate>Sun, 2 Jun 2024 22:34:38 +0900</pubDate>
    </item>
    <item>
      <title>ESP32cam 스트리밍 문제 해결</title>
      <link>https://dsjgm921.tistory.com/221</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;ESP32cam 기본 코드 예제로 연결하면, 굉장히 스트리밍이 느리다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://randomnerdtutorials.com/esp32-cam-ov2640-camera-settings/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://randomnerdtutorials.com/esp32-cam-ov2640-camera-settings/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686618907837&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Change ESP32-CAM OV2640 Camera Settings: Brightness, Resolution, Quality, Contrast, and More | Random Nerd Tutorials&quot; data-og-description=&quot;This guide shows how to change the ESP32-CAM OV2640 camera settings such as contrast, brightness, resolution, quality, saturation and more using Arduino IDE.&quot; data-og-host=&quot;randomnerdtutorials.com&quot; data-og-source-url=&quot;https://randomnerdtutorials.com/esp32-cam-ov2640-camera-settings/&quot; data-og-url=&quot;https://randomnerdtutorials.com/esp32-cam-ov2640-camera-settings/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cWtVVJ/hySYDJ4vX5/9RHQRqZ0tjJ4WHWoE1fS21/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/bsZalL/hySYCj526x/wKM80I9tPt2qvJsxyyxrh0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/bEBMHx/hySYG7TfvD/xGqpEk27t8yPXnRku52QD1/img.jpg?width=828&amp;amp;height=621&amp;amp;face=0_0_828_621&quot;&gt;&lt;a href=&quot;https://randomnerdtutorials.com/esp32-cam-ov2640-camera-settings/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://randomnerdtutorials.com/esp32-cam-ov2640-camera-settings/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cWtVVJ/hySYDJ4vX5/9RHQRqZ0tjJ4WHWoE1fS21/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/bsZalL/hySYCj526x/wKM80I9tPt2qvJsxyyxrh0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/bEBMHx/hySYG7TfvD/xGqpEk27t8yPXnRku52QD1/img.jpg?width=828&amp;amp;height=621&amp;amp;face=0_0_828_621');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Change ESP32-CAM OV2640 Camera Settings: Brightness, Resolution, Quality, Contrast, and More | Random Nerd Tutorials&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;This guide shows how to change the ESP32-CAM OV2640 camera settings such as contrast, brightness, resolution, quality, saturation and more using Arduino IDE.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;randomnerdtutorials.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카메라 설정을(화질 등) 바꿔봐도 똑같은 문제가 지속됨.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직 ESP32-cam에 대해서 자료가 많지 않지만, 스트리밍 안된다, 느리다 검색하면 git issue가 상단에 노출된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/espressif/arduino-esp32/issues/4655&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/espressif/arduino-esp32/issues/4655&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686619032357&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;Extremely poor performance on ESP32-CAM board &amp;middot; Issue #4655 &amp;middot; espressif/arduino-esp32&quot; data-og-description=&quot;Hardware: Board: ESP32-CAM (Generic, using ESP32-S module) Core Installation version: 1.0.4 IDE name: Arduino IDE Flash Frequency: Default PSRAM enabled: Unsure (most likely yes, IPS6404LSO) Upload...&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/espressif/arduino-esp32/issues/4655&quot; data-og-url=&quot;https://github.com/espressif/arduino-esp32/issues/4655&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bwHTFR/hySYAs2Yg0/C4ugLRNtnsUrJrF2Rt5QDk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/espressif/arduino-esp32/issues/4655&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/espressif/arduino-esp32/issues/4655&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bwHTFR/hySYAs2Yg0/C4ugLRNtnsUrJrF2Rt5QDk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Extremely poor performance on ESP32-CAM board &amp;middot; Issue #4655 &amp;middot; espressif/arduino-esp32&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Hardware: Board: ESP32-CAM (Generic, using ESP32-S module) Core Installation version: 1.0.4 IDE name: Arduino IDE Flash Frequency: Default PSRAM enabled: Unsure (most likely yes, IPS6404LSO) Upload...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;많은 문제들이 있었지만, 이 이슈를 등록한 사람도 나와 같은 문제를 겪었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 어떤 셋팅에서도 성능이 안나옴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 블랙 스크린&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 프레임 드랍&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 딜레이&amp;nbsp; 등등...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ESP-32cam 모델에 따라 다르겠지만, 안테나 문제라는 사람도 있고, 데이터 전송 방식의 문제라는 사람도 있었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본인이 가지고 있는 모델은 안테나가 없는 모듈(위 이미지)이라서 일단 제외했다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;266&quot; data-origin-height=&quot;190&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/daLOxJ/btsjD9LYG99/zxo4kWo9n2wMykkeKiJeRk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/daLOxJ/btsjD9LYG99/zxo4kWo9n2wMykkeKiJeRk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/daLOxJ/btsjD9LYG99/zxo4kWo9n2wMykkeKiJeRk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdaLOxJ%2FbtsjD9LYG99%2Fzxo4kWo9n2wMykkeKiJeRk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;266&quot; height=&quot;190&quot; data-origin-width=&quot;266&quot; data-origin-height=&quot;190&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;225&quot; data-origin-height=&quot;225&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjPWLV/btsjImDbN79/rLXch6KznO5nWU9MfwTEj1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjPWLV/btsjImDbN79/rLXch6KznO5nWU9MfwTEj1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjPWLV/btsjImDbN79/rLXch6KznO5nWU9MfwTEj1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjPWLV%2FbtsjImDbN79%2FrLXch6KznO5nWU9MfwTEj1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;225&quot; height=&quot;225&quot; data-origin-width=&quot;225&quot; data-origin-height=&quot;225&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아까 이슈를 확인하다보면, 고맙게도 누군가 만들어 놓은 코드가 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/arkhipenko/esp32-cam-mjpeg&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/arkhipenko/esp32-cam-mjpeg&lt;/a&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-inline-card=&quot;true&quot; data-card-url=&quot;https://github.com/techiesms/esp32-cam-mjpeg&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span data-testid=&quot;hover-card-trigger-wrapper&quot;&gt;&lt;span data-testid=&quot;inline-card-icon-and-title&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #172b4d;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;해당 코드를 사용한다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #172b4d;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;아두이노 IDE로 불러온 후,&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #172b4d;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;1) home_wifi_multi.h &amp;lt;- 헤더파일 하나 생성해주고&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터미널&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;touch home_wifi_multi.h&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo chmod -R 777 filename&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo nano filename&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #172b4d;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;파일내용 &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #172b4d;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;#ifndef&amp;nbsp;SSID1&lt;br /&gt;#define SSID1 &quot;your wifi name&quot;&lt;br /&gt;#endif&amp;nbsp;&lt;br /&gt;&lt;br /&gt;#ifndef&amp;nbsp;PWD1&lt;br /&gt;#define PWD1 &quot;your wifi password&quot;&lt;br /&gt;#endif&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;2) esp32_camera_mjpeg.ino &amp;lt;- 파일 수정해준다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #172b4d;&quot;&gt;&lt;span style=&quot;color: #172b4d;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; &amp;nbsp; 2-1) 카메라 모델 변경 ( 본인 모델에 맞게 )&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1f272a; color: #dae3e3;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color: #dae3e3;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #f39c12;&quot;&gt;CAMERA_MODEL_AI_THINKER&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; &amp;nbsp;2-2) 셋업 설정에서 xclk_feq_hz 20,000,000 -&amp;gt; 8mhz로 변경&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1f272a; color: #dae3e3;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #f39c12;&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;color: #dae3e3;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #f39c12;&quot;&gt;pin_reset&lt;/span&gt;&lt;span style=&quot;color: #dae3e3;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;= RESET_GPIO_NUM;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f39c12;&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;color: #dae3e3;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #f39c12;&quot;&gt;xclk_freq_hz&lt;/span&gt;&lt;span style=&quot;color: #dae3e3;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;=&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #7fcbcd;&quot;&gt;8000000&lt;/span&gt;&lt;span style=&quot;color: #dae3e3;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f39c12;&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;color: #dae3e3;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #f39c12;&quot;&gt;pixel_format&lt;/span&gt;&lt;span style=&quot;color: #dae3e3;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;= PIXFORMAT_JPEG;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3)&amp;nbsp; 만약 아두이노에서 컴파일이 안되면, 파일을 못읽어서 그럴 확률이 높으니,&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;밖의 파일들을 모두 안쪽에 넣어줌.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그럼 아래 파일들이 모두 같은 level에 있음&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-src(폴더)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-.h(파일들)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-.ino(파일들)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4) 이후 개선 확인&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;kakaotv&quot; data-video-url=&quot;https://tv.kakao.com/v/438764928&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/dxwiuh/hySYDDkvzx/vqT4PeqonDeDugKGbfpkg1/img.jpg?width=654&amp;amp;height=504&amp;amp;face=0_0_654_504,https://scrap.kakaocdn.net/dn/9Sg9H/hySYJDxlEJ/9VHkXFAQ48tx6x5MPyn4w1/img.jpg?width=654&amp;amp;height=504&amp;amp;face=0_0_654_504&quot; data-video-width=&quot;654&quot; data-video-height=&quot;504&quot; data-video-origin-width=&quot;654&quot; data-video-origin-height=&quot;504&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;'jaegom's study room'에서 업로드한 동영상&quot; data-video-play-service=&quot;daum_tistory&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://play-tv.kakao.com/embed/player/cliplink/438764928?service=daum_tistory&quot; width=&quot;654&quot; height=&quot;504&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;해결 전&amp;nbsp;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;kakaotv&quot; data-video-url=&quot;https://tv.kakao.com/v/438764948&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/kZCGg/hySYBFuZEy/fcHIc8KLueV2vu3N1HSs9k/img.jpg?width=654&amp;amp;height=504&amp;amp;face=0_0_654_504,https://scrap.kakaocdn.net/dn/dNpRRD/hySYJDxnS7/f3bYxNelCN7iiaAycNxad1/img.jpg?width=654&amp;amp;height=504&amp;amp;face=0_0_654_504&quot; data-video-width=&quot;654&quot; data-video-height=&quot;504&quot; data-video-origin-width=&quot;654&quot; data-video-origin-height=&quot;504&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;'jaegom's study room'에서 업로드한 동영상&quot; data-video-play-service=&quot;daum_tistory&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://play-tv.kakao.com/embed/player/cliplink/438764948?service=daum_tistory&quot; width=&quot;654&quot; height=&quot;504&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;해결 이후&amp;nbsp;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;span style=&quot;color: #172b4d;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;이제는 더이상 답답하지 않다. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개인 프로젝트 and 논문/딥러닝 자율주행 장난감 만들기</category>
      <category>esp32</category>
      <category>ESP32-CAM</category>
      <category>streaming</category>
      <author>jaegomhoji</author>
      <guid isPermaLink="true">https://dsjgm921.tistory.com/221</guid>
      <comments>https://dsjgm921.tistory.com/221#entry221comment</comments>
      <pubDate>Tue, 13 Jun 2023 10:29:42 +0900</pubDate>
    </item>
    <item>
      <title>PCA on RGB channel for data augmentation</title>
      <link>https://dsjgm921.tistory.com/220</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #5c5c5c; text-align: start;&quot;&gt;저번에 SSD 논문 스터디 중에 데이터 증강 방법에 대해서 찾다가,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #5c5c5c; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #5c5c5c; text-align: start;&quot;&gt;&lt;a href=&quot;https://dsjgm921.tistory.com/219&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://dsjgm921.tistory.com/219&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686121408945&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;SSD : Single Shot MultiBox Detector&quot; data-og-description=&quot;세그멘테이션 업무를 하고 있는 와중에 SSD + regnetx + fpn 방식으로 구성한 네트워크가 있는데 잘 모른다... SSD 스터디가 필요함. 기존 스터디한 네트워크는 FPN, U-Net, Deeplabv3~3+, R-CNN, Fast R-CNN, Faster R&quot; data-og-host=&quot;dsjgm921.tistory.com&quot; data-og-source-url=&quot;https://dsjgm921.tistory.com/219&quot; data-og-url=&quot;https://dsjgm921.tistory.com/219&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/jceBf/hySTRQhPgA/0AZ3u7rEpsaWNdmSzvsLQ1/img.png?width=663&amp;amp;height=147&amp;amp;face=0_0_663_147,https://scrap.kakaocdn.net/dn/bj4Zz1/hySVKorCVp/YnXzYz95YwPZ27ecK5ilzk/img.png?width=663&amp;amp;height=147&amp;amp;face=0_0_663_147,https://scrap.kakaocdn.net/dn/lzSp9/hySTTAyrdF/PKxpkKkQchu5Q6q5Zi38mK/img.png?width=1176&amp;amp;height=605&amp;amp;face=0_0_1176_605&quot;&gt;&lt;a href=&quot;https://dsjgm921.tistory.com/219&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dsjgm921.tistory.com/219&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/jceBf/hySTRQhPgA/0AZ3u7rEpsaWNdmSzvsLQ1/img.png?width=663&amp;amp;height=147&amp;amp;face=0_0_663_147,https://scrap.kakaocdn.net/dn/bj4Zz1/hySVKorCVp/YnXzYz95YwPZ27ecK5ilzk/img.png?width=663&amp;amp;height=147&amp;amp;face=0_0_663_147,https://scrap.kakaocdn.net/dn/lzSp9/hySTTAyrdF/PKxpkKkQchu5Q6q5Zi38mK/img.png?width=1176&amp;amp;height=605&amp;amp;face=0_0_1176_605');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;SSD : Single Shot MultiBox Detector&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;세그멘테이션 업무를 하고 있는 와중에 SSD + regnetx + fpn 방식으로 구성한 네트워크가 있는데 잘 모른다... SSD 스터디가 필요함. 기존 스터디한 네트워크는 FPN, U-Net, Deeplabv3~3+, R-CNN, Fast R-CNN, Faster R&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dsjgm921.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #5c5c5c; text-align: start;&quot;&gt;ImageNet Classification with Deep Convolutional Neural Networks, A,Krizhevsky., G,E.Hinton. et al.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #5c5c5c;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;논문에서 PCA를 사용해서 이미지에 주성분 값을 더해주는 방식으로 top-1 error를 1% 개선하였다는 대목이 있었다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #5c5c5c;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;대충 이런 내용이다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;```&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;따라서 각 RGB 이미지 Ixy의 (RGB) 픽셀에 다음 수량을 추가합니다:&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Ixy = [IRxy, IGxy, IBxy]&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;[p1, p2, p3][&amp;alpha;1&amp;lambda;1, &amp;alpha;2&amp;lambda;2, &amp;alpha;3&amp;lambda;3]T --&amp;gt; 1*3 3*1(1*3의 T) -&amp;gt; 1*1 값이 IRxy ~ IBxy에 더해진다는 것?&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여기서 pi와 &amp;lambda;i는 각각 RGB 픽셀 값의 3 &amp;times; 3 공분산 행렬의 ith 고유벡터와 고유값이고, &amp;alpha;i는 이전에 언급한 랜덤 변수입니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 고유벡터만 PCA 결과이고, 가중치 &amp;alpha;는 1,2,3 모두 거의 조금차이나게 곱해줘서 적용한다는 뜻.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;각 &amp;alpha;i는 한 번만 그립니다. 특정 훈련 이미지의 모든 픽셀에 대해 그리고 해당 이미지가 다시 훈련에 사용될 때까지 동일한 값이 유지됩니다.-&amp;gt; 한번 뽑아서 훈련하고 redrawn된다는데, 위의 intensity alter한 기준으로 이미지를 다시 그리고, 그 이미지가 다시 활용될 경우 바뀐 이미지를 기준으로 PCA를 수행한다는 뜻인가? --&amp;gt; 테스트 해볼 것.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;자연 이미지의 중요한 특성인 물체의 식별이 조명의 강도와 색상의 변화에 불변함을 근사적으로 잡아내는 방식.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;```&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #5c5c5c;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;간단한 코드로 구현이 가능할 것 같아서 구현해본다. todaydatascience 등 레퍼런스들은 검색해보면 쉽게 나온다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #15173c; color: #f8f8f2;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #bd84dd;&quot;&gt;### &lt;/span&gt;&lt;span style=&quot;color: #86dbfd;&quot;&gt;Process&lt;/span&gt;&lt;span style=&quot;color: #bd84dd;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;&amp;lt; IDEA : 자연 이미지의 중요한 특성인 물체의 식별이 조명의 강도와 색상의 변화에 불변함을 근사적으로 잡아내는 방식. &amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;1.&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; import image &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;2.&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; PCA respectively on RGB channel -&amp;gt; &lt;span style=&quot;background-color: #15173c; color: #f8f8f2; text-align: start;&quot;&gt;checkout variances, choose n_Component&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;3.&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; get matrix &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;4.&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; get alpha value from random Gaussian distribution &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;5.&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; add PCA components to original image&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #15173c; color: #f8f8f2;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #6272a4;&quot;&gt;# import modules &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #58b7ff;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; cv2 &lt;/span&gt;&lt;span style=&quot;color: #58b7ff;&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; cv &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #58b7ff;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; glob &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #58b7ff;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; tqdm &lt;/span&gt;&lt;span style=&quot;color: #58b7ff;&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; tqdm &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #58b7ff;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; os &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #58b7ff;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; numpy &lt;/span&gt;&lt;span style=&quot;color: #58b7ff;&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; np &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #58b7ff;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; pandas &lt;/span&gt;&lt;span style=&quot;color: #58b7ff;&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; pd&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #58b7ff;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; matplotlib.pyplot &lt;/span&gt;&lt;span style=&quot;color: #58b7ff;&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; plt&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #58b7ff;&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; sklearn.decomposition &lt;/span&gt;&lt;span style=&quot;color: #58b7ff;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #bd84dd;&quot;&gt;PCA&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>BF 2024/컴퓨터 비전 관련</category>
      <author>jaegomhoji</author>
      <guid isPermaLink="true">https://dsjgm921.tistory.com/220</guid>
      <comments>https://dsjgm921.tistory.com/220#entry220comment</comments>
      <pubDate>Wed, 7 Jun 2023 14:51:21 +0900</pubDate>
    </item>
    <item>
      <title>SSD : Single Shot MultiBox Detector</title>
      <link>https://dsjgm921.tistory.com/219</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;세그멘테이션 업무를 하고 있는 와중에 SSD + regnetx + fpn 방식으로 구성한 네트워크가 있는데 잘 모른다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSD 스터디가 필요함.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 스터디한 네트워크는 FPN, U-Net, Deeplabv3~3+, R-CNN, Fast R-CNN, Faster R-CNN, Mask R-CNN 으로, 이놈들을 기준으로 아만보를 시전할 예정이다ㅜㅜ.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;SSD: Single Shot MultiBox Detector ( 2016 ) - ECCV&lt;/h1&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;&lt;a href=&quot;https://arxiv.org/search/cs?searchtype=author&amp;amp;query=Liu%2C+W&quot;&gt;Wei Liu&lt;/a&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/search/cs?searchtype=author&amp;amp;query=Anguelov%2C+D&quot;&gt;Dragomir Anguelov&lt;/a&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/search/cs?searchtype=author&amp;amp;query=Erhan%2C+D&quot;&gt;Dumitru Erhan&lt;/a&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/search/cs?searchtype=author&amp;amp;query=Szegedy%2C+C&quot;&gt;Christian Szegedy&lt;/a&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/search/cs?searchtype=author&amp;amp;query=Reed%2C+S&quot;&gt;Scott Reed&lt;/a&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/search/cs?searchtype=author&amp;amp;query=Fu%2C+C&quot;&gt;Cheng-Yang Fu&lt;/a&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/search/cs?searchtype=author&amp;amp;query=Berg%2C+A+C&quot;&gt;Alexander C. Berg&lt;/a&gt;
&lt;figure id=&quot;og_1685667740333&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Search | arXiv e-print repository&quot; data-og-description=&quot;Showing 1&amp;ndash;30 of 30 results for author: Berg, A C arXiv:2304.02643 &amp;nbsp;[pdf, other]&amp;nbsp; cs.CV cs.AI cs.LG Segment Anything Authors: Alexander Kirillov, Eric Mintun, Nikhila Ravi, Hanzi Mao, Chloe Rolland, Laura Gustafson, Tete Xiao, Spencer Whitehead, Alexand&quot; data-og-host=&quot;arxiv.org&quot; data-og-source-url=&quot;https://arxiv.org/search/cs?searchtype=author&amp;amp;query=Berg%2C+A+C&quot; data-og-url=&quot;https://arxiv.org/search/cs?query=Berg%2C+A+C&amp;amp;searchtype=author&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://arxiv.org/search/cs?searchtype=author&amp;amp;query=Berg%2C+A+C&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://arxiv.org/search/cs?searchtype=author&amp;amp;query=Berg%2C+A+C&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Search | arXiv e-print repository&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Showing 1&amp;ndash;30 of 30 results for author: Berg, A C arXiv:2304.02643 &amp;nbsp;[pdf, other]&amp;nbsp; cs.CV cs.AI cs.LG Segment Anything Authors: Alexander Kirillov, Eric Mintun, Nikhila Ravi, Hanzi Mao, Chloe Rolland, Laura Gustafson, Tete Xiao, Spencer Whitehead, Alexand&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;arxiv.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;0) Abstract&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;single deep neural network를 사용하여 이미지의 물체를 검출하는 방법을 제시한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; single-stage detector&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt; 참고 &amp;gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ 1(Single)-Stage Detecor와 2-Stage Detector&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;663&quot; data-origin-height=&quot;147&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bflcpJ/btsijM487hf/f1EE2z1IrcOoogiv1hdG8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bflcpJ/btsijM487hf/f1EE2z1IrcOoogiv1hdG8K/img.png&quot; data-alt=&quot;출처 :&amp;amp;amp;nbsp;https://ganghee-lee.tistory.com/34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bflcpJ/btsijM487hf/f1EE2z1IrcOoogiv1hdG8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbflcpJ%2FbtsijM487hf%2Ff1EE2z1IrcOoogiv1hdG8K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;663&quot; height=&quot;147&quot; data-origin-width=&quot;663&quot; data-origin-height=&quot;147&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 :&amp;amp;nbsp;https://ganghee-lee.tistory.com/34&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Region Proposal과 Classification이 동시에 한 네트워크에서 이루어짐.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;664&quot; data-origin-height=&quot;175&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NNrhB/btsijmTsTIy/mVNrYWuSnQ83kPTLyjH3cK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NNrhB/btsijmTsTIy/mVNrYWuSnQ83kPTLyjH3cK/img.png&quot; data-alt=&quot;출처 :&amp;amp;amp;nbsp;https://ganghee-lee.tistory.com/34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NNrhB/btsijmTsTIy/mVNrYWuSnQ83kPTLyjH3cK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNNrhB%2FbtsijmTsTIy%2FmVNrYWuSnQ83kPTLyjH3cK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;664&quot; height=&quot;175&quot; data-origin-width=&quot;664&quot; data-origin-height=&quot;175&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 :&amp;amp;nbsp;https://ganghee-lee.tistory.com/34&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Region Proposal Network가 있고, Classification Network가 있어 서로 다른 네트워크 branch가 다른 일을 담당함.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Bounding box의 출력 공간을 이산화하여(discretize) feature map 위치별로 다양한 종횡비와 크기를 가진 박스들로 분할한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 마치 Faster R-CNN에서 selective search를 대체하여 RPN 사용하였을 때 anchor generator 역할처럼 보임.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예측시에는 네트워크가 각 박스마다 카테고리 별로 점수를 생성하고, 검출 대상의 형태(shape)에 맞게 수정(adjustment)하는 과정이 존재한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가적으로, 네트워크는 다양한 해상도(resolution)을 가진 복수의 feature map에서의 예측 결과를 종합하는데, 이는 다양한 크기의 검출 대상을 검출하기 위함이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; Deeplabv3에서 다양한 크기의 dilated 필터를 사용한 뒤 합치는 ASPP(Astrous Spatial Pyramid Pooling)등에 상응하는 작용으로 보인다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 SSD는 검출 대상에 대한 제안?을 하는 방법들에 비해서 상대적으로 단순한데, 왜냐하면 SSD는 추천 생성 및 후속 픽셀 (subsequent pixel)??&amp;nbsp; 혹은 feature resampling stages를 제거하고 모든 컴퓨팅을 단일 네트워크에서 수행하기 때문이다. 이러한 이유로 SSD가 훈련이 쉽고, detection component가 필요한 시스템에 통합하기에 직관적인 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PASCAL VOC, COCO, ILSVRC 데이터&amp;nbsp; 셋을 통해 검증한 바, SSD는 추가적으로 object proposal step을 하는 방법에 비해 빠르며, 성능도 견주어볼 수 있다. 성능도 300*300 input에서는 74.3% mAP에 59FPS가 나오며, 다른 single-stage method와 비교해서도 더 작은 입력 이미지 크기에서 더 나은 accuracy를 보인다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1) Introduction&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 짱짱인 State-Of-The-Art 녀석들은 ( ~ 2016년 기준 )&amp;nbsp; 다음과 같은 접근 방법의 변형들이다. 바운딩 박스를 예측하고, 각 박스의 픽셀이나 feature를 resample하고, 좋은 분류기를(high-quality classifier) 적용한 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 파이프라인은 전반적으로 디텍션 벤치마크를 씹어먹었고, 현재(2016 당시) PASCAL VOC, COCO, ILSVRC detection에서 모두 최고의 성능을 보여주었던, Faster R-CNN의 Selective Search를 기반으로 한 것이나, Faster R-CNN보다 deeper feature를 사용한 것들이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# 본인은 7FPS 정도인 네트워크면 그래도 사용할 만하다고 생각하지만, 엣지 디바이스에서 real-time-inference 하는데 20~30 FPS는 나오면 좋긴 하다. 논문 저자도 그렇게 생각한 부분인 것 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 이런 짱짱녀석들은 정확성은 높았으나, 임베디드 시스템이나 고성능 하드웨어에도 적용하기에 연산이 너무 과도했고, 실시간 어플리케이션에 적용하기도 너무 느렸다. 심지어 디텍션 속도를 SPF(Second Per Frame)으로 측정하는 경우도 있었다. 가장 빠르고 정확성이 높은 Faster R-CNN은 7FPS정도였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어쨌든 위의 디텍션 파이프라인을 건드려서 더 빠른 detector를 만들기 위한 시도가 많이 이루어졌었지만, 현재로서는 속도를 많이 줄이면 그에 상응하여 detection accuracy가 줄어들었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSD는 pixel resample이나 bounding box hypothese 없이 가장 정확하고 빠른 첫번째 네트워크라고 소개함.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;59 FPS with mAP 74.3% on VOC2007 test, vs. Faster R-CNN 7 FPS with mAP 73.2% or YOLO 45 FPS with mAP 63.4%&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSD가 사용하는 방법은, 사실 저자가 처음 시도한 건 아니라고 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나머지 내용들은 거의 동일한 내용에 대해서 말하고 있으니 생략.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2)&amp;nbsp; The Single Shot Detector&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2장에서 다루고 있는 내용은 다음과 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2-1) SSD framework&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2-2) training methodology&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;2-3) data-specific model details and experimental results&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2-1) SSD Framework&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1176&quot; data-origin-height=&quot;605&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/48rm0/btsiFPlQpnd/xMB0u4mgGEDyvi7AZyw3Wk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/48rm0/btsiFPlQpnd/xMB0u4mgGEDyvi7AZyw3Wk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/48rm0/btsiFPlQpnd/xMB0u4mgGEDyvi7AZyw3Wk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F48rm0%2FbtsiFPlQpnd%2FxMB0u4mgGEDyvi7AZyw3Wk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1176&quot; height=&quot;605&quot; data-origin-width=&quot;1176&quot; data-origin-height=&quot;605&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #292929;&quot; data-selectable-paragraph=&quot;&quot;&gt;300 *300 or (512 * 512 ) 이미지 -&amp;gt; backbone network ( VGG-16 ) -&amp;gt; 38 * 38 * 512로 축소. -&amp;gt; 이후 conv layer 통과하며 feature layer 생성 -&amp;gt; box 생성 및 nms -&amp;gt; 결과&amp;nbsp;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #292929;&quot; data-selectable-paragraph=&quot;&quot;&gt;깊이와 크기가 다른 각각의 conv_layer 마다 feature layer들이 output으로 출력됨.&amp;nbsp;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #292929;&quot; data-selectable-paragraph=&quot;&quot;&gt;본문의 &quot;yielding (c + 4)kmn outputs for a m &amp;times; n feature map&quot; 의 내용은 다음과 같다.&amp;nbsp;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #292929;&quot; data-selectable-paragraph=&quot;&quot;&gt;k (클래스 개수) * mn (feature map 크기 = 픽셀 개수) * ( c + 4 )&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #292929;&quot; data-selectable-paragraph=&quot;&quot;&gt;c = confidence score, 4 = box offsets ( 좌표 )&amp;nbsp;&lt;/li&gt;
&lt;li id=&quot;91ff&quot; style=&quot;list-style-type: disc; color: #292929;&quot; data-selectable-paragraph=&quot;&quot;&gt;Conv4_3은 ( 38 * 38 ) * 512 의 output이며 3*3 conv를 통과함. -&amp;gt; output은 ( 38 * 38 )&amp;nbsp; * 4 * ( c + 4 ) 가 출력됨. c는 배경 클래스로, 다른 클래스 개수 + 1. 예시에서 클래스가 1개, 단일 클래스이면 c = 2. 박스 개수는 38 * 38 * 4 = 5776&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #292929;&quot; data-selectable-paragraph=&quot;&quot;&gt;만약 클래스가 1 개, c =2 라고 하면..&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #292929;&quot; data-selectable-paragraph=&quot;&quot;&gt;Conv7 역시 마찬가지로 ( 19 * 19 ) * 1024 -&amp;gt; (19 * 19) * -&amp;gt; 19*19*6개의 박스 생성. output은 19*19*6*(c+4)&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li id=&quot;ec3b&quot; style=&quot;list-style-type: disc; color: #292929;&quot; data-selectable-paragraph=&quot;&quot;&gt;Conv8_2: 10&amp;times;10&amp;times;6 = 600 &lt;span style=&quot;background-color: #ffffff; color: #292929; text-align: left;&quot;&gt;박스 개수&lt;/span&gt; (6 boxes for each location) &lt;span style=&quot;background-color: #ffffff; color: #292929; text-align: left;&quot;&gt;-&amp;gt; output 개수=&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #292929; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;10&amp;times;10&amp;times;6&lt;span style=&quot;background-color: #ffffff; color: #292929; text-align: left;&quot;&gt;&amp;times;6(6=c + box 좌표 x,y,b,h)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;460e&quot; style=&quot;list-style-type: disc; color: #292929;&quot; data-selectable-paragraph=&quot;&quot;&gt;Conv9_2: 5&amp;times;5&amp;times;6 = 150 &lt;span style=&quot;background-color: #ffffff; color: #292929; text-align: left;&quot;&gt;박스 개수&lt;/span&gt; (6 boxes for each location) &lt;span style=&quot;background-color: #ffffff; color: #292929; text-align: left;&quot;&gt;-&amp;gt; output 개수=&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #292929; text-align: left;&quot;&gt;&lt;span&gt; 5&lt;/span&gt;&amp;times;5&amp;times;6&lt;span style=&quot;background-color: #ffffff; color: #292929; text-align: left;&quot;&gt;&amp;times;6(6=c + box 좌표 x,y,b,h)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;4d9b&quot; style=&quot;list-style-type: disc; color: #292929;&quot; data-selectable-paragraph=&quot;&quot;&gt;Conv10_2: 3&amp;times;3&amp;times;4 = 36 &lt;span style=&quot;background-color: #ffffff; color: #292929; text-align: left;&quot;&gt;박스 개수&lt;/span&gt; (4 boxes for each location) &lt;span style=&quot;background-color: #ffffff; color: #292929; text-align: left;&quot;&gt;-&amp;gt; output 개수=&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #292929; text-align: left;&quot;&gt;&lt;span&gt; 3&lt;/span&gt;&amp;times;3&amp;times;4&lt;span style=&quot;background-color: #ffffff; color: #292929; text-align: left;&quot;&gt;&amp;times;6(6=c + box 좌표 x,y,b,h)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;053c&quot; style=&quot;list-style-type: disc; color: #292929;&quot; data-selectable-paragraph=&quot;&quot;&gt;Conv11_2: 1&amp;times;1&amp;times;4 = 4 박스 개수 (4 boxes for each location) &lt;span style=&quot;background-color: #ffffff; color: #292929; text-align: left;&quot;&gt;-&amp;gt; output 개수=&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #292929; text-align: left;&quot;&gt;&lt;span&gt; 1&lt;/span&gt;&amp;times;1&amp;times;4&lt;span style=&quot;background-color: #ffffff; color: #292929; text-align: left;&quot;&gt;&amp;times;6(6=c + box 좌표 x,y,b,h)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #292929;&quot; data-selectable-paragraph=&quot;&quot;&gt;Total 박스 개수 = ({38*38*4}+{19*19*6} + {10*10*6} + {5*5*6} + {3*3*4} + {1*1*4})&amp;nbsp; = 8732&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #292929;&quot; data-selectable-paragraph=&quot;&quot;&gt;Total output 노드 개수 = 8732 * ( 2(클래스+1) + 4(박스 offset) )&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2-2) Training methodology&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;* Choosing scales and aspect ratios for default boxes&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Choosing scales :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네트워크 안에서 다른 크기의 feature map들의 receptive field size는 서로 다르다. SSD에서는 박스의 수용장 크기에 맞도록 반응할 필요 없이, feature map의 개수에 따라서 박스의 scale이 반응하도록 디자인하였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1431&quot; data-origin-height=&quot;124&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WzqbS/btsismq4LMk/ZZxoZ2ltKuFuoc1SNBEflk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WzqbS/btsismq4LMk/ZZxoZ2ltKuFuoc1SNBEflk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WzqbS/btsismq4LMk/ZZxoZ2ltKuFuoc1SNBEflk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWzqbS%2Fbtsismq4LMk%2FZZxoZ2ltKuFuoc1SNBEflk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1431&quot; height=&quot;124&quot; data-origin-width=&quot;1431&quot; data-origin-height=&quot;124&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수식을 보면, m개의 feature map이 있을때, k번째 feature map의 스케일 Sk는 서로 등간이다. 우선 최대 스케일 Smax - 최소 스케일 Smin 값이 전체 feature map 개수 -1로 나뉘고(Smin + ~ 이기 때문에 해당 값을 제외 ), 이후 그 값이 몇 번째이냐에 따라서 k가 곱해지기 때문이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 m =6. m=7 일때 각각 S1~6, S1~7은 다음과 같이 등간이다. 원문에서는 이를 all layers in between are regularly spaced 라고 표현하고 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;S1~7 = [0.2, 0.316, 0.432, 0.548, 0.664, 0.78, 0.9]&amp;nbsp; m=7, len=7&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;S1 ~6= [0.2, 0.34, 0.48, 0.62, 0.76, 0.9] m=6, len=6&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Choosing aspect ratios :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ar(aspect ratio) = [ 1, 2, 3, 1/2,1/3 ]&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;K = [1 ~ m ]&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각의 default box의 너비와 높이는 다음과 같다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;841&quot; data-origin-height=&quot;48&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b50o7B/btsir1OCygP/JRqTEkOnk1eVhsJR19TI0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b50o7B/btsir1OCygP/JRqTEkOnk1eVhsJR19TI0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b50o7B/btsir1OCygP/JRqTEkOnk1eVhsJR19TI0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb50o7B%2Fbtsir1OCygP%2FJRqTEkOnk1eVhsJR19TI0K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;718&quot; height=&quot;41&quot; data-origin-width=&quot;841&quot; data-origin-height=&quot;48&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;default box는 feature map location마다 ar의 수 만큼 생성되며, 총 m * ( ar + 1 ) 개 생성된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+ 1개 더 생성되는 이유는, aspect ratio ar = 1일때 ,&amp;nbsp; ( ar =1 , Sk = S'k )인 박스를 추가로 생성한다.&amp;nbsp; S'k는 현재 스케일과 다음 스케일의 값을 곱한 후 제곱근을 취한 값이다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;261&quot; data-origin-height=&quot;50&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhbG7u/btsisRYG9Ul/TM39cKtbtr0vqdmXjGcxw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhbG7u/btsisRYG9Ul/TM39cKtbtr0vqdmXjGcxw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhbG7u/btsisRYG9Ul/TM39cKtbtr0vqdmXjGcxw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhbG7u%2FbtsisRYG9Ul%2FTM39cKtbtr0vqdmXjGcxw1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;204&quot; height=&quot;39&quot; data-origin-width=&quot;261&quot; data-origin-height=&quot;50&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) m=5, feature location의 scale(k)= 3 이고, aspect ratio가 1일 때 추가로 생성되는 default box의 scale 값은 다음과 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;S'3 = sqrt(S3 * S4) -&amp;gt; sqrt( 0.55 + 0.725 ) = &lt;span style=&quot;background-color: #303134; color: #e8eaed; text-align: start;&quot;&gt;1.129&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;S3 = 0.2 + ( 0.7 /&amp;nbsp; {5-1} ) * (3-1) = 0.2 + (0.175)*2 = 0.55&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;S4 = 0.2 + ( 0.7 /&amp;nbsp; {5-1} ) * (4-1) = 0.2 + (0.175)*3 = 0.725&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마찬가지로 전체적으로 생성되는 default box는 ( 너비와 높이가 다름 ) 다음과 같다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.2857%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 8.12291%;&quot;&gt;ar = 1&lt;/td&gt;
&lt;td style=&quot;width: 13.3056%;&quot;&gt;ar = 1 ( S'k )&lt;/td&gt;
&lt;td style=&quot;width: 7.14285%;&quot;&gt;ar = 2&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%;&quot;&gt;ar = 3&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%;&quot;&gt;ar = 4&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%;&quot;&gt;ar = 5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.2857%;&quot;&gt;m = k = 1&lt;/td&gt;
&lt;td style=&quot;width: 8.12291%;&quot;&gt;S1&lt;/td&gt;
&lt;td style=&quot;width: 13.3056%;&quot;&gt;Sk &amp;lt;- S1S2&lt;/td&gt;
&lt;td style=&quot;width: 7.14285%;&quot;&gt;S1&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%;&quot;&gt;S1&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%;&quot;&gt;..&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.2857%;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;m =&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;k = 2&lt;/td&gt;
&lt;td style=&quot;width: 8.12291%;&quot;&gt;S2&lt;/td&gt;
&lt;td style=&quot;width: 13.3056%;&quot;&gt;Sk &amp;lt;- S2S3&lt;/td&gt;
&lt;td style=&quot;width: 7.14285%;&quot;&gt;S2&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%;&quot;&gt;..&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.2857%;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;m =&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;k = 3&lt;/td&gt;
&lt;td style=&quot;width: 8.12291%;&quot;&gt;S3&lt;/td&gt;
&lt;td style=&quot;width: 13.3056%;&quot;&gt;Sk &amp;lt;- S3S4&lt;/td&gt;
&lt;td style=&quot;width: 7.14285%;&quot;&gt;S3&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%;&quot;&gt;..&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.2857%;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;m =&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;k = 4&lt;/td&gt;
&lt;td style=&quot;width: 8.12291%;&quot;&gt;S4&lt;/td&gt;
&lt;td style=&quot;width: 13.3056%;&quot;&gt;Sk &amp;lt;- S4S5&lt;/td&gt;
&lt;td style=&quot;width: 7.14285%;&quot;&gt;S4&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%;&quot;&gt;..&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.2857%;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;m =&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;k = 5&lt;/td&gt;
&lt;td style=&quot;width: 8.12291%;&quot;&gt;S5&lt;/td&gt;
&lt;td style=&quot;width: 13.3056%;&quot;&gt;Sk &amp;lt;- S5S?&lt;/td&gt;
&lt;td style=&quot;width: 7.14285%;&quot;&gt;S5&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;S5&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, ar = 5 개이고, per feature location은 m개 이지만, ar이 1일때 per feature location에서 default box가 한 개씩 더 생성되니, 총 (ar +1) *m 개 = 즉 6개의 default box가 생성되는 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약, ar 을 다양하게 구성하지 않고 [ 1, 2, 1/2, 1/3 ] 4개로 구성하였을 때는 5개(4+S'k1)의 default box가 각각의 feature location에서 생성될 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;* Select box location&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;default box들은 scale과 aspect ratio에 따라 생성되며, 한 스케일에서는 aspect ratio + Sk'R까지 6개의 default box들이 생성되는데, 그 박스의 중심 위치는 다음과 같이 생성된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;( box width와 height 역시 scale 값이니, 크기 값이 1이 되지 않는다고 혼동하지 말자 )&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1304&quot; data-origin-height=&quot;106&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qXR8j/btsitHccQEq/C6SMpP6TAjZnoFWZ5Qg3vk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qXR8j/btsitHccQEq/C6SMpP6TAjZnoFWZ5Qg3vk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qXR8j/btsitHccQEq/C6SMpP6TAjZnoFWZ5Qg3vk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqXR8j%2FbtsitHccQEq%2FC6SMpP6TAjZnoFWZ5Qg3vk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1304&quot; height=&quot;106&quot; data-origin-width=&quot;1304&quot; data-origin-height=&quot;106&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;|fk|는 k번째 feature map의 크기이다. 그리고 i와 j는 feature map 크기에 따라서 달라지는 인덱스의 값이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, |fk|가 8*8 사이즈의 feature map이면, i와 j의 인덱스는 다음과 같으며, location 역시 64곳 생성된다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.3837%;&quot;&gt;i , j&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 12.6163%;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 6.25%;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 6.25%;&quot;&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.3837%;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 12.6163%;&quot;&gt;0,0&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;0,1&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;0,2&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;0,3&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;0,4&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;0,5&lt;/td&gt;
&lt;td style=&quot;width: 6.25%;&quot;&gt;0,6&lt;/td&gt;
&lt;td style=&quot;width: 6.25%;&quot;&gt;0,7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.3837%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 12.6163%;&quot;&gt;1,0&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 6.25%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 6.25%;&quot;&gt;..&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.3837%;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 12.6163%;&quot;&gt;2,0&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;2,3&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 6.25%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 6.25%;&quot;&gt;..&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.3837%;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 12.6163%;&quot;&gt;3,0&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 6.25%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 6.25%;&quot;&gt;..&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.3837%;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 12.6163%;&quot;&gt;4,0&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 6.25%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 6.25%;&quot;&gt;..&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.3837%;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 12.6163%;&quot;&gt;5,0&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 6.25%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 6.25%;&quot;&gt;..&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.3837%;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 12.6163%;&quot;&gt;6,0&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;6,4&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 6.25%;&quot;&gt;..&lt;/td&gt;
&lt;td style=&quot;width: 6.25%;&quot;&gt;7,6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.3837%;&quot;&gt;7&lt;/td&gt;
&lt;td style=&quot;width: 12.6163%;&quot;&gt;7,0&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;7,1&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;7,2&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;7,3&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;7,4&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;&quot;&gt;7,5&lt;/td&gt;
&lt;td style=&quot;width: 6.25%;&quot;&gt;6,7&lt;/td&gt;
&lt;td style=&quot;width: 6.25%;&quot;&gt;7,7&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;64곳의 location 중 i =2, j = 3 일때 생성되는 박스의 중심은 다음과 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Bc = { (2+0.5)/8 , (3+0.5)/8 } , Bc = { 0.3125, 0.425 }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Bc = { (7+0.5)/8 , (6+0.5)/8 } , Bc = { 0.9375, 0.8125 }&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;--&amp;gt; 이 부분은 왜 위와 같은 수치가 나오는 것인지 잘 이해가 되지 않는다... ㅜㅜ&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;code implementation을 보면 ( box center에 대한 코드가 아래 부분밖에 없음 ) 다음과 같다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;최종 feature map 의 box가 원본 대비 얼마나 줄어들었는지 판단하고,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;박스가 있을 수 있는 input image의 위치를 그리드화 한 뒤,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;해당 영역에 대해서 모든 중심위치를 만드는 것.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이후 box 크기만큼 더하고 빼줘서 [x,y,w,h] 방식으로 결과가 출력된 뒤 NMS를 실행한다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;정확히 SSD 논문의 모든 메소드가 구현된 것은 아닌 것 같은데, 이 부분을 제대로 이해하기 위해서는 구현 코드를 더 찾아봐야 한다.&amp;nbsp;이 파트를 다루는 자료들이 많이 없다...&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;우선, 이미지 너비와 높이 / feature map의 너비와 높이 -&amp;gt; 확장 비율을 계산하고&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;ex) 300 / 8&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;step_x = &lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #e9950c; text-align: left;&quot;&gt;float&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;(img_width) / &lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #e9950c; text-align: left;&quot;&gt;float&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;(layer_width) &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;step_y = &lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #e9950c; text-align: left;&quot;&gt;float&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;(img_height) / &lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #e9950c; text-align: left;&quot;&gt;float&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;(layer_height)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;0.5 * step_x 부터 img_width - (0.5*step_x)까지의 값 까지 layer_width만큼의 구간으로 나누어서 간격별로 중심의 위치를 생성 &lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;ex) 0.5*27 ~ 300- 0.5*27, 8&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;--&amp;gt; 13.5 ~ 286.5&amp;nbsp; , 8씩 &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;--&amp;gt; [13.5 , 21.5 , 29.5, ......270.5, 278.5, 286.5 ]&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;linx = np.linspace(&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #df3079; text-align: left;&quot;&gt;0.5&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt; * step_x, img_width - &lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #df3079; text-align: left;&quot;&gt;0.5&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt; * step_x, layer_width) &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;liny = np.linspace(&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #df3079; text-align: left;&quot;&gt;0.5&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt; * step_y, img_height - &lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #df3079; text-align: left;&quot;&gt;0.5&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt; * step_y, layer_height)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;생성한 모든 중심 위치를 그리드로 표현하는 배열 생성&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;centers_x, centers_y = np.meshgrid(linx, liny)&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;centers_x = centers_x.reshape(-&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #df3079; text-align: left;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #df3079; text-align: left;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;) &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;centers_y = centers_y.reshape(-&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #df3079; text-align: left;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #df3079; text-align: left;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;) &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;prior_boxes = np.concatenate((centers_x, centers_y), axis=&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #df3079; text-align: left;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;prior_boxes를 각 차원별로 1번, 2*num_priors만큼 복제.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;num_priors는 aspect ratio의 개수 ( 배열의 길이 )&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;ex) if prior_boxes = [a, b]:&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;then np.tile(prior_boxes, (1,2*num_priors=1)) 이면&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result = [ [ a, b ]&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [ a, b ] ]&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;prior_boxes = np.tile(prior_boxes, (&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #df3079; text-align: left;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #df3079; text-align: left;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt; * num_priors))&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;* hard negative mining ( 본문 직역 아님 )&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다양한 스케일과 aspect ratio를 가진 box들을 다양한 location에서 생성해냈다. 이러한 예측들을 통해 다양한 input object의 size와 shape에 대응할 수 있을 것이다. 모든 박스들을 training/inference에 사용하는 것은 cost-efficient하지 않다. 따라서 이제 이 예측들을 matching하는 작업을 수행한다.&amp;nbsp; Matching은 feature map을 통해 예측한 박스와 ground truth의 IOU treshold에 따라서 정해진다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분의 box들은 이 과정에서 negative sample이 된다(significant imbalance between the positive and negative samples). 이 중에서 confidence loss가 높은 순으로 정렬하여, positive와 negative의 비율이 1:3이 되도록 추출한다. 이 과정을 통해 최적화 속도를 높이고 훈련을 안정적으로 진행할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;* loss function&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체적인 loss fucntion 은 confidence score loss와 localization loss로 이루어져 있으며, 다음과 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;L(x,c,l,g) = 수식 2) 3)에서 N개 만큼 더해주었던 loss를 1/N으로 나누어준 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1530&quot; data-origin-height=&quot;1048&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ln4FY/btsizc3uRZQ/4vGXdg9MdBqK9rRpDUzim1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ln4FY/btsizc3uRZQ/4vGXdg9MdBqK9rRpDUzim1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ln4FY/btsizc3uRZQ/4vGXdg9MdBqK9rRpDUzim1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fln4FY%2Fbtsizc3uRZQ%2F4vGXdg9MdBqK9rRpDUzim1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;554&quot; height=&quot;379&quot; data-origin-width=&quot;1530&quot; data-origin-height=&quot;1048&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 SSD의 training objective[7,8]은 아래의 방법들을 차용한 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. Erhan, D., Szegedy, C., Toshev, A., Anguelov, D.: Scalable object detection using deep neural networks. In: CVPR. (2014)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. Szegedy, C., Reed, S., Erhan, D., Anguelov, D.: Scalable, high-quality object detection. arXiv preprint arXiv:1412.1441 v3 (2015)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;차이점으로는 Multiple object categories를 다룰 수 있도록 확장되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;confidence loss의 계산에 대한 부분&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1503&quot; data-origin-height=&quot;152&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4Z4qJ/btsiu1Bv00Z/hOkcuV39uZd41E8LZIEa21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4Z4qJ/btsiu1Bv00Z/hOkcuV39uZd41E8LZIEa21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4Z4qJ/btsiu1Bv00Z/hOkcuV39uZd41E8LZIEa21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4Z4qJ%2Fbtsiu1Bv00Z%2FhOkcuV39uZd41E8LZIEa21%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;583&quot; height=&quot;59&quot; data-origin-width=&quot;1503&quot; data-origin-height=&quot;152&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 한 default box와 ground truth box가 매칭되면, {1,0} -&amp;gt; 1 이 인디케이터 값으로 반환된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 특정 카테고리에 대해서, 생성되는 모든 default box들에 대해서 j번째 ground truth box와 매칭이 이루어졌을 경우, 인디케이터 들의 값이 모두 더해져 &amp;gt;= 1 일 수 있다. 이를 통해 어떤 한 박스에 대해서만 confidence loss를 계산하는 것이 아닌, 모든 박스에 대해서 각자 다른 class의 confidence Loss를 계산할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 말해 한 박스에서 다중 카테고리에 대해서 동시에 예측할 수 있는 유연성을 가지게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;수식 3)을 참고하면, positive sample에는&amp;nbsp; N개의 box가 있을 수 있고, 그 박스의 index는 그 중 하나인 i이다. matching되는 ground truth 역시 j이다. 그러면, 해당 i박스에는 여러 개의 클래스 p가 존재할 수 있다. 만약 인디케이터가 1이라면 계산을 수행하고, 0이라면 수행하지 않는다. 이런 식으로 모든 박스에서 존재하는 클래스에 대해서 softmax를 취해 더해지는 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;localization loss의 계산에 대한 부분 ( bounding box regression )&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;수식 2)를 참고하자.&amp;nbsp; positive sample중 하나인 i에 대해서 매칭되는 j번째 ground truth간의 계산이다. 각각의 positive sample에서 offset과 박스 정보를 가지고 center x, center y, w, h 를 구할 수 있다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 xk ij는 ( l - g )의 smooth L1 loss이며, m이 cx, cy, w, h 어떤 원소인지에 따라서 계산 방식이 각기 다르다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종적으로 cx,cy,w,h에 대한 loss들이 각각의 성분에 대해서 계산되어 합해진다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;** Smooth L1 loss&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;smooth L1 loss는 l과 g의 차이가 클 경우 L1 손실을, 작을 경우는 L2 손실을 사용하는 것이다. L1은 절댓값, L2는 제곱값의 차이이며, L2이 제곱값을 통해 오차를 측정하기 때문에 큰 값이 더 큰 차이를 발생한다. 따라서 이상치에 더 민감하게 반응한다고 할 수 있다. 반면 L1 loss는 이상치에 더 강건하다. 다만 L1 손실은 상수이기 때문에 미분 불가능한 지점이 존재한다. Smooth L1 loss를 사용하면 그래디언트의 변화를 완화할 수 있다. 그 형태는 아래 그림을 통해 확인할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyUBv7/btsivQ0Zzhp/oKxjN670Jl1EnGR6ZwDl9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyUBv7/btsivQ0Zzhp/oKxjN670Jl1EnGR6ZwDl9k/img.png&quot; data-alt=&quot;출처 :&amp;amp;nbsp;https://blog.csdn.net/leonardohaig/article/details/103374519&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyUBv7/btsivQ0Zzhp/oKxjN670Jl1EnGR6ZwDl9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcyUBv7%2FbtsivQ0Zzhp%2FoKxjN670Jl1EnGR6ZwDl9k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;369&quot; height=&quot;277&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;480&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 :&amp;nbsp;https://blog.csdn.net/leonardohaig/article/details/103374519&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSD에서는 Faster R-CNN의 smooth L1 loss를 사용하였고, 확인해보니 L1 ~ L2 의 B값은 1인것 같다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;729&quot; data-origin-height=&quot;261&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdKVTC/btsiNaKy4Xq/7NBUSMaOqDOYKYgpiypyXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdKVTC/btsiNaKy4Xq/7NBUSMaOqDOYKYgpiypyXk/img.png&quot; data-alt=&quot;faster Rcnn - Ross Girschick , p(3)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdKVTC/btsiNaKy4Xq/7NBUSMaOqDOYKYgpiypyXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdKVTC%2FbtsiNaKy4Xq%2F7NBUSMaOqDOYKYgpiypyXk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;383&quot; height=&quot;137&quot; data-origin-width=&quot;729&quot; data-origin-height=&quot;261&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;faster Rcnn - Ross Girschick , p(3)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;* Data augmentation&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSD는 smaller object에 대해서 퍼포먼스가 좀 낮게 나온다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;zoom in operation&quot; 을 sampling 할 때 사용하여 데이터를 증강함.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 원본 입력 이미지를 사용해서, 탐지 객체와의 자카드 유사도가 0.1, 0.3, 0.5, 0.7 혹은 0.9이면서 원본 이미지 크기의 [ 0.1 ~ 1 ], 종횡비 [1/2 ~ 2 ] 범위의 패치를 생성한다. 해당 패치들이 겹치는 부분에 ground truth box가 있으면, 해당 패치들의 영역만 사용한다. 0.5의 확률로 horizontal flip을 가하고,&amp;nbsp; 다음의 photometric process를 거쳤다고 한다. ( Some Improvements on Deep Convolutional Neural Network Based Image Classification , Andrew G. Howard )&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- translation invariance에 대해서는 Random crop하는 부분과 multiple scales and view라는 관점은 같고, 같은 맥락에서 SSD에서 패치를 사용함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- reflection invariance 때문에 horizontal flip을 사용함. 이 부분도 위에서 적용됨.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 나머지는 contrast, brightness, color, random lighting noise -&amp;gt; 이 부분은 레퍼런스가 (ImageNet Classification with Deep Convolutional Neural Networks, A,Krizhevsky., G,E.Hinton. et al.).&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Data Augmentation&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 쉬운 증강 방법은, 라벨이 보존되는 변환인데 ~ 크게 두가지 방법을 사용했고, GPU가 돌아갈때 CPU에서 돌려서 computationally free한 방법을 사용한다 ~~ 로 요약된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 여기서도 generating image translation(패치)과 horizontal reflections를 사용. 비슷한 개념으로 SSD도 사용.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2.RGB channel의 밀도를 변환하는 방법. PCA throughout 데이터셋, 발견한 주성분의 배수를 원본 이미지에 더해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 추가되는 값은 고유값에 해당하는 크기의 랜덤 변수를 mean=1, std=0.1인 가우시안 분포에서 추출한 값이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;&amp;nbsp; GPT의 설명 &amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #444654; color: #d1d5db; text-align: start;&quot;&gt; 따라서 각 RGB 이미지 Ixy의 (RGB) 픽셀&lt;span style=&quot;background-color: #444654; color: #d1d5db; text-align: start;&quot;&gt;에 다음 수량을 추가합니다:&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #444654; color: #d1d5db; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #444654; color: #d1d5db; text-align: start;&quot;&gt;Ixy = [IRxy, IGxy, IBxy]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #444654; color: #d1d5db; text-align: start;&quot;&gt;[p1, p2, p3][&amp;alpha;1&amp;lambda;1, &amp;alpha;2&amp;lambda;2, &amp;alpha;3&amp;lambda;3]T --&amp;gt; 1*3 3*1(1*3의 T) -&amp;gt; 1*1 값이 IRxy ~ IBxy에 더해진다는 것?&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #444654; color: #d1d5db; text-align: start;&quot;&gt;여기서 pi와 &amp;lambda;i는 각각 RGB 픽셀 값의 3 &amp;times; 3 공분산 행렬의 ith 고유벡터와 고유값이고, &lt;/span&gt;&lt;span style=&quot;background-color: #444654; color: #d1d5db; text-align: start;&quot;&gt;&amp;alpha;i는 이전에 언급한 랜덤 변수입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #444654; color: #d1d5db; text-align: start;&quot;&gt;-&amp;gt; 고유벡터만 PCA 결과이고, 가중치 &lt;span style=&quot;background-color: #444654; color: #d1d5db; text-align: start;&quot;&gt;&amp;alpha;는 1,2,3 모두 거의 조금차이나게 곱해줘서 적용한다는 뜻.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #444654; color: #d1d5db; text-align: start;&quot;&gt;각 &amp;alpha;i는 한 번만 그립니다. 특정 훈련 이미지의 모든 픽셀에 대해 그리고 해당 이미지가 다시 훈련에 사용될 때까지 동일한 값이 유지됩니다.-&amp;gt; 한번 뽑아서 훈련하고 redrawn된다는데, 위의 intensity alter한 기준으로 이미지를 다시 그리고, 그 이미지가 다시 활용될 경우 바뀐 이미지를 기준으로 PCA를 수행한다는 뜻인가? --&amp;gt; 테스트 해볼 것.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #444654; color: #d1d5db; text-align: start;&quot;&gt;이 방식은 자연 이미지의 중요한 특성인 물체의 식별이 조명의 강도와 색상의 변화에 불변함을 근사적으로 잡아내는 것입니다. 이 방식은 top-1 오류율을 1% 이상으로 감소시킵니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;top-1 error는, 모델이 가장 높은 확률로 예측한 클래스가 실제로 해당 샘플의 클래스와 일치하는지. 의미 있어보임.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;----- 끝 -----&amp;gt;&lt;/p&gt;</description>
      <category>BF 2024/컴퓨터 비전 관련</category>
      <author>jaegomhoji</author>
      <guid isPermaLink="true">https://dsjgm921.tistory.com/219</guid>
      <comments>https://dsjgm921.tistory.com/219#entry219comment</comments>
      <pubDate>Fri, 2 Jun 2023 17:42:22 +0900</pubDate>
    </item>
    <item>
      <title>터틀봇 2D 라이다  LDS-01 Lidar 센서 ROS 에서 구동해보기</title>
      <link>https://dsjgm921.tistory.com/218</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;LDS-01 실물 ( 분리한 상태 )&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;E65AF3A3-F192-45DE-A535-444A0A222E02.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Zrf76/btseGDkht99/KtgFYKbSZ0j79Pyo0o2SN1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Zrf76/btseGDkht99/KtgFYKbSZ0j79Pyo0o2SN1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Zrf76/btseGDkht99/KtgFYKbSZ0j79Pyo0o2SN1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZrf76%2FbtseGDkht99%2FKtgFYKbSZ0j79Pyo0o2SN1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;406&quot; height=&quot;541&quot; data-filename=&quot;E65AF3A3-F192-45DE-A535-444A0A222E02.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘돌아간다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://emanual.robotis.com/docs/en/platform/turtlebot3/appendix_lds_01/#appendix-lds01&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://emanual.robotis.com/docs/en/platform/turtlebot3/appendix_lds_01/#appendix-lds01&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1683592562252&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;ROBOTIS e-Manual&quot; data-og-description=&quot;&quot; data-og-host=&quot;emanual.robotis.com&quot; data-og-source-url=&quot;https://emanual.robotis.com/docs/en/platform/turtlebot3/appendix_lds_01/#appendix-lds01&quot; data-og-url=&quot;https://emanual.robotis.com/docs/en/platform/turtlebot3/appendix_lds_01/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/eBsuZ/hySyfDlgWK/ZeRs1Kk8Tw5hqCTFBs18b0/img.png?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/cyOQYj/hySyqkAi3f/DrA4AGlqoqpYAVtb4UbUi1/img.png?width=450&amp;amp;height=400&amp;amp;face=0_0_450_400,https://scrap.kakaocdn.net/dn/bUWI39/hySyqrk0hh/Ptfmd0CU5Br08uEdKfp1m0/img.png?width=470&amp;amp;height=233&amp;amp;face=0_0_470_233&quot;&gt;&lt;a href=&quot;https://emanual.robotis.com/docs/en/platform/turtlebot3/appendix_lds_01/#appendix-lds01&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://emanual.robotis.com/docs/en/platform/turtlebot3/appendix_lds_01/#appendix-lds01&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/eBsuZ/hySyfDlgWK/ZeRs1Kk8Tw5hqCTFBs18b0/img.png?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/cyOQYj/hySyqkAi3f/DrA4AGlqoqpYAVtb4UbUi1/img.png?width=450&amp;amp;height=400&amp;amp;face=0_0_450_400,https://scrap.kakaocdn.net/dn/bUWI39/hySyqrk0hh/Ptfmd0CU5Br08uEdKfp1m0/img.png?width=470&amp;amp;height=233&amp;amp;face=0_0_470_233');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;ROBOTIS e-Manual&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;emanual.robotis.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공홈에서 확인해보니 ROS kinetic 버전 패키지가 있는데 이는 ROS1 willy, 20.04 이전의 리눅스에서 돌아감&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;rosversion -d 로 현재 설치된 버전 확인하면, ROS1 noetic.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Github 링크에서 확인해본 결과 noetic 버전 pass 받아서 실행 가능함.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/ROBOTIS-GIT/hls_lfcd_lds_driver&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/ROBOTIS-GIT/hls_lfcd_lds_driver&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1683600205891&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - ROBOTIS-GIT/hls_lfcd_lds_driver: ROS package for HLDS HLS-LFCD LDS driver&quot; data-og-description=&quot;ROS package for HLDS HLS-LFCD LDS driver . Contribute to ROBOTIS-GIT/hls_lfcd_lds_driver development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/ROBOTIS-GIT/hls_lfcd_lds_driver&quot; data-og-url=&quot;https://github.com/ROBOTIS-GIT/hls_lfcd_lds_driver&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cddzwo/hySyqZjXbt/OyZVExxvgLoG6RWELUncc1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/ROBOTIS-GIT/hls_lfcd_lds_driver&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/ROBOTIS-GIT/hls_lfcd_lds_driver&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cddzwo/hySyqZjXbt/OyZVExxvgLoG6RWELUncc1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - ROBOTIS-GIT/hls_lfcd_lds_driver: ROS package for HLDS HLS-LFCD LDS driver&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;ROS package for HLDS HLS-LFCD LDS driver . Contribute to ROBOTIS-GIT/hls_lfcd_lds_driver development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;892&quot; data-origin-height=&quot;557&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HjDz3/btsexhl5EDx/CKZKr1iRKXaUmNBQcSCjj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HjDz3/btsexhl5EDx/CKZKr1iRKXaUmNBQcSCjj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HjDz3/btsexhl5EDx/CKZKr1iRKXaUmNBQcSCjj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHjDz3%2Fbtsexhl5EDx%2FCKZKr1iRKXaUmNBQcSCjj1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;892&quot; height=&quot;557&quot; data-origin-width=&quot;892&quot; data-origin-height=&quot;557&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ROS 설치 방법 참고 ( 레포 등록 ~ 키 설정 ~ 설치 ~ 환경 셋업 = 배시 설정, 의존성 패키지 설치 )&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://wiki.ros.org/noetic/Installation/Ubuntu&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://wiki.ros.org/noetic/Installation/Ubuntu &lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1683599937744&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;noetic/Installation/Ubuntu - ROS Wiki&quot; data-og-description=&quot;If you rely on these packages, please support OSRF. These packages are built and hosted on infrastructure maintained and paid for by the Open Source Robotics Foundation, a 501(c)(3) non-profit organization. If OSRF were to receive one penny for each downlo&quot; data-og-host=&quot;wiki.ros.org&quot; data-og-source-url=&quot;http://wiki.ros.org/noetic/Installation/Ubuntu&quot; data-og-url=&quot;http://wiki.ros.org/noetic/Installation/Ubuntu&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;http://wiki.ros.org/noetic/Installation/Ubuntu&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://wiki.ros.org/noetic/Installation/Ubuntu&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;noetic/Installation/Ubuntu - ROS Wiki&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;If you rely on these packages, please support OSRF. These packages are built and hosted on infrastructure maintained and paid for by the Open Source Robotics Foundation, a 501(c)(3) non-profit organization. If OSRF were to receive one penny for each downlo&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;wiki.ros.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.bashrc에 등록한 alias noetic으로 실행&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;alias&amp;nbsp;eb='nano&amp;nbsp;~/.bashrc'&lt;br /&gt;alias&amp;nbsp;sb='source&amp;nbsp;~/.bashrc'&lt;br /&gt;alias&amp;nbsp;gs='git&amp;nbsp;status'&lt;br /&gt;alias&amp;nbsp;gp='git&amp;nbsp;pull'&lt;br /&gt;alias&amp;nbsp;cw='cd&amp;nbsp;~/catkin_ws'&lt;br /&gt;alias&amp;nbsp;cs='cd&amp;nbsp;~/catkin_ws/src'&lt;br /&gt;alias cm='cd ~/catkin_ws &amp;amp;&amp;amp; catkin_make'&lt;br /&gt;alias&amp;nbsp;noetic='source&amp;nbsp;/opt/ros/noetic/setup.bash'&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다운받은 패키지는 catkin_ws/src/hls_lfcd_lds_driver로 워크스페이스의 소스 폴더 안에 위치시킨다&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바로 catkin_make를 하면 다음과 같은 오류가 뜬다&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Could&amp;nbsp;NOT&amp;nbsp;find&amp;nbsp;PY_em&amp;nbsp;(missing:&amp;nbsp;PY_EM)&amp;nbsp;&lt;br /&gt;CMake&amp;nbsp;Error&amp;nbsp;at&amp;nbsp;/opt/ros/noetic/share/catkin/cmake/empy.cmake:30&amp;nbsp;(message):&lt;br /&gt;&amp;nbsp;&amp;nbsp;Unable&amp;nbsp;to&amp;nbsp;find&amp;nbsp;either&amp;nbsp;executable&amp;nbsp;'empy'&amp;nbsp;or&amp;nbsp;Python&amp;nbsp;module&amp;nbsp;'em'...&amp;nbsp;&amp;nbsp;try&lt;br /&gt;&amp;nbsp;&amp;nbsp;installing&amp;nbsp;the&amp;nbsp;package&amp;nbsp;'python3-empy'&lt;br /&gt;Call&amp;nbsp;Stack&amp;nbsp;(most&amp;nbsp;recent&amp;nbsp;call&amp;nbsp;first):&lt;br /&gt;&amp;nbsp;&amp;nbsp;/opt/ros/noetic/share/catkin/cmake/all.cmake:164&amp;nbsp;(include)&lt;br /&gt;&amp;nbsp;&amp;nbsp;/opt/ros/noetic/share/catkin/cmake/catkinConfig.cmake:20&amp;nbsp;(include)&lt;br /&gt;&amp;nbsp;&amp;nbsp;CMakeLists.txt:58&amp;nbsp;(find_package)&lt;br /&gt;&lt;br /&gt;--&amp;nbsp;Configuring&amp;nbsp;incomplete,&amp;nbsp;errors&amp;nbsp;occurred!&lt;br /&gt;See also &quot;/home/----------/catkin_ws/build/CMakeFiles/CMakeOutput.log&quot;.&lt;br /&gt;Invoking&amp;nbsp;&quot;cmake&quot;&amp;nbsp;failed&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://wiki.ros.org/ROS/Tutorials/CreatingPackage&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://wiki.ros.org/ROS/Tutorials/CreatingPackage&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이떄,&amp;nbsp; catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3 로 다시 빌드하면 성공한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;런치 파일 실행 ( 터틀봇3 참고 )&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://emanual.robotis.com/docs/en/platform/turtlebot3/appendix_lds_01/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://emanual.robotis.com/docs/en/platform/turtlebot3/appendix_lds_01/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1683600027814&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;ROBOTIS e-Manual&quot; data-og-description=&quot;&quot; data-og-host=&quot;emanual.robotis.com&quot; data-og-source-url=&quot;https://emanual.robotis.com/docs/en/platform/turtlebot3/appendix_lds_01/&quot; data-og-url=&quot;https://emanual.robotis.com/docs/en/platform/turtlebot3/appendix_lds_01/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dxuJ4H/hySytBJU39/L5Hm4mSQVKrKDFzcfMU4c0/img.png?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/iHo0l/hySylwW3Dm/mUCtTPygcklP7B3KovW5F1/img.png?width=450&amp;amp;height=400&amp;amp;face=0_0_450_400,https://scrap.kakaocdn.net/dn/benBJe/hySymiicjC/AAVkc8bI36EaNpkGCiKKf0/img.png?width=470&amp;amp;height=233&amp;amp;face=0_0_470_233&quot;&gt;&lt;a href=&quot;https://emanual.robotis.com/docs/en/platform/turtlebot3/appendix_lds_01/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://emanual.robotis.com/docs/en/platform/turtlebot3/appendix_lds_01/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dxuJ4H/hySytBJU39/L5Hm4mSQVKrKDFzcfMU4c0/img.png?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/iHo0l/hySylwW3Dm/mUCtTPygcklP7B3KovW5F1/img.png?width=450&amp;amp;height=400&amp;amp;face=0_0_450_400,https://scrap.kakaocdn.net/dn/benBJe/hySymiicjC/AAVkc8bI36EaNpkGCiKKf0/img.png?width=470&amp;amp;height=233&amp;amp;face=0_0_470_233');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;ROBOTIS e-Manual&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;emanual.robotis.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Rviz로 실행하고 확인하는 방법&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 term1 : roscore&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;term2 : roslaunch&amp;nbsp;hls_lfcd_lds_driver&amp;nbsp;view_hlds_laser.launch&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 밖에도 링크에는 GUI 로 실행하는 다른 방법이 있음&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1203&quot; data-origin-height=&quot;1149&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d7LFOt/btserL3Qz03/cOeKjU0ansQRDYMOPbgdTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d7LFOt/btserL3Qz03/cOeKjU0ansQRDYMOPbgdTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d7LFOt/btserL3Qz03/cOeKjU0ansQRDYMOPbgdTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd7LFOt%2FbtserL3Qz03%2FcOeKjU0ansQRDYMOPbgdTk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1203&quot; height=&quot;1149&quot; data-origin-width=&quot;1203&quot; data-origin-height=&quot;1149&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1170&quot; data-origin-height=&quot;589&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBleb2/btsetHTXXbA/3sCYRIo15Ym3EohGwREn8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBleb2/btsetHTXXbA/3sCYRIo15Ym3EohGwREn8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBleb2/btsetHTXXbA/3sCYRIo15Ym3EohGwREn8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBleb2%2FbtsetHTXXbA%2F3sCYRIo15Ym3EohGwREn8k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1170&quot; height=&quot;589&quot; data-origin-width=&quot;1170&quot; data-origin-height=&quot;589&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;Rviz로 확인한 결과&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;background-color: #ffffff;&quot;&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Detection distance&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;120mm ~ 3,500mm&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 100%; height: 34px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;background-color: #ffffff;&quot;&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 17px;&quot;&gt;Ambient Light Resistance&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 17px;&quot;&gt;10,000 lux or less&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 17px;&quot;&gt;Sampling Rate&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 17px;&quot;&gt;1.8kHz&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감지거리가 대략 3m 정도 되는 것 같고, 테스트는 실내에서 진행해서 주변광 저항은 문제가 되지 않았다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;거리 별 오차와 스캔율, 스캔 범위는 다음과 같다.&amp;nbsp; 비교적 정확하게 검출이 되는 것 같다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;background-color: #ffffff;&quot;&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Distance Range&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;120 ~ 3,500mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Distance Accuracy (120mm ~ 499mm)&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&amp;plusmn;15mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Distance Accuracy(500mm ~ 3,500mm)&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&amp;plusmn;5.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Distance Precision(120mm ~ 499mm)&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&amp;plusmn;10mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Distance Precision(500mm ~ 3,500mm)&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&amp;plusmn;3.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Scan Rate&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;300&amp;plusmn;10 rpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Angular Range&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;360&amp;deg;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Angular Resolution&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;1&amp;deg;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;900&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;848&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;&lt;b&gt;&lt;span&gt;럭스&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(lux or lx)&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;국제 단위계의 조명도(조도, illuminance )의 단위.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;848&quot;&gt;&lt;span&gt;&lt;span&gt;국제 단위계(SI)의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;조명도의 단위&lt;/span&gt;&lt;span&gt;. 기호 ㏓. 1㎡의 넓이에 11m의 광속이 균등하게 입사했을 때의 조명도로서 광도가 1㏅인 점광원으로부터 1m의 거리에서 빛의 방향에 수직한 면의 조명도에 해당된다. 예를 들면 거실에서 30W고리모양 형광등을 2개 사용한 조명기구를 바닥에서 높이 1.8m의 위치에 달 때, 그 아래 탁자 위의 조명도는 140&amp;sim;160㏓ 정도이며, 가벼운 독서나 오락은 이 이상이 바람직하다.&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;848&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span&gt;칸델라&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(candela)&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;광도 단위. 국제단위계 기본단위로, 기호는 ㏅이다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;848&quot;&gt;&lt;span&gt;&lt;span&gt;광도 단위&lt;/span&gt;&lt;span&gt;. 국제단위계(SI) 기본단위로, 기호는 ㏅이다. 지금의 계량법으로는 ＜10만 1325㎩(파스칼) 압력에서 백금 응고점에 있는 흑체(黑體)의 1/60만㎡의 평평한 표면의 수직방향의 광도＞라고 정의되었다. 그러나 이것은 1948년 국제도량형 총회의 정의이며, 1979년 ＜주파수 540&amp;times;10㎐인 단색복사(單色輻射)를 방출하는 광원의 복사강도가 1/683W/㏛인 방향에서의 광도＞라고 개정되었다. 또 광도의 옛 단위로 쓰인 촉(燭)은 1.0067㏅에 해당한다. 칸델라라는 이름은 수지(獸脂)로 만든 양초를 뜻하는 라틴어에서 유래한다.&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;야외&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;직사일광 : 100,000 LUX&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;쾌청 : 10,000 LUX&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;구름있는낮 : 1,000 LUX&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;실내&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;일반사무실 : 1,000 LUX&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;시청각실 : 200 LUX&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;황혼, 호텔로비 : 100 LUX&lt;br /&gt;호텔의 복도 : 50 LUX&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;주차장, 극장 휴식중의 객석 : 10 LUX&lt;br /&gt;극장의 객석 : 2 LUX&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;밤&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;만월 시 맑은 밤의 지상 : 0.3 LUX&lt;br /&gt;상현달의 밝기 : 0.001 LUX&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;별의 밝기 : 0.001 LUX&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;즉, &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;LDS-01로는 야외의 쾌청한 날씨정도에서 사용 가능할 것 같다. 실내용 라이다는 몇K lux밖에 되지 않는데, 그에 비해서는 조도 저항이 있는 편 같다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;CygLidar 같은 비회전형 제품이 있길래 확인해보았지만, 야외에서는 사용이 불가능할 것 같다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;a href=&quot;https://www.devicemart.co.kr/goods/view?no=13901542&quot;&gt;https://www.devicemart.co.kr/goods/view?no=13901542&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1683607866575&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;2D/3D Dual 라이다 거리측정 센서 Solid-State ToF LiDAR&quot; data-og-description=&quot;초소형 고성능 라이다 (고정형) / 2D(200mm~8,000mm),3D(50mm~2,000mm) 동시 인식 / 측정속도: 15Hz / FOV: 2D/3D Horizontal 120도, 3D Vertical 65도&quot; data-og-host=&quot;www.devicemart.co.kr&quot; data-og-source-url=&quot;https://www.devicemart.co.kr/goods/view?no=13901542&quot; data-og-url=&quot;https://www.devicemart.co.kr/goods/view?no=13901542&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/iDBcn/hySyfDDClF/k4kpGKzk2wjCgmg4l853Z1/img.jpg?width=450&amp;amp;height=450&amp;amp;face=0_0_450_450,https://scrap.kakaocdn.net/dn/cEBaaA/hySyi8ckIe/bveVsL7DACXIVJTkRKxHH0/img.jpg?width=450&amp;amp;height=450&amp;amp;face=0_0_450_450,https://scrap.kakaocdn.net/dn/fzoul/hySyqynQ98/2BIlN128mFYSaYGqQklkk0/img.jpg?width=450&amp;amp;height=450&amp;amp;face=0_0_450_450&quot;&gt;&lt;a href=&quot;https://www.devicemart.co.kr/goods/view?no=13901542&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.devicemart.co.kr/goods/view?no=13901542&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/iDBcn/hySyfDDClF/k4kpGKzk2wjCgmg4l853Z1/img.jpg?width=450&amp;amp;height=450&amp;amp;face=0_0_450_450,https://scrap.kakaocdn.net/dn/cEBaaA/hySyi8ckIe/bveVsL7DACXIVJTkRKxHH0/img.jpg?width=450&amp;amp;height=450&amp;amp;face=0_0_450_450,https://scrap.kakaocdn.net/dn/fzoul/hySyqynQ98/2BIlN128mFYSaYGqQklkk0/img.jpg?width=450&amp;amp;height=450&amp;amp;face=0_0_450_450');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;2D/3D Dual 라이다 거리측정 센서 Solid-State ToF LiDAR&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;초소형 고성능 라이다 (고정형) / 2D(200mm~8,000mm),3D(50mm~2,000mm) 동시 인식 / 측정속도: 15Hz / FOV: 2D/3D Horizontal 120도, 3D Vertical 65도&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.devicemart.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;테스트 ~&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;책상 위에 물건이 많아서 좀 어지럽게 나왔다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;키보드, 사람, 책상 의자 모두 감지되고 있다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2440&quot; data-origin-height=&quot;1649&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyd1Q5/btseyy2TKtt/Tds2C3JcCmkFYlFCyRkU2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyd1Q5/btseyy2TKtt/Tds2C3JcCmkFYlFCyRkU2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyd1Q5/btseyy2TKtt/Tds2C3JcCmkFYlFCyRkU2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcyd1Q5%2Fbtseyy2TKtt%2FTds2C3JcCmkFYlFCyRkU2K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2440&quot; height=&quot;1649&quot; data-origin-width=&quot;2440&quot; data-origin-height=&quot;1649&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;키보드를 치운 상황. ToF 방식이라 의자 앞에 서 있으니 의자는 감지되지 않는다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2407&quot; data-origin-height=&quot;1635&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMHelP/btserCMf8O7/Wk7jED7QBBbpVaPoQ0NKW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMHelP/btserCMf8O7/Wk7jED7QBBbpVaPoQ0NKW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMHelP/btserCMf8O7/Wk7jED7QBBbpVaPoQ0NKW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMHelP%2FbtserCMf8O7%2FWk7jED7QBBbpVaPoQ0NKW0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2407&quot; height=&quot;1635&quot; data-origin-width=&quot;2407&quot; data-origin-height=&quot;1635&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸로 사람을 감지할 수 있을까?&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cv2 match Template을 사용해서 패턴을 찾아본다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 패턴 이미지가 필요하다. 알아서 가공하자.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;pattern.png&quot; data-origin-width=&quot;200&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWiA7X/btsevm98Dlo/4jc01yJcpSyR7caLkq7qPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWiA7X/btsevm98Dlo/4jc01yJcpSyR7caLkq7qPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWiA7X/btsevm98Dlo/4jc01yJcpSyR7caLkq7qPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWiA7X%2Fbtsevm98Dlo%2F4jc01yJcpSyR7caLkq7qPk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;200&quot; height=&quot;200&quot; data-filename=&quot;pattern.png&quot; data-origin-width=&quot;200&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #15173c; color: #f8f8f2;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #58b7ff;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; cv2&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #58b7ff;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; numpy &lt;/span&gt;&lt;span style=&quot;color: #58b7ff;&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; np &lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #15173c; color: #f8f8f2;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;path1 &lt;/span&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;'/home/ ㅁㄴㅇㄻㄴㅇㄹ /ROS2/pattern.png'&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;path2 &lt;/span&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;'/home/jㅁㄴㅇㄻㄴㅇㄹ/ROS2/2dlidar2.png'&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;pattern &lt;/span&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; cv2.&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;imread&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;path1&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;img &lt;/span&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; cv2.&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;imread&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;path2&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #6272a4;&quot;&gt;# width, height, Channel &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;pattern.&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;shape&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;row, col &lt;/span&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; pattern.&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;shape&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;[:&lt;/span&gt;&lt;span style=&quot;color: #86dbfd;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;]&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;cv2.&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;imshow&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;'pattern_image'&lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;, pattern&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;cv2.&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;waitKey&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #86dbfd;&quot;&gt;10000&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;cv2.&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;destroyAllWindows&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;()&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #15173c; color: #f8f8f2;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;methods &lt;/span&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;'cv2.TM_CCOEFF'&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;'cv2.TM_CCOEFF_NORMED'&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;'cv2.TM_CCORR'&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;'cv2.TM_CCORR_NORMED'&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;'cv2.TM_SQDIFF'&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;'cv2.TM_SQDIFF_NORMED'&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;]&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #15173c; color: #f8f8f2;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #58b7ff;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; i, name &lt;/span&gt;&lt;span style=&quot;color: #58b7ff;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #bd84dd;&quot;&gt;enumerate&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;methods&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;temp_img &lt;/span&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; img.&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;copy&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;()&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;temp_method &lt;/span&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;eval&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #6272a4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;#temp_img = cv2.blur(temp_img, (9,9), anchor=(1,-1), borderType=cv2.BORDER_DEFAULT)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;span style=&quot;background-color: #15173c; color: #6272a4; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #6272a4;&quot;&gt;# template matching &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;span style=&quot;background-color: #15173c; color: #6272a4; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;match &lt;/span&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; cv2.&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;matchTemplate&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;pattern,img,temp_method&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;span style=&quot;background-color: #15173c; color: #6272a4; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;min_val, max_val, min_loc, max_loc &lt;/span&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; cv2.&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;minMaxLoc&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;match&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;span style=&quot;background-color: #15173c; color: #6272a4; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;min_val&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;span style=&quot;background-color: #15173c; color: #6272a4; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;max_val&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;span style=&quot;background-color: #15173c; color: #6272a4; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;&quot;min_loc and tuple&quot;&lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;, min_loc&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;span style=&quot;background-color: #15173c; color: #6272a4; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;&quot;max_loc and tuple&quot;&lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;, max_loc&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;span style=&quot;background-color: #15173c; color: #6272a4; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #58b7ff;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; name &lt;/span&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;cv2.&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;TM_SQDIFF&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;, cv2.&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;TM_SQDIFF_NORMED&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;]:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;span style=&quot;background-color: #15173c; color: #6272a4; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #15173c; color: #6272a4; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;top_L &lt;/span&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; min_loc&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;span style=&quot;background-color: #15173c; color: #6272a4; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #15173c; color: #6272a4; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;match_value &lt;/span&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; min_val &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;span style=&quot;background-color: #15173c; color: #6272a4; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #58b7ff;&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;span style=&quot;background-color: #15173c; color: #6272a4; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #15173c; color: #6272a4; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;top_L &lt;/span&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; max_loc &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;span style=&quot;background-color: #15173c; color: #6272a4; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #15173c; color: #6272a4; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;match_value &lt;/span&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; max_val &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;span style=&quot;background-color: #15173c; color: #6272a4; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #6272a4;&quot;&gt;# point matching , then add original pattern size&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;span style=&quot;background-color: #15173c; color: #6272a4; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;bottom_R &lt;/span&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; (top_L[&lt;/span&gt;&lt;span style=&quot;color: #86dbfd;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; col, top_L[&lt;/span&gt;&lt;span style=&quot;color: #86dbfd;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; row )&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;span style=&quot;background-color: #15173c; color: #6272a4; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;color_rgb &lt;/span&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color: #86dbfd;&quot;&gt;0.125&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #86dbfd;&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;span style=&quot;background-color: #15173c; color: #6272a4; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;cv2.&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;rectangle&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;temp_img, top_L, bottom_R, color_rgb,&lt;/span&gt;&lt;span style=&quot;color: #86dbfd;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; cv2.&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;imshow&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;'match_image'&lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;, temp_img&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;&quot;type of methods\t:&quot;&lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;, name&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; save_root &lt;/span&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;&quot;/home/your save root /ROS2/&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; bridge_str &lt;/span&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;&quot;lidar_match_Template&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; save_path &lt;/span&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; save_root &lt;/span&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; bridge_str &lt;/span&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; name &lt;/span&gt;&lt;span style=&quot;color: #ff357c;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;&quot;.png&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; cv2.&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;imwrite&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #fff6b3;&quot;&gt;save_path, temp_img&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; cv2.&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;waitKey&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #86dbfd;&quot;&gt;10000&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; cv2.&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;destroyAllWindows&lt;/span&gt;&lt;span style=&quot;color: #efa554;&quot;&gt;()&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상관관계 매칭 결과, 위치를 잘 잡은 것 같다. 충분히 사람 인식에 써먹을 수 있을 것 같다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;lidar_match_Templatecv2.TM_CCORR.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t86JF/btseyMUn6gy/7YJpMT2DjkzDKwWf4XcvC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t86JF/btseyMUn6gy/7YJpMT2DjkzDKwWf4XcvC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t86JF/btseyMUn6gy/7YJpMT2DjkzDKwWf4XcvC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft86JF%2FbtseyMUn6gy%2F7YJpMT2DjkzDKwWf4XcvC0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;1280&quot; data-filename=&quot;lidar_match_Templatecv2.TM_CCORR.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1280&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제곱 차이 매칭 결과, 상관관계 매칭 결과보다는 원하는 위치가 추출되지 않았다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;lidar_match_Templatecv2.TM_SQDIFF.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dQyceo/btseyzA8Mok/xT3Fvbje9kVkqqdmX8Ie2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dQyceo/btseyzA8Mok/xT3Fvbje9kVkqqdmX8Ie2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dQyceo/btseyzA8Mok/xT3Fvbje9kVkqqdmX8Ie2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdQyceo%2FbtseyzA8Mok%2FxT3Fvbje9kVkqqdmX8Ie2k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;1280&quot; data-filename=&quot;lidar_match_Templatecv2.TM_SQDIFF.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1280&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>BF 2024/ROS2</category>
      <author>jaegomhoji</author>
      <guid isPermaLink="true">https://dsjgm921.tistory.com/218</guid>
      <comments>https://dsjgm921.tistory.com/218#entry218comment</comments>
      <pubDate>Tue, 9 May 2023 15:05:15 +0900</pubDate>
    </item>
  </channel>
</rss>