<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>알고리듬</title>
    <link>https://gliver.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sat, 27 Jun 2026 19:56:46 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Gliver</managingEditor>
    <item>
      <title>2025 국방 AI경진대회(MAICON) 후기</title>
      <link>https://gliver.tistory.com/99</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;안녕하세요 Gliver 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 글은 2025 MAICON(국방 AI 경진대회) 본선 후기입니다.&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;color: #000000;&quot;&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대회 소개&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;대회 일정&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2012&quot; data-origin-height=&quot;1117&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZttMV/dJMcagKG4KJ/J4GoDTjtFJ16CmC8IHdkjk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZttMV/dJMcagKG4KJ/J4GoDTjtFJ16CmC8IHdkjk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZttMV/dJMcagKG4KJ/J4GoDTjtFJ16CmC8IHdkjk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZttMV%2FdJMcagKG4KJ%2FJ4GoDTjtFJ16CmC8IHdkjk%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;750&quot; height=&quot;416&quot; data-origin-width=&quot;2012&quot; data-origin-height=&quot;1117&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;예선은 온라인으로 진행되는 개인전이며, 예선을 통과한 참가자들끼리 5인 1팀으로 총 10팀으로 본선에 진출하게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;참고로, 예선을 통과하게 되면 팀빌딩 페이지가 제공되어 여기서 게시글을 올려 팀원을 구하거나 팀원으로 들어갈 수 있는 구조이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이후에 약 3주간의 멘토링 과정이 진행되며 이후에 2박 3일 동안의 오프라인 본선이 진행된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;멘토링은 일주일에 1회, 3주 동안 총 3회 진행되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;예선 소개&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2273&quot; data-origin-height=&quot;1416&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXvbD6/dJMcahv4bAC/oCjogXYzcSTKPIPf51LNWK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXvbD6/dJMcahv4bAC/oCjogXYzcSTKPIPf51LNWK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXvbD6/dJMcahv4bAC/oCjogXYzcSTKPIPf51LNWK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXvbD6%2FdJMcahv4bAC%2FoCjogXYzcSTKPIPf51LNWK%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;750&quot; height=&quot;467&quot; data-origin-width=&quot;2273&quot; data-origin-height=&quot;1416&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;예선은 온라인으로 진행되며 군장병 30명, 사관생도 10명, 일반인 10명을 뽑는다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&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;예선은 온라인으로 진행되며 총 3문제가 출제되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제의 유형은 적절한 모델을 만들어 테스트 데이터에 대해 높은 점수를 받으면 되는 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 알고리즘 코딩테스트가 아닌 Data Science 코딩테스트라고 생각하면 된다.&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;참고로, 나는 예선에서 81.9점을 받았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;얘기를 들어본 결과, 군장병 커트라인은 72~73점 정도, 일반인은 82점 정도인 것 같다. (사관생도는 모르겠다..)&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;2502&quot; data-origin-height=&quot;1294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BVFCg/dJMcafSywhq/g4VnrBA9EwwaNhvxuKMaL1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BVFCg/dJMcafSywhq/g4VnrBA9EwwaNhvxuKMaL1/img.jpg&quot; data-alt=&quot;저작권 이슈로 문제명은 블러 처리하였습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BVFCg/dJMcafSywhq/g4VnrBA9EwwaNhvxuKMaL1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBVFCg%2FdJMcafSywhq%2Fg4VnrBA9EwwaNhvxuKMaL1%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;750&quot; height=&quot;388&quot; data-origin-width=&quot;2502&quot; data-origin-height=&quot;1294&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;저작권 이슈로 문제명은 블러 처리하였습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 문제가 나오는지는 예선 전에 대략적으로 알려줬으며, ChatGPT와 같은 AI 툴을 사용할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서, 예선을 통과하려면 예선 정보가 나온 이후에 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;짧은 시간에 어떻게 문제를 풀지 전략을 잘 짜는 게 중요&lt;/span&gt;하다고 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;시상내역&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1983&quot; data-origin-height=&quot;1247&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d8PIAv/dJMcacnZEVR/B9M2U3PL5aFKFhZjGvcDOk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d8PIAv/dJMcacnZEVR/B9M2U3PL5aFKFhZjGvcDOk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d8PIAv/dJMcacnZEVR/B9M2U3PL5aFKFhZjGvcDOk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd8PIAv%2FdJMcacnZEVR%2FB9M2U3PL5aFKFhZjGvcDOk%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;750&quot; height=&quot;472&quot; data-origin-width=&quot;1983&quot; data-origin-height=&quot;1247&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;예선을 통과하여 본선에 총 5팀이 나오는데, (우수부대상을 제외하고) 상이 총 10 정이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;예선을 타이트하게 뽑고 본선에서 모두에게 상을 주는 구조인 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, 예선만 통과하면 상은 확정이며 그중에서 6등 안에만 들면 최소 500만 원이라는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;이때는 몰랐다. 내가 10등을 하게 될 줄은..&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;h3 data-ke-size=&quot;size23&quot;&gt;본선 과제 소개&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;본선 과제는 'MUM-T(유무인복합체계) 기반의 전장 환경 위험 탐지 및 통합 관제 체계 실시'이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&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;color: #000000;&quot;&gt;쉽게 말해, 유인(사람이 직접 조종)과 무인(자율 주행)시스템이 함께 협력하여 작전&amp;middot;임무를 수행하는 체계이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 대회에서 유인은 드론을 조종하는 것을, 무인은 자율 주행 로봇을 의미한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2695&quot; data-origin-height=&quot;1220&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/U42Iu/dJMcachdLMO/DKnHiCHBcvud85uHVLKeg1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/U42Iu/dJMcachdLMO/DKnHiCHBcvud85uHVLKeg1/img.jpg&quot; data-alt=&quot;본선 경기장 레이아웃&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/U42Iu/dJMcachdLMO/DKnHiCHBcvud85uHVLKeg1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FU42Iu%2FdJMcachdLMO%2FDKnHiCHBcvud85uHVLKeg1%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;750&quot; height=&quot;340&quot; data-origin-width=&quot;2695&quot; data-origin-height=&quot;1220&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;본선 경기장 레이아웃&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2783&quot; data-origin-height=&quot;1368&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dhZiCA/dJMcaiBHcD8/Y5F5aNnETA4zIf86LDzHN1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dhZiCA/dJMcaiBHcD8/Y5F5aNnETA4zIf86LDzHN1/img.jpg&quot; data-alt=&quot;본선 임무평가 심사기준&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dhZiCA/dJMcaiBHcD8/Y5F5aNnETA4zIf86LDzHN1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdhZiCA%2FdJMcaiBHcD8%2FY5F5aNnETA4zIf86LDzHN1%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;750&quot; height=&quot;369&quot; data-origin-width=&quot;2783&quot; data-origin-height=&quot;1368&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;본선 임무평가 심사기준&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;본선 과제 1. 자율주행 - 구간주행 (15점)&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1714&quot; data-origin-height=&quot;1220&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czP3iN/dJMcagqoe5y/xPFplt6HbW8KUs4uYegrdk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czP3iN/dJMcagqoe5y/xPFplt6HbW8KUs4uYegrdk/img.jpg&quot; data-alt=&quot;빨간색: Alpha 구간, 초록색: Bravo 구간, 파란색: Charlie 구간&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czP3iN/dJMcagqoe5y/xPFplt6HbW8KUs4uYegrdk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczP3iN%2FdJMcagqoe5y%2FxPFplt6HbW8KUs4uYegrdk%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;600&quot; height=&quot;427&quot; data-origin-width=&quot;1714&quot; data-origin-height=&quot;1220&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;빨간색: Alpha 구간, 초록색: Bravo 구간, 파란색: Charlie 구간&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;START 지점부터 FINISH 지점까지 주행을 잘하는지를 평가하는 과제이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각 구간(&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;Alpha&lt;/span&gt;, &lt;span style=&quot;color: #409d00;&quot;&gt;Bravo&lt;/span&gt;, &lt;span style=&quot;color: #0593d3;&quot;&gt;Charlie&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)을 잘 통과할 때마다 5점씩 획득할 수 있으며, 3구간 모두 통과 시 총 15점을 획득할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, START 지점부터 FINISH 지점까지 주행만 잘해도 15점을 획득할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;본선 과제 1. 자율주행 - 주행시간 (10점)&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1714&quot; data-origin-height=&quot;1220&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lksMn/dJMcahiw0yH/0kKsPz0CtND1FGYhhirslk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lksMn/dJMcahiw0yH/0kKsPz0CtND1FGYhhirslk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lksMn/dJMcahiw0yH/0kKsPz0CtND1FGYhhirslk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlksMn%2FdJMcahiw0yH%2F0kKsPz0CtND1FGYhhirslk%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;600&quot; height=&quot;427&quot; data-origin-width=&quot;1714&quot; data-origin-height=&quot;1220&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;단순히, START 지점부터 END 지점까지 가는 데 걸린 시간이 짧은 순으로 점수를 획득하는 방식이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아래에 나오는 여러 과제를 하다 보면 주행 시간이 더 걸리는 구조이기 때문에 선택과 집중을 잘해야 하는 부분이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;본선 과제 2. 객체인식 - 아군표식 (5점)&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;514&quot; data-origin-height=&quot;320&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tS39d/dJMcabCCiG3/h4IkQY9mSCMaoYCKewLwek/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tS39d/dJMcabCCiG3/h4IkQY9mSCMaoYCKewLwek/img.jpg&quot; data-alt=&quot;본선 대회장 QR 코드 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tS39d/dJMcabCCiG3/h4IkQY9mSCMaoYCKewLwek/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtS39d%2FdJMcabCCiG3%2Fh4IkQY9mSCMaoYCKewLwek%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;500&quot; height=&quot;311&quot; data-origin-width=&quot;514&quot; data-origin-height=&quot;320&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;본선 대회장 QR 코드 모습&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그림과 같이 QR 코드가 1개 존재하며, 이를 인식하여 해당 코드의 패턴에 따라 9가지 중 1가지로 분류하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;단순히 QR 코드 패턴에 따라 9가지로 분류하면 되는 과제이다. 왜 과제 이름이 '아군표식'인지는 잘 모르겠다..&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;본선 과제2. 객체인식 - 장애물회피 (10점)&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;815&quot; data-origin-height=&quot;682&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qicC1/dJMcahCPGtV/keDpQ1wNBBWninv6yMb1DK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qicC1/dJMcahCPGtV/keDpQ1wNBBWninv6yMb1DK/img.jpg&quot; data-alt=&quot;본선 대회장 포트홀 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qicC1/dJMcahCPGtV/keDpQ1wNBBWninv6yMb1DK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqicC1%2FdJMcahCPGtV%2FkeDpQ1wNBBWninv6yMb1DK%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;500&quot; height=&quot;418&quot; data-origin-width=&quot;815&quot; data-origin-height=&quot;682&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;본선 대회장 포트홀 모습&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대회장에는 그림과 같은 포트홀이 총 2개 존재하며, 이를 회피하여 주행할 경우 각 5점씩, 총 10점 획득할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;본선 과제2. 객체인식 - 정찰탐지 (25점)&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;610&quot; data-origin-height=&quot;558&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/de9KSf/dJMcagqoisX/lPpC3oEfjPC5t7ibQVLCF1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/de9KSf/dJMcagqoisX/lPpC3oEfjPC5t7ibQVLCF1/img.jpg&quot; data-alt=&quot;본선 대회장 객체 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/de9KSf/dJMcagqoisX/lPpC3oEfjPC5t7ibQVLCF1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fde9KSf%2FdJMcagqoisX%2FlPpC3oEfjPC5t7ibQVLCF1%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;350&quot; height=&quot;320&quot; data-origin-width=&quot;610&quot; data-origin-height=&quot;558&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;본선 대회장 객체 예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대회장에는 총 24개의 위치에 객체가 놓일 수 있으며, 객체 1개당 약 2점의 점수를 얻을 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;객체의 종류는 총 7가지이며, 객체가 놓일 위치, 어떤 객체가 놓일지, 몇 개 놓일지 등은 평가 전까지는 공개하지 않는다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;단순히, 출발하고 도착할 때까지의 객체를 탐지하는 것이 아닌, &lt;b&gt;구간 별로 탐지해야 하기 때문에 꽤 까다로운 테스크&lt;/b&gt;이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉,&lt;/span&gt; &lt;span style=&quot;color: #ef5369;&quot;&gt;Alpha&lt;/span&gt;, &lt;span style=&quot;color: #409d00;&quot;&gt;Bravo&lt;/span&gt;, &lt;span style=&quot;color: #0593d3;&quot;&gt;Charlie&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;구간에 대해 각 구간이 끝나기 전까지 해당 구간에서 나온 객체의 종류와 개수를 통신보고해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;본선 과제 3. 통신보고 - 목표추적 (10점)&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1903&quot; data-origin-height=&quot;1240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKBNpt/dJMcaiPeCJr/EiGdmoUPwDvyktEI9K9PF0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKBNpt/dJMcaiPeCJr/EiGdmoUPwDvyktEI9K9PF0/img.jpg&quot; data-alt=&quot;9개의 건물 중에서 2번과 3번에 불이난 사진&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKBNpt/dJMcaiPeCJr/EiGdmoUPwDvyktEI9K9PF0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKBNpt%2FdJMcaiPeCJr%2FEiGdmoUPwDvyktEI9K9PF0%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;750&quot; height=&quot;489&quot; data-origin-width=&quot;1903&quot; data-origin-height=&quot;1240&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;9개의 건물 중에서 2번과 3번에 불이난 사진&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그림과 같이 9개의 건물 중에서 임의의 2개의 건물이 불이 난 상태이며, 이를 드론으로 촬영해 어느 건물에서 불이 났는지 추론해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;추론한 이후에는 로봇이 그 정보를 받고 불이난 건물 사진을 찍어서 통신보고해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;드론으로 촬영한 사진에서 불이난 곳을 정확히 추론하여 통신보고하면 5점을 획득한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한 불이난 건물의 사진을 로봇으로 찍어 통신보고하면 5점을 획득한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;본선 과제 3. 통신보고 - 위치보고 (5점)&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1714&quot; data-origin-height=&quot;1220&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J9Jza/dJMcahiw36Q/inJ9AKIlKH0HmC5t2ads9k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J9Jza/dJMcahiw36Q/inJ9AKIlKH0HmC5t2ads9k/img.jpg&quot; data-alt=&quot;Alpha, Bravo, Charlie 포인트에 강조한 사진&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J9Jza/dJMcahiw36Q/inJ9AKIlKH0HmC5t2ads9k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ9Jza%2FdJMcahiw36Q%2FinJ9AKIlKH0HmC5t2ads9k%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;750&quot; height=&quot;534&quot; data-origin-width=&quot;1714&quot; data-origin-height=&quot;1220&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Alpha, Bravo, Charlie 포인트에 강조한 사진&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그림과 같이 Alpha Point, Bravo Point, Charlie Point를 통과할 때 통신보고를 해야 하는 테스크이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각 지점을 통과할 때 통신보고를 잘하면 1개당 1.5점 획득할 수 있으며, 3개 모두 성공하면 5점을 획득할 수 있다.&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;본선 과제 수행을 위한 역할 정리&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;본선 과제 수행을 위한 역할은 크게 4가지 정도로 분류할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 이미지 분석 &amp;amp; 처리&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;과제 수행에 있어 기초가 되는 부분이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로봇이 차선을 따라 정확히 주행하려면 차선을 정확히 인식할 수 있도록 이미지 처리해 주는 것이 중요하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&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;2035&quot; data-origin-height=&quot;498&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oWnso/dJMcabCCmti/NiWWNjNKS1ME0DNBwtySpK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oWnso/dJMcabCCmti/NiWWNjNKS1ME0DNBwtySpK/img.jpg&quot; data-alt=&quot;왼쪽: 원본 이미지 / 가운데: 차선 인식을 위해 아래 부분만 사용 / 오른쪽: 차선인 흰색 부분만 인식하도록 처리&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oWnso/dJMcabCCmti/NiWWNjNKS1ME0DNBwtySpK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoWnso%2FdJMcabCCmti%2FNiWWNjNKS1ME0DNBwtySpK%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;800&quot; height=&quot;196&quot; data-origin-width=&quot;2035&quot; data-origin-height=&quot;498&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;왼쪽: 원본 이미지 / 가운데: 차선 인식을 위해 아래 부분만 사용 / 오른쪽: 차선인 흰색 부분만 인식하도록 처리&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한, Aruco 마커 처리나 QR 코드를 처리할 때도 이미지를 기반으로 처리한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;Aruco 마커란 카메라가 쉽게 인식하고 위치/자세를 계산할 수 있는 ID 기반 사각 패턴으로, 로봇 자율주행과 AR 시스템에서 많이 사용된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 로봇 컨트롤러 제어 &amp;amp; 주행&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;차선 인식 단계에서 차선의 위치 및 기울기를 안정적으로 추출했다면, &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&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;color: #000000;&quot;&gt;일반적으로는 인식된 차선을 1차식 또는 2차식 형태로 모델링하여 기울기(각도) 또는 중심점 오차(heading error)를 계산하고,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&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;color: #000000;&quot;&gt;이 단계에서는 수학 및 제어 이론(PWM, PID, RPM 등)에 대한 이해가 중요하며, &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;차선 이미지로부터 얻은 오차 값(error)을 적절한 제어 입력으로 변환하여 안정적으로 주행시키는 것이 핵심이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. 데이터 수집 &amp;amp; 라벨링 &amp;amp; 모델 학습&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;총 7가지 객체를 분류할 모델을 만드는 작업이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;객체에 대한 데이터는 대회 시작 전에 미리 제공하지 않으므로, 대회가 오프라인으로 시작하면 그때 직접 수집해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, 대회가 시작하면 데이터 수집, 데이터 라벨링, 모델 학습까지 전부 해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;보통 모델이 성능이 어느 정도 나오려면 1000장 정도는 라벨링해야 하니 꽤 시간이 걸리는 작업이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;추가로, 드론이 촬영한 사진에서 불이 난 건물을 탐지하는 모델 또한 만들어야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. 드론 원격 제어 &amp;amp; 화재 건물 탐지 &amp;amp; 통신보고&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;드론을 원격으로 제어하는 팀원이 1명 필요하므로, 드론 제어와 사진 찍는 연습을 해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&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;color: #000000;&quot;&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;1903&quot; data-origin-height=&quot;1240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKBNpt/dJMcaiPeCJr/EiGdmoUPwDvyktEI9K9PF0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKBNpt/dJMcaiPeCJr/EiGdmoUPwDvyktEI9K9PF0/img.jpg&quot; data-alt=&quot;9개의 건물 중에서 2번과 3번에 불이난 사진&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKBNpt/dJMcaiPeCJr/EiGdmoUPwDvyktEI9K9PF0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKBNpt%2FdJMcaiPeCJr%2FEiGdmoUPwDvyktEI9K9PF0%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;600&quot; height=&quot;391&quot; data-origin-width=&quot;1903&quot; data-origin-height=&quot;1240&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;9개의 건물 중에서 2번과 3번에 불이난 사진&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, 위와 같이 불이난 건물을 잘 판단한 이후에 해당 건물이 몇 번인지 자동으로 구해주는 알고리즘을 작성해야 한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이는, 드론 사진을 잘 찍는다는 가정 하에 간단하게 x, y 좌표 비교하여 처리할 수 있다.&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;color: #000000;&quot;&gt;통신보고는 대회 측에서 제시한 방법과 양식에 따라 정보를 전송하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;통신보고 또한 이슈가 발생할 수 있으니, 미리 충분히 테스트해 보는 것이 중요하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;추가로..&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한정된 자원 안에서 여러 작업을 수행해야 하므로 최적화 작업 또한 중요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI 모델을 GPU를 활용할 수 있도록 환경을 구축하고 최적화하는 작업이 중요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, CPU 기반 처리라 하더라도 불필요한 연산을 줄이고 효율적으로 코드를 작성하는 것이 중요하다.&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대회를 준비하며 내가 한 것들&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이제, 내가 대회를 준비하며 한 것들에 대해 자세하게 이야기해 보겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;나는 위의 4가지 역할 중에서 1번과 2번 역할을 맡았다.&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;color: #000000;&quot;&gt;이번 대회의 까다로운 점은 &lt;span style=&quot;background-color: #f6e199;&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;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, 로봇에서 이미지 처리와 주행을 고려하면서 AI 모델 추론이나 통신 보고 등 여러 기능을 쉽게 넣을 수 있게 구조를 잡아야 한다고 생각했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그래서, 실시간 자율주행 로봇 소프트웨어 아키텍처를 설계하였다.&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;color: #000000;&quot;&gt;내가 만든 소프트웨어 아키텍처는 아래와 같은 파이프라인으로 설계했다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1763983446951&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 1. 프레임 캡처
self.frame = self.camera.get_frame()

# 2. 이미지 처리
self.images = self.image_processor.get_images(self.frame)

# images가 None이면 빈 딕셔너리로 처리
if self.images is None:
    self.images = {}

# 3. 감지 수행
observations = {
    &quot;lane&quot;: self.observer.observe_lines(self.images.get(&quot;hough&quot;)),
    &quot;aruco&quot;: self.observer.observe_aruco(self.images.get(&quot;original&quot;)),
    &quot;pothole&quot;: self.observer.observe_pothole(self.images.get(&quot;binary&quot;)),
    &quot;qr_codes&quot;: self.observer.observe_qr_codes(self.images.get(&quot;original&quot;)),
    # 필요한 경우 다른 감지 추가
}

# 4. 트리거 매니저가 적절한 액션을 반환
action = self.trigger_manager.step(observations)

# 5. 액션 실행
if action:
    self.action_executor.execute(action)&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프레임을 받아오는 동작을 진행한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;받아온 프레임을 차선 인식을 할 수 있도록 이미지 처리를 하고, 여러 이미지들을 받아온다. (BEV, binary, hough, ...)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;처리한 이미지들을 통해 여러 정보를 얻어낸다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ex) lane에서는 차선이 발견됐다면, 차선의 각도와 중심점과의 거리 정보를 받아온다,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ex) aruco에서는 aruco가 발견됐다면, aruco의 id를 받아온다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;받아온 모든 정보들(observations)을 총합하여 가장 적절한 행동을 받아온다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;행동을 컨트롤러가 실행한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;더 자세한 구조가 궁금하다면, &lt;a href=&quot;https://github.com/tjdans6342/litebot&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;깃허브 레포지토리&lt;/span&gt;&lt;/a&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;본선 대회에서 생긴 이슈..&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ROS 환경에서 모두 잘 동작하는 걸 확인해서, 아키텍처에서 컨트롤러 부분만 대회에서 제공한 라이브러리를 이용해서 바꾸면 될 줄 알았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, 여러 이슈 때문에 로봇을 기본 주행이 되도록 만드는 게 쉽지 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;컨트롤러 함수의 차이&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ROS에서 모터를 제어할 때는 선속도(linear velocity)와 각속도(angular velocity) 값을 계속 보내주는 방식으로 움직인다.&lt;br /&gt;반면, 대회에서 제공된 Tiki 라이브러리는 RPM 기반으로 모터를 조절하는 방식이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;303&quot; data-start=&quot;213&quot; data-ke-size=&quot;size16&quot;&gt;그래서 ROS 방식에서 사용하던 v, w 값을 Tiki의 RPM으로 변환하는 함수를 만들어 적용해 봤지만,&lt;br /&gt;실제 주행 과정에서 정확하게 동작하지 않았다.&lt;/p&gt;
&lt;p data-end=&quot;303&quot; data-start=&quot;213&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;377&quot; data-start=&quot;305&quot; data-ke-size=&quot;size16&quot;&gt;결국, 단순 변환으로 해결될 문제가 아니었고, Tiki의 제어 방식에 맞춰 동작 로직을 따로 다시 설계했어야 했다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;ROS와 Tiki 라이브러리의 차이&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ROS에서는 모터 제어 명령을 한 번 보내면 그 순간만 반영되고 바로 끝난다.&lt;br /&gt;계속 움직이게 하려면 일정 주기(예: 10Hz, 20Hz)로 속도 명령을 반복해서 보내줘야 하고,&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-end=&quot;354&quot; data-start=&quot;220&quot; data-ke-size=&quot;size16&quot;&gt;반대로 Tiki는 명령을 한 번 보내면 해당 동작을 계속 유지한다.&lt;br /&gt;예를 들어 forward() 명령을 한 번 실행하면, 멈추라는 명령을 따로 주기 전까지 계속 전진하게 된다.&lt;br /&gt;즉, 내부적으로 독립적으로 동작을 지속하는 방식이다.&lt;/p&gt;
&lt;p data-end=&quot;354&quot; data-start=&quot;220&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;533&quot; data-start=&quot;356&quot; data-ke-size=&quot;size16&quot;&gt;그래서 ROS는 실시간 제어 중심 구조라 반응이 빠르고 세밀한 조정이 가능한 반면,&lt;br /&gt;Tiki는 동작 기반의 구조라 한 번 시작된 행동을 중간에 개입하거나 조정하기가 상대적으로 어렵다.&lt;br /&gt;이 차이 때문에 동일한 제어 코드를 그대로 가져가기 어렵고, Tiki 방식에 맞게 별도의 제어 로직을 다시 설계해야 했다.&lt;/p&gt;
&lt;p data-end=&quot;533&quot; data-start=&quot;356&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 문제들을 어찌어찌 해결했으나(10시간 정도 걸림), 결국 포기하게 된 사건이 있었다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그를 찍으며 주행 테스트를 하는데, right rpm이 left rpm보다 큰 상태인데 오른쪽으로 돌아가는 것이다..!&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;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;대회장을 가면 아래와 같은 상황 때문에 하나를 테스트하는 데 생각보다 시간이 오래 걸린다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;경기장을 팀별로 번갈아 가면서 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;로봇을 충전하는 동안에는 사용이 불가함.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;로봇으로 주행 테스트뿐만 아니라 데이터 수집도 해야 함.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;로봇 환경 세팅하는 데도 시간이 꽤 걸림&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;따라서, 더 이상 아키텍처를 끌고 가기보단 아예 처음부터 Tiki에 맞춘 코드를 짜기로 결정했다.&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;color: #9d9d9d;&quot;&gt;아키텍처를 계속 끌고 가며 테스트하다 보니 거의 12시간이 지나버렸다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&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;color: #000000;&quot;&gt;내가 가져온 아키텍처를 여러 번 테스트하는 동안, 다른 팀원이 처음부터 Tiki 구조에 맞춰서 주행 코드를 작성하고 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&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;color: #000000;&quot;&gt;이후에는 꽤 순조롭게 진행되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;객체 인식 모델을 프로젝트에 옮겨 잘 동작했고, aruco 마커나 qr코드도 잘 인식하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&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;color: #000000;&quot;&gt;이제 주행을 하며 잘 동작하는지 보고 디테일만 수정하면 되는 단계가 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그런데,, 몇 가지 이슈가 더 발생했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프레임 이슈&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;팀원이 작성한 주행 코드에 YOLO 모델을 임포트해 실행했는데, 이 과정에서 프레임이 급격히 떨어지는 문제가 발생했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;원래 주행 코드는 while 루프를 빠르게 반복하며 처리하는 방식이어서 초당 약 100 프레임 정도가 나왔고, 이 상태에서는 주행이 안정적이었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만 YOLO 모델을 불러오면서 연산량이 크게 늘었고, 프레임 속도가 초당 약 20 프레임 수준으로 떨어졌다.&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;color: #000000;&quot;&gt;프레임이 낮아지면서 주행 반응이 둔해지고, 장애물이나 차선을 처리하는 타이밍이 밀려 정상적으로 주행을 하지 못하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;20프레임 환경에서도 잘 돌아가도록 코드를 최적화하려 했지만,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이미 대회 제출 1시간 전이라 현실적으로 수정하기 어려운 상황이었고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;결국 YOLO 통합 버전은 포기하고 안정적으로 주행만 가능한 이전 버전 코드로 롤백하는 전략을 선택했다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;버전 관리 이슈&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;주행만 안정적으로 잘 되었던 버전으로 되돌리려고 했는데, 그때의 코드가 따로 남아 있지 않았다..&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그 버전을 커밋만 해두었어도 최소한 기본 주행은 문제없이 제출할 수 있었을 텐데,&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;color: #9d9d9d;&quot;&gt;초기 아키텍처가 잘 맞지 않아 급하게 방향을 바꾸는 과정에서 버전 관리를 제대로 하지 못했고, 결국 안정적인 버전으로 돌아갈 방법이 없어졌다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;372&quot; data-start=&quot;256&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&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;h3 data-ke-size=&quot;size23&quot;&gt;대회를 마치며&lt;/h3&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;개인적으로, 본선 기간이 조금만 더 길었으면 모든 팀이 훨씬 더 완성도 높은 결과물을 보여줄 수 있었을 텐데&amp;hellip; 아쉽다.&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;/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;AI나 로봇, 자율주행, 혹은 요즘 말하는 피지컬 AI에 관심이 있다면 이 대회는 좋은 기회라고 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&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;color: #000000;&quot;&gt;마지막으로, 본선에서 잘한 팀의 시연 영상을 첨부하며 글을 마친다. (&lt;a href=&quot;https://youtu.be/7Udi_ubFCkk?t=8336&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;링크&lt;/span&gt;&lt;/a&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;</description>
      <category>  기록</category>
      <category>2025</category>
      <category>MAICON</category>
      <category>국방AI경진대회</category>
      <category>마이콘</category>
      <author>Gliver</author>
      <guid isPermaLink="true">https://gliver.tistory.com/99</guid>
      <comments>https://gliver.tistory.com/99#entry99comment</comments>
      <pubDate>Tue, 25 Nov 2025 19:32:04 +0900</pubDate>
    </item>
    <item>
      <title>계수-퇴화차수 정리(Rank-Nullity Theorem) 증명</title>
      <link>https://gliver.tistory.com/98</link>
      <description>&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;안녕하세요 Gliver 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 글에서는, 계수-퇴화차수 정리(Rank-Nullity Theorem)를 증명해 보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;계수-퇴화차수 정리(Rank-Nullity Theorem)란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;계수-퇴화차수 정리는 아래와 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;행렬 $M \in \mathcal{M}_{m \times n}(F)$ 에 대하여 다음이 성립한다.&lt;br /&gt;&lt;/span&gt;$n = \mathrm{rank}M + \mathrm{nullity}M$&lt;/span&gt;&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$m$은 행렬의 행의 개수, $n$은 행렬의 열의 개수를 의미&lt;/li&gt;
&lt;li&gt;$\mathrm{rank} M$: 행렬 $M$의 계수를 의미&lt;/li&gt;
&lt;li&gt;$\mathrm{nullity} M$: 행렬 $M$의 영공간의 차원을 의미&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;행렬에 대해 정의되는 계수-퇴화차수 정리는 선형사상에 대해 정의되는 차원 정리와 대응된다. (&lt;u&gt;&lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://gliver.tistory.com/97&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;차원 정리 글 링크&lt;/a&gt;&lt;/u&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;왜냐하면, 행렬과 선형사상은 동일한 대수 구조이기 때문이라고 생각하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;행렬의 $n$ $\Leftrightarrow$ 선형사상의 $\dim(V)$&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;행렬의 $\mathrm{rank}M$ $\Leftrightarrow$ 선형사상의 $\dim(\mathrm{im} L)$&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;행렬의 $\mathrm{nullity}M$ $\Leftrightarrow$ 선형사상의 $\dim(\mathrm{ker} L)$&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;h3 data-ke-size=&quot;size23&quot;&gt;계수-퇴화차수 정리(Rank-Nullity Theorem) 증명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계수-퇴화차수 정리를 증명하기 전에, $\mathrm{col}$-$\mathrm{rank} M = \mathrm{row}$-$\mathrm{rank}M$ 을 증명하겠다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$\mathrm{col}$-$\mathrm{rank} M$: 행렬 $M$의 열공간 차원, 열벡터들이 생성하는 공간의 차원을 의미&lt;/li&gt;
&lt;li&gt;$\mathrm{row}$-$\mathrm{rank} M$: 행렬 $M$의 행공간 차원, 행벡터들이 생성하는 공간의 차원을 의미&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;$\mathrm{col}$-$\mathrm{rank} M = \mathrm{row}$-$\mathrm{rank}M$인 이유는 간단하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;행렬 $M$의 기약행 사다리꼴 형태의 행렬을 $A$라고 해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;행렬 $A$는 행렬 $M$에서 기본행 연산을 통해 만들어졌기 때문에 행렬 $M$의 성질을 그대로 유지하고 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$\mathrm{col}$-$\mathrm{rank} M = \mathrm{col}$-$\mathrm{rank} A$ 이 성립&lt;/li&gt;
&lt;li&gt;$\mathrm{row}$-$\mathrm{rank}&amp;nbsp;M&amp;nbsp;=&amp;nbsp;\mathrm{row}$-$\mathrm{rank}&amp;nbsp;A$&amp;nbsp;이&amp;nbsp;성립&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\mathrm{col}$-$\mathrm{rank}$와 $\mathrm{row}$-$\mathrm{rank}$의 정의를 생각해 보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 벡터들이 생성해 내는 공간의 차원이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서, 기약행 사다리꼴 형태의 행렬에서 벡터들이 생성해내는 공간의 차원은 선도 1의 개수와 관련이 있다.&lt;/p&gt;
&lt;p&gt;&lt;button class=&quot;btn btn-outline-secondary btn-sm&quot; type=&quot;button&quot; data-bs-toggle=&quot;collapse&quot; data-bs-target=&quot;#collapseExample1&quot; aria-expanded=&quot;false&quot; aria-controls=&quot;collapseExample&quot;&gt; 예시 &lt;/button&gt;&lt;/p&gt;
&lt;div id=&quot;collapseExample1&quot; class=&quot;collapse&quot;&gt;
&lt;div class=&quot;card card-body&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\begin{pmatrix}1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0\end{pmatrix}$&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;예를 들어, 위와 같이 $M_{3 \times 4}$ 행렬의 $\mathrm{col}$-$\mathrm{rank}$와 $\mathrm{row}$-$\mathrm{rank}$ 를 구해보자.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$\mathrm{col}$-$\mathrm{rank} M$은 열벡터들이 생성해 내는 공간의 차원이므로 3이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$\mathrm{row}$-$\mathrm{rank} M$은 행벡터들이 생성해 내는 공간의 차원이므로 3이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, $\mathrm{col}$-$\mathrm{rank}$와 $\mathrm{row}$-$\mathrm{rank}$ 모두 선도 1의 개수인 것이다.&lt;/span&gt;&lt;/p&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;span style=&quot;color: #000000;&quot;&gt;기약행 사다리꼴 형태는 대각 성분이 모두 1인 행렬이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, 그러한 상태에서는 $\mathrm{col}$-$\mathrm{rank} = \mathrm{row}$-$\mathrm{rank}$ 임을 직관적으로 쉽게 이해할 수 있을 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그리고, 어떤 행렬이든지 기약행 사다리꼴 형태로 만들 수 있으므로, $\mathrm{col}$-$\mathrm{rank} M = \mathrm{row}$-$\mathrm{rank}M$ 인 것이다.&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;color: #000000;&quot;&gt;$\mathrm{col}$-$\mathrm{rank} M = \mathrm{row}$-$\mathrm{rank}M$ 를 $\mathrm{rank} M$ 이라고 부르며, 이를 $M$의 계수라고 읽는다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;계수-퇴화차수&amp;nbsp;정리(Rank-Nullity&amp;nbsp;Theorem)&amp;nbsp;증명&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;계수-퇴화차수 정리는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;행렬 $M \in \mathcal{M}_{m \times n}(F)$ 에 대해서 $n = \mathrm{rank}M + \mathrm{nullity}M$ 이 성립함&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&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;color: #9d9d9d;&quot;&gt;기약행 사다리꼴 행렬에 대해서는 선도 1의 개수를 직관적으로 파악할 수 있어, 계수 $\mathrm{rank}$와 $\mathrm{nullity}$를 파악하기 쉽다.&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: #9d9d9d;&quot;&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;color: #000000;&quot;&gt;행렬 $M$의 기약행 사다리꼴 행렬을 $A$라고 하자.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$\mathrm{rank}M = k$ 라고 하면, &lt;span style=&quot;color: #ef5369;&quot;&gt;$\mathrm{rank} A = k$&lt;/span&gt; 이며, $A$의 선도 1의 개수 또한 $k$라고 할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, $A \mathbf{x} = \mathrm{0}$ 에서 자유 변수의 개수는 $n - k$ 이다.&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;color: #000000;&quot;&gt;$\mathrm{nullity}$ 는 영공간의 차원, 즉 $A \mathbf{x} = \mathrm{0}$ 을 만족시키는 $\mathrm{x}$가 만드는 공간의 차원을 의미한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그리고&amp;nbsp; $\mathrm{x}$가 만드는 공간의 차원은 행렬 $A$의 자유 변수의 개수이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, &lt;span style=&quot;color: #ef5369;&quot;&gt;$\mathrm{nullity} A = n - k$&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;$\mathrm{rank}M = \mathrm{rank}A, \mathrm{nullity}M = \mathrm{nullity}A$ 이므로,&amp;nbsp;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;$n = \mathrm{rank}M + \mathrm{nullity}M$ 이 성립한다.&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;</description>
      <category>  Math/Linear Algebra</category>
      <author>Gliver</author>
      <guid isPermaLink="true">https://gliver.tistory.com/98</guid>
      <comments>https://gliver.tistory.com/98#entry98comment</comments>
      <pubDate>Sat, 19 Oct 2024 13:27:03 +0900</pubDate>
    </item>
    <item>
      <title>차원 정리(Dimension Theorem) 증명</title>
      <link>https://gliver.tistory.com/97</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;안녕하세요 Gliver 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 글에서는, 차원 정리(dimension theorem)를 증명해 보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;차원 정리(Dimension Theorem)란?&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;차원 정리의 정의는 아래와 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000;&quot;&gt;유한차원 벡터공간 $V$와 선형사상 $L: V \rightarrow W$ 에 대하여 다음이 성립한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;$\dim(V) = \dim(\mathrm{ker} L) + \dim( \mathrm{im}L)$&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$\dim(V)$: 정의역 $V$의 차원을 의미&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$\dim(\mathrm{ker} L)$: 핵 $\mathrm{ker} L$의 차원을 의미&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$\dim(\mathrm{im} L)$: 상 $\mathrm{im} L$의 차원을 의미&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;간단하게, $\mathrm{ker} L$은 &lt;code style=&quot;color: #9d9d9d;&quot;&gt;0벡터가 나오게 하는 정의역 공간&lt;/code&gt;, $\mathrm{im} L$은 &lt;code style=&quot;color: #9d9d9d;&quot;&gt;치역 공간&lt;/code&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;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, 차원 정리가 의미하는 것은 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;정의역의 차원은 치역의 차원과 핵의 차원의 합과 같다&lt;/span&gt;는 것이다.&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;400&quot; data-origin-height=&quot;0&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Rank%E2%80%93nullity_theorem&quot; target=&quot;_blank&quot; title=&quot;출처: 위키백과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJFfQh/btsJ297q7kp/WmlE2JTRC60KDkNvKKn7a0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJFfQh%2FbtsJ297q7kp%2FWmlE2JTRC60KDkNvKKn7a0%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;500&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;출처: 위키백과&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;&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;span style=&quot;color: #000000;&quot;&gt;차원 정리(Dimension Theorem) 증명&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;차원 정리의 식을 바꿔보면, $\dim(V) - \dim(\mathrm{ker} L) = \dim(\mathrm{im} L)$ 로 표현할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이게 의미하는 것은 정의역 차원 $\dim(V)$에서 0벡터로 사상되는 차원 $\dim(\mathrm{ker} L)$을 빼면 치역의 차원 $\dim(\mathrm{ker} L)$이 된다는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;$V \setminus (\mathrm{ker} L)$의 차원과 치역 공간의 차원이 같다는 것을 증명하면 된다.&lt;/span&gt; (아래의 prop2에 해당하는 내용)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;($V \setminus (\mathrm{ker} L)$은 정의역 공간 중 핵 $\mathrm{ker} L$을 제외한 공간을 의미)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;정확하게는,&amp;nbsp; $V \setminus (\mathrm{ker} L)$ 이 사상하는 공역 공간이 치역 공간 $\mathrm{im} L$이라는 것도 증명해야 한다. (아래의 prop1에 해당하는 내용)&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;&lt;span style=&quot;color: #000000;&quot;&gt;$B_{V} = \{ v_1, v_2, \cdots, v_k, v_{k+1} \cdots, v_n \}$ 이라고 하면, $\mathrm{ker}L \subset V$ 이므로 $B_{\mathrm{ker} L} = \{ v_1, v_2, \cdots, v_k \}$ 라고 할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이제, 우리는 $B_{\mathrm{im}L} = \{L(v_{k+1}), L(v_{k+2}), \cdots, L(v_n) \}$ 임을 증명하면 된다.&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;$B_{\mathrm{im}L} = \{L(v_{k+1}), L(v_{k+2}), \cdots, L(v_n) \}$ 임을 증명하려면 아래와 같은 2가지 명제가 참임을 증명해야 한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;prop1. $\{L(v_{k+1}), L(v_{k+2}), \cdots, L(v_n) \}$이 $\mathrm{im}L$을 생성(span)한다.&lt;/li&gt;
&lt;li&gt;prop2. $L(v_{k+1}), L(v_{k+2}), \cdots, L(v_n)$이 서로 선형독립이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;prop1.&amp;nbsp;$\{L(v_{k+1}),&amp;nbsp;L(v_{k+2}),&amp;nbsp;\cdots,&amp;nbsp;L(v_n)&amp;nbsp;\}$이&amp;nbsp;$\mathrm{im}L$을&amp;nbsp;생성(span)한다.&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$\forall L(v) \in \mathrm{im}L$ 이며, $v = c_1v_1 + \cdots + c_kv_k + c_{k+1}v_{k+1} + \cdots + c_nv_n$ 라고 할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, $L(v) = L(c_1v_1 + \cdots + c_kv_k + c_{k+1}v_{k+1} + \cdots + c_nv_n)$ 이다.&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;color: #000000;&quot;&gt;선형사상의 Additivity에 의해, $L(v) = L(c_1v_1 + \cdots + c_kv_k) + L(c_{k+1}v_{k+1} + \cdots + c_nv_n)$ 로 나타낼 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot; data-token-index=&quot;0&quot;&gt;$L(c_1v_1 + \cdots + c_kv_k) = \vec{0}$ 이므로, $L(v) = L(c_{k+1}v_{k+1} + \cdots + c_nv_n)$ 이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;$L(c_1v_1 + \cdots + c_kv_k) = \vec{0}$ 인 이유는 $B_{\mathrm{ker} L} = \{ v_1, v_2, \cdots, v_k \}$ 이기 때문&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위의 식을 선형사상의 Additivity와 Homogeneity에 의해서 다음과 같이 정리할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$L(v) = c_{k+1}L(v_{k+1})&amp;nbsp;+&amp;nbsp;\cdots&amp;nbsp;+&amp;nbsp;c_nL(v_n)$&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 식이 의미하는 것은 치역 공간에 속하는 임의의 벡터 $L(v)$를 $L(v_{k+1}), L(v_{k+2}), \cdots, L(v_n)$ 의 선형결합으로 나타낼 수 있다는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, &lt;span style=&quot;color: #ef5369;&quot;&gt;$\{L(v_{k+1}), L(v_{k+2}), \cdots, L(v_n) \}$이 $\mathrm{im}L$ 을 생성(span)한다고 할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;prop2.&amp;nbsp;$L(v_{k+1}),&amp;nbsp;L(v_{k+2}),&amp;nbsp;\cdots,&amp;nbsp;L(v_n)$이&amp;nbsp;서로&amp;nbsp;선형독립이다.&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$L(v_{k+1}), L(v_{k+2}), \cdots, L(v_n)$ 이 서로 선형독립이라는 것을 증명하는 것은&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; background-color: #f6e199;&quot;&gt;$c_{k+1}L(v_{k+1}) + \cdots + c_nL(v_n) = \vec{0}$ 의 유일한 해가&amp;nbsp; $c_{k+1} = c_{k+2} = \cdots = c_n = 0$ 임을 보이면 된다.&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;color: #000000;&quot;&gt;$c_{k+1}L(v_{k+1}) + \cdots + c_nL(v_n) = \vec{0}$ 식은 아래와 같은 과정을 거칠 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$c_{k+1}L(v_{k+1}) + \cdots + c_nL(v_n) = \vec{0}$&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$L(c_{k+1}v_{k+1} + \cdots c_nv_n) = \vec{0}$&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$L(c_{k+1}v_{k+1} + \cdots c_nv_n) = \vec{0}$ 이므로, $c_{k+1}v_{k+1} + \cdots c_nv_n \in \mathrm{ker}L$ 이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서 커널의 원소인 $c_{k+1}v_{k+1} + \cdots c_nv_n$ 은 $B_{\mathrm{ker}L}$ 의 선형결합으로 표현 가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$c_{k+1}v_{k+1} + \cdots c_nv_n = c_1v_1 + \cdots + c_kv_k$&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$c_1v_1&amp;nbsp;+&amp;nbsp;\cdots&amp;nbsp;+c_kv_k&amp;nbsp;-&amp;nbsp;c_{k+1}v_{k+1}&amp;nbsp;-&amp;nbsp;\cdots&amp;nbsp;-&amp;nbsp;c_nv_n&amp;nbsp;=&amp;nbsp;\vec{0}$&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$B_V = \{v_1, \cdots, v_n\}$ 이다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, 위 식을 만족하는 $c_1, \cdots, c_k, -c_{k+1}, \cdots, -c_n$ 은 $c_1 = \cdots = c_k = -c_{k+1} = \cdots = -c_n = 0$ 이 유일하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, $c_{k+1}L(v_{k+1}) + \cdots + c_nL(v_n) = \vec{0}$ 이기 위한 유일한 해가 $c_{k+1} = c_{k+2} = \cdots = c_n = 0$ 임이 유일한 것이다.&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;color: #000000;&quot;&gt;그러므로, &lt;span style=&quot;color: #ef5369;&quot;&gt;$L(v_{k+1}), L(v_{k+2}), \cdots, L(v_n)$은 서로 선형독립이라고 할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;prop1, prop2가 참이므로,,&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;prop1, prop2 가 참이므로, $B_{\mathrm{im}L} = \{L(v_{k+1}), L(v_{k+2}), \cdots, L(v_n) \}$ 이 참이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, &lt;span style=&quot;text-align: start;&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;$\dim(V) - \dim(\mathrm{ker} L) = \dim(\mathrm{im} L)$이 참이라고 할 수 있다.&lt;/span&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;</description>
      <category>  Math/Linear Algebra</category>
      <author>Gliver</author>
      <guid isPermaLink="true">https://gliver.tistory.com/97</guid>
      <comments>https://gliver.tistory.com/97#entry97comment</comments>
      <pubDate>Mon, 14 Oct 2024 19:06:41 +0900</pubDate>
    </item>
    <item>
      <title>스칼라 곱(내적) 공식 증명</title>
      <link>https://gliver.tistory.com/96</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;안녕하세요 Gliver 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 글에서는, 스칼라 곱(내적) 공식 $\mathbf{v}&amp;nbsp;\cdot&amp;nbsp;\mathbf{w}&amp;nbsp;=&amp;nbsp;v_1w_1&amp;nbsp;+&amp;nbsp;v_2w_2&amp;nbsp;+&amp;nbsp;\cdots&amp;nbsp;+&amp;nbsp;v_nw_n$ 을 증명해 보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스칼라 곱(내적)이란?&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;b&gt;스칼라 곱(scalar product)은&lt;/b&gt;&amp;nbsp;&lt;b&gt;내적(inner product)&lt;/b&gt; 또는 &lt;b&gt;점곱(dot product)&lt;/b&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;color: #000000;&quot;&gt; 스칼라 곱(scalar product)은 &lt;u&gt;유클리드 공간의 두 벡터로부터 실수 스칼라를 얻는 연산&lt;/u&gt;이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;간단히 말하면, 두 벡터에 더해 정의되는 연산이며 그 결과로 실수가 나온다는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스칼라 곱(scalar product)&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스칼라 곱의 기호는 $\cdot$ 이며, 스칼라 곱은 아래와 같은 식으로 정의된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$\mathbf{v} \cdot \mathbf{w} = \|&amp;nbsp;\mathbf{v}&amp;nbsp;\|&amp;nbsp;\|&amp;nbsp;\mathbf{w}&amp;nbsp;\|&amp;nbsp;\cos&amp;nbsp;\theta$&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(여기서 $\theta$는 두 벡터 $\mathbf{v}$와 $\mathbf{w}$가 이루는 각을 의미)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;$\mathbf{v} \cdot \mathbf{w} = v_1w_1$ $ + $ $ v_2w_2 $ $ + $ $ \cdots + v_nw_n$ 증명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$\mathbf{v}&amp;nbsp;\cdot&amp;nbsp;\mathbf{w}&amp;nbsp;=&amp;nbsp;v_1w_1&amp;nbsp;+&amp;nbsp;v_2w_2&amp;nbsp;+&amp;nbsp;\cdots&amp;nbsp;+&amp;nbsp;v_nw_n$&amp;nbsp;를 증명하기 위해서는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;제2코사인 법칙을 알아야 한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;제2코사인 법칙을 증명하기 위해선, 제1코사인 법칙을 알아야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;제1코사인 법칙&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;제1코사인 법칙은 간단하다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;605&quot; data-origin-height=&quot;384&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YuuYI/btsJ3gyeiPi/itQVxtwjlfY6YezKDCQgrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YuuYI/btsJ3gyeiPi/itQVxtwjlfY6YezKDCQgrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YuuYI/btsJ3gyeiPi/itQVxtwjlfY6YezKDCQgrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYuuYI%2FbtsJ3gyeiPi%2FitQVxtwjlfY6YezKDCQgrK%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;400&quot; height=&quot;254&quot; data-origin-width=&quot;605&quot; data-origin-height=&quot;384&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위와 같은 삼각형에 대해 &lt;span style=&quot;color: #ef5369;&quot;&gt;$a = c \cdot \cos B + b \cdot \cos C$&lt;/span&gt; 가 성립한다는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;제2코사인 법칙&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;629&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r1eZQ/btsJ4NBqoIA/lmKEl4psPUGg125Nemh9Lk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r1eZQ/btsJ4NBqoIA/lmKEl4psPUGg125Nemh9Lk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r1eZQ/btsJ4NBqoIA/lmKEl4psPUGg125Nemh9Lk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr1eZQ%2FbtsJ4NBqoIA%2FlmKEl4psPUGg125Nemh9Lk%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;400&quot; height=&quot;249&quot; data-origin-width=&quot;629&quot; data-origin-height=&quot;392&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위와 같은 삼각형이 있을 때, 제1코사인 법칙에 근거하여 다음이 성립한다.&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$a = b \cdot \cos C + c \cdot \cos B$&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$b = a \cdot \cos C + c \cdot \cos A$&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$c = a \cdot \cos B + b \cdot \cos A$&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1번 식과 2번 식에 대하여, 1번 식에 $a$를 곱하고 2번 식에 $b$를 곱하면 각 식은 아래와 같이 변한다.&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$a^2 = ab \cdot \cos C + ac \cdot \cos B$&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$b^2 = ab \cdot \cos C + bc \cdot \cos A$&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그리고, 이 두 식을 더하면 아래와 같은 식이 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$a^2 + b^2 = 2ab \cdot \cos C + c \cdot (a \cdot \cos B + b \cdot \cos A)$&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;3번 식에 근거하여, $(a \cdot \cos B + b \cdot \cos A) = c$ 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서, $a^2 + b^2 = 2ab \cdot \cos C + c^2$ 이므로 다음이 성립한다. (제2코사인 법칙)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;$c^2 = a^2 + b^2 - 2ab \cdot \cos C$&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$\mathbf{v}&amp;nbsp;\cdot&amp;nbsp;\mathbf{w}&amp;nbsp;=&amp;nbsp;v_1w_1&amp;nbsp;+&amp;nbsp;v_2w_2&amp;nbsp;+&amp;nbsp;\cdots&amp;nbsp;+&amp;nbsp;v_nw_n$&amp;nbsp;증명&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이제, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;제2코사인 법칙을 이용해서 $\mathbf{v}&amp;nbsp;\cdot&amp;nbsp;\mathbf{w}&amp;nbsp;=&amp;nbsp;v_1w_1&amp;nbsp;+&amp;nbsp;v_2w_2&amp;nbsp;+&amp;nbsp;\cdots&amp;nbsp;+&amp;nbsp;v_nw_n$ 을 증명해 보자.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;463&quot; data-origin-height=&quot;359&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9GZx1/btsJ3bcXj8u/Sz3W3F4WCvHEKRULNJ4Qo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9GZx1/btsJ3bcXj8u/Sz3W3F4WCvHEKRULNJ4Qo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9GZx1/btsJ3bcXj8u/Sz3W3F4WCvHEKRULNJ4Qo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9GZx1%2FbtsJ3bcXj8u%2FSz3W3F4WCvHEKRULNJ4Qo1%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;350&quot; height=&quot;271&quot; data-origin-width=&quot;463&quot; data-origin-height=&quot;359&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;&lt;span style=&quot;color: #000000;&quot;&gt;제2코사인 법칙에 근거하여, $\|\mathbf{x}\|^2 = \|\mathbf{v}\|^2 + \|\mathbf{w}\|^2 - 2 \cdot \|\mathbf{v}\| \|\mathbf{w}\| \cdot \cos \theta$ 이 성립한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$\mathbf{x} = \mathbf{v} - \mathbf{w}, \ \|\mathbf{v}\| \|\mathbf{w}\| \cdot \cos \theta = \mathbf{v} \cdot \mathbf{w}$ 이므로 아래와 같이 식을 변환할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$\|\mathbf{v}&amp;nbsp;-&amp;nbsp;\mathbf{w}\|^2&amp;nbsp;=&amp;nbsp;\|\mathbf{v}\|^2&amp;nbsp;+&amp;nbsp;\|\mathbf{w}\|^2&amp;nbsp;-&amp;nbsp;2&amp;nbsp;\cdot&amp;nbsp;\mathbf{v}&amp;nbsp;\cdot&amp;nbsp;\mathbf{w}$&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;color: #000000;&quot;&gt;위의 식을 정리하면, 아래와 같은 과정을 거치게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$\mathbf{v}&amp;nbsp;\cdot&amp;nbsp;\mathbf{w}&amp;nbsp;=&amp;nbsp;\frac{1}{2}\{&amp;nbsp;\|&amp;nbsp;\mathbf{v}&amp;nbsp;\|^2&amp;nbsp;+&amp;nbsp;\|&amp;nbsp;\mathbf{w}&amp;nbsp;\|^2&amp;nbsp;-&amp;nbsp;\|&amp;nbsp;\mathbf{v}&amp;nbsp;-&amp;nbsp;\mathbf{w}&amp;nbsp;\|^2&amp;nbsp;\}$&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$= \frac{1}{2} \{ ({v_1}^2&amp;nbsp; + \cdots + {v_n}^2) + ({w_1}^2 + \cdots + {w_n}^2) \ -(v_1 - w_1)^2&amp;nbsp; - \cdots -(v_n - w_n)^2&amp;nbsp;&amp;nbsp;&amp;nbsp;\}$&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;= $\frac{1}{2} ( 2v_1w_1 + \cdots + 2v_nw_n )$&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$= v_1w_1&amp;nbsp;+&amp;nbsp;v_2w_2&amp;nbsp;+&amp;nbsp;\cdots&amp;nbsp;+&amp;nbsp;v_nw_n$&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, &lt;span style=&quot;color: #ef5369;&quot;&gt;$\mathbf{v} \cdot \mathbf{w} = v_1w_1 + v_2w_2 + \cdots + v_nw_n$ 이 성립한다.&lt;/span&gt; 증명 끝.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>  Math/Linear Algebra</category>
      <author>Gliver</author>
      <guid isPermaLink="true">https://gliver.tistory.com/96</guid>
      <comments>https://gliver.tistory.com/96#entry96comment</comments>
      <pubDate>Sun, 13 Oct 2024 14:10:15 +0900</pubDate>
    </item>
    <item>
      <title>크래머 공식(Cramer's Rule) 증명</title>
      <link>https://gliver.tistory.com/95</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;안녕하세요 Gliver 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 글에서는, 크래머 공식(Cramer's Rule)을 증명해 보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;크래머 공식&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;(Cramer's Rule)&lt;/span&gt; 이란?&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;크래머 공식(Cramer's Rule)을 간단히 말하면, 아래와 같은 선형 방정식 $A \mathbf{x} = \mathbf{b}$의 해 $\mathbf{x}$를 구하는 공식이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;$\begin{pmatrix}a_{11}&amp;nbsp;&amp;amp;&amp;nbsp;a_{12}&amp;nbsp;&amp;amp;&amp;nbsp;\cdots&amp;nbsp;&amp;amp;&amp;nbsp;a_{1n}&amp;nbsp;\\a_{21}&amp;nbsp;&amp;amp;&amp;nbsp;a_{22}&amp;nbsp;&amp;amp;&amp;nbsp;\cdots&amp;nbsp;&amp;amp;&amp;nbsp;a_{2n}&amp;nbsp;\\&lt;br /&gt;\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots \\a_{n1} &amp;amp; a_{n2} &amp;amp; \cdots &amp;amp; a_{nn}\end{pmatrix} \begin{pmatrix}x_1 \\x_2 \\\vdots \\x_n\end{pmatrix} =&amp;nbsp;\begin{pmatrix}b_1&amp;nbsp;\\b_2&amp;nbsp;\\\vdots&amp;nbsp;\\b_n\end{pmatrix}$&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;color: #9d9d9d;&quot;&gt;정확히 말하면, &lt;u&gt;미지수의 수와 방정식의 수가 같은 선형 방정식에 한해서만 사용 가능&lt;/u&gt;하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;크래머 공식&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;크래머 공식은 선형 방정식의 해 $\mathbf{x}$의 $i$번째 원소 $x_i$를 아래와 같이 구할 수 있는 공식이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$\large{x_i = \frac{\det(A_i)}{\det(A)}}$&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;$A_i$는 계수행렬 $A$의 $i$열 성분을 행렬 $\mathbf{b} = \begin{pmatrix}b1 \\ \vdots \\b_n \end{pmatrix}$ 로 바꾼 행렬을 의미한다.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;$A_i = \begin{pmatrix}a_{11}&amp;nbsp;&amp;amp;&amp;nbsp;a_{12}&amp;nbsp;&amp;amp;&amp;nbsp;\cdots&amp;nbsp;&amp;amp;&amp;nbsp;b_1&amp;nbsp;&amp;amp;&amp;nbsp;\cdots&amp;nbsp;&amp;amp;&amp;nbsp;a_{1n}&amp;nbsp;\\a_{21}&amp;nbsp;&amp;amp;&amp;nbsp;a_{22}&amp;nbsp;&amp;amp;&amp;nbsp;\cdots&amp;nbsp;&amp;amp;&amp;nbsp;b_2&amp;nbsp;&amp;amp;&amp;nbsp;\cdots&amp;nbsp;&amp;amp;&amp;nbsp;a_{2n}&amp;nbsp;\\\vdots&amp;nbsp;&amp;amp;&amp;nbsp;\vdots&amp;nbsp;&amp;amp;&amp;nbsp;\ddots&amp;nbsp;&amp;amp;&amp;nbsp;\vdots&amp;nbsp;&amp;amp;&amp;nbsp;\ddots&amp;nbsp;&amp;amp;&amp;nbsp;\vdots&amp;nbsp;\\a_{n1}&amp;nbsp;&amp;amp;&amp;nbsp;a_{n2}&amp;nbsp;&amp;amp;&amp;nbsp;\cdots&amp;nbsp;&amp;amp;&amp;nbsp;b_n&amp;nbsp;&amp;amp;&amp;nbsp;\cdots&amp;nbsp;&amp;amp;&amp;nbsp;a_{nn}\end{pmatrix}$&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;크래머 공식을 사용하는 이유&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;크래머 공식은 선형 방정식의 해를 구할 수 있는 공식이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그런데, 크래머 공식을 쓰지 않고도 &lt;b&gt;가우스 소거법&lt;/b&gt;이나 &lt;b&gt;역행렬&lt;/b&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;color: #000000;&quot;&gt;선형 방정식의 해 $\mathbf{x}$의 모든 원소($x_1, x_2, \cdots, x_n$)를 구해야 한다면 크래머 공식은 그다지 좋은 선택지가 아닐 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만, 선형 방정식의 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;해 $\mathbf{x}$의 특정한 원소 $x_i$ 하나만을 구하는 상황이라면 크래머 공식은 좋은 선택지&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;color: #9d9d9d;&quot;&gt; 특정한 원소 $x_i$ 하나만을 구하는 상황일 때 크래머 공식을 사용하면 좋은 이유는 식을 보면 쉽게 이해할 수 있을 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;크래머 공식 자체가 선형 방정식 해 $\mathbf{x}$의 특정한 원소 ($i$번째 원소) $x_i$에 대해 정의되기 때문이다.&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;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;크래머 공식&lt;span style=&quot;text-align: start;&quot;&gt;(Cramer's Rule)&lt;/span&gt;&amp;nbsp;증명&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;크래머 공식(Cramer's Rule)은 역행렬을 이용하면 쉽게 증명할 수 있다.&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;color: #000000;&quot;&gt;크래머 공식의 식을 보면 쉽게 알 수 있는 사실은 $\det(A) \neq 0$ 이라는 점이다. (분모는 0이 될 수 없으므로)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, 크래머 공식을 쓸 수 있는 환경은 $\det(A) \neq 0$ 이므로 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;$A$의 역행렬 또한 존재하는 상황인 것은 자명&lt;/span&gt;하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;사실, 선형 방정식의 해가 존재하려면 $\det(A) \neq 0$ 을 만족해야 하므로 역행렬이 존재해야 하는 것은 당연하다.&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;color: #000000;&quot;&gt;$A$의 역행렬이 존재하므로 &lt;span style=&quot;text-align: start;&quot;&gt;$A \mathbf{x} = \mathbf{b}$ 에서 양변의 앞에 $A^{-1}$를 곱할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$A^{-1}&amp;nbsp;\cdot&amp;nbsp;A&amp;nbsp;\cdot&amp;nbsp;\mathbf{x}&amp;nbsp;=&amp;nbsp;A^{-1}&amp;nbsp;\cdot&amp;nbsp;\mathbf{b}$&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$\Rightarrow I_n \cdot&amp;nbsp;&amp;nbsp;\mathbf{x} = A^{-1} \cdot&amp;nbsp;&amp;nbsp;\mathbf{b}$&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;$\Rightarrow \mathbf{x} = A^{-1} \cdot \mathbf{b}$&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$I_n$은 크기가 $n \times n$ 인 단위행렬을 의미한다.&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;&lt;span style=&quot;color: #000000;&quot;&gt;$\mathbf{x} = A^{-1} \cdot \mathbf{b}$ 이므로, 이제, &lt;span style=&quot;color: #ef5369;&quot;&gt;식 $A^{-1} \cdot \mathbf{b}$ 을 행렬 형태로 표현하여 $\mathbf{x}$ 의 각 원소와 어떤 관계를 갖는지 파악&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;color: #000000;&quot;&gt;역행렬의 정의에 따라서 $A^{-1} = \frac{1}{\det(A)} \cdot \text{adj}(A)$ 로 나타낼 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, $\mathbf{x} = A^{-1} \cdot \mathbf{b} = \frac{1}{\det(A)} \cdot \text{adj}(A) \cdot \mathbf{b}$&lt;span style=&quot;text-align: start;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;을 만족한다.&lt;/span&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;color: #9d9d9d;&quot;&gt;$\text{adj}(A)$는 여인수 행렬 $C$ 를 전치시킨 행렬이므로 아래와 같은 형태의 행렬이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;$\text{adj}(A) = \begin{pmatrix}C_{11} &amp;amp; C_{21} &amp;amp; \cdots &amp;amp; C_{n1} \\C_{12} &amp;amp; C_{22} &amp;amp; \cdots &amp;amp; C_{n2} \\ \vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots \\ C_{1n} &amp;amp; C_{2n} &amp;amp; \cdots &amp;amp; C_{nn} \end{pmatrix}$&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;&lt;span style=&quot;color: #000000;&quot;&gt;$\mathbf{x} = \frac{1}{\det(A)} \cdot \text{adj}(A) \cdot \mathbf{b}$ 식을 행렬로 표현하면 아래와 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$\begin{pmatrix} x_1 \\ x_2 \\ \vdots \\ x_i \\ \vdots \\ x_n \end{pmatrix} = \large{ \frac{1}{\det(A)} } \normalsize{ \cdot \begin{pmatrix} C_{11} &amp;amp; C_{21} &amp;amp; \cdots &amp;amp; C_{n1} \\C_{12} &amp;amp; C_{22} &amp;amp; \cdots &amp;amp; C_{n2} \\ \vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots \\ C_{1i} &amp;amp; C_{2i} &amp;amp; \cdots &amp;amp; C_{ni} \\ \vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots \\ C_{1n} &amp;amp; C_{2n} &amp;amp; \cdots &amp;amp; C_{nn} \end{pmatrix}&amp;nbsp;&amp;nbsp;\begin{pmatrix} b_1 \\ b_2 \\ \vdots \\ \vdots \\&amp;nbsp;\vdots &amp;nbsp;\\ b_n \end{pmatrix} }$&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;color: #000000;&quot;&gt;따라서, $x_i&amp;nbsp;=&amp;nbsp;\frac{1}{\det(A)}&amp;nbsp;\cdot&amp;nbsp;(b_1&amp;nbsp;\cdot&amp;nbsp;C_{1i}&amp;nbsp;+&amp;nbsp;b_2&amp;nbsp;\cdot&amp;nbsp;C_{2i}&amp;nbsp;+&amp;nbsp;\cdots&amp;nbsp;+&amp;nbsp;b_n&amp;nbsp;\cdot&amp;nbsp;C_{ni}&amp;nbsp;)$ 를 만족한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그리고, $\det(A_i) = (b_1 \cdot C_{1i} + b_2 \cdot C_{2i} + \cdots + b_n \cdot C_{ni})$ 이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그러므로,&lt;/span&gt; &lt;span style=&quot;color: #ef5369;&quot;&gt;$x_i = \large{\frac{\det(A_i)}{\det(A)}}$ 이 성립한다.&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&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;</description>
      <category>  Math/Linear Algebra</category>
      <author>Gliver</author>
      <guid isPermaLink="true">https://gliver.tistory.com/95</guid>
      <comments>https://gliver.tistory.com/95#entry95comment</comments>
      <pubDate>Sun, 13 Oct 2024 12:34:37 +0900</pubDate>
    </item>
    <item>
      <title>역행렬 곱셈 교환 법칙 증명</title>
      <link>https://gliver.tistory.com/94</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;안녕하세요 Gliver 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 글에서는, 역행렬의 성질에서 $A \cdot A^{-1} = A^{-1} \cdot A$ 임을 (곱셈의 교환 법칙을) 증명해 보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 증명을 다른 말로 하면, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;$A$의 역함수가 $B$라면 $B$의 역함수 또한 $A$라는 것을 증명하는 것&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;$A \cdot A^{-1} = A^{-1} \cdot A$&lt;/span&gt; &amp;nbsp;증명&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$A \cdot B = I$일 때, $B \cdot A = I$ 임을 증명하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;$A \cdot A^{-1} = I$이므로 $A \cdot B = I$라면 $B = A^{-1}$라는 의미를 내포하고 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$A \cdot B = I$&amp;nbsp; &amp;nbsp;$\cdots$&amp;nbsp; &amp;nbsp;양변의 앞뒤에 &lt;span style=&quot;color: #ef5369;&quot;&gt;$B$&lt;/span&gt;와 &lt;span style=&quot;color: #ef5369;&quot;&gt;$B^{-1}$&lt;/span&gt;를 곱한다.&amp;nbsp; &amp;nbsp; $\Rightarrow$&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #ef5369;&quot;&gt;$ B \ $&lt;/span&gt;$\cdot \ A \cdot B \ \cdot $&lt;span style=&quot;color: #ef5369;&quot;&gt;$ \ B^{-1}$&lt;/span&gt;$ = $&lt;span style=&quot;color: #ef5369;&quot;&gt;$B \ $&lt;/span&gt;$ \cdot \ I \ \cdot $&lt;span style=&quot;color: #ef5369;&quot;&gt;$\ B^{-1}$&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$B \cdot A \cdot \ $&lt;span style=&quot;color: #0593d3;&quot;&gt;$ B \cdot B^{-1} \ $&lt;/span&gt;$ = B \cdot I \cdot B^{-1}$ &amp;nbsp; &amp;nbsp;$\cdots$&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0593d3;&quot;&gt;$B \cdot B^{-1} = I$ &lt;/span&gt;이다.&amp;nbsp; &amp;nbsp; $\Rightarrow$&amp;nbsp; &amp;nbsp; $B \cdot A = B \cdot I \cdot B^{-1}$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$B \cdot A = $&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;$ \ B \cdot I \cdot B^{-1}$&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &amp;nbsp; &amp;nbsp;$\cdots$&amp;nbsp; &amp;nbsp;&lt;/span&gt; &lt;/span&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;$ B \cdot I \cdot B^{-1} = I$ &lt;/span&gt;이다.&amp;nbsp; &amp;nbsp; $\Rightarrow$&amp;nbsp; &amp;nbsp; $B \cdot A =$$ I$&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, $B \cdot A = I$이므로 $A \cdot A^{-1} = A^{-1} \cdot A = I$ 임을 만족한다.&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;</description>
      <category>  Math/Linear Algebra</category>
      <author>Gliver</author>
      <guid isPermaLink="true">https://gliver.tistory.com/94</guid>
      <comments>https://gliver.tistory.com/94#entry94comment</comments>
      <pubDate>Sun, 29 Sep 2024 18:22:55 +0900</pubDate>
    </item>
    <item>
      <title>물리에서의 벡터 vs 수학에서의 벡터</title>
      <link>https://gliver.tistory.com/93</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;안녕하세요 Gliver 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 글에서는, 물리에서의 벡터와 수학에서의 벡터는 무엇인지, 어떤 차이가 있는지 알아보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;%EB%AA%A-%EC%B-%A-&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;목차&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;물리에서의 벡터&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;수학에서의 벡터&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;물리에서의 벡터&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;물리(학)에서 벡터의 정의는 &lt;b&gt;크기와 방향을 모두 갖는 것(객체)&lt;/b&gt;을 의미한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;벡터는 크기와 방향이라는 속성은 존재하지만, 위치라는 속성은 존재하지 않는다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&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;color: #000000;&quot;&gt;물리학에서 이러한 벡터는 힘, 속도, 가속도, 전기장, 자기장 등 &lt;b&gt;물리적 현상을 설명하는 데 주로 사용&lt;/b&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;수학에서의 벡터&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;수학에서의 벡터 또한 물리에서의 벡터와 마찬가지로 크기와 방향을 갖는 객체로 쓰이기도 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만 이는 벡터를 확대하여 해석한 것이며, 벡터의 정확한 정의는 &lt;b&gt;벡터 공간(vector space)의 요소&lt;/b&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;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;벡터 공간 (vector space)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;수학에서의 벡터를 이해하기 위해선 벡터 공간이라는 것을 먼저 이해해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;벡터 공간에 대해 설명하기 이전에 &lt;b&gt;공간(space)&lt;/b&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;color: #000000;&quot;&gt;수학에서 &lt;b&gt;공간(space)&lt;/b&gt;은 3가지를 담고 있는 구조라고 생각하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다루려는 &lt;span style=&quot;color: #006dd7;&quot;&gt;객체 집합&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;객체 집합에 &lt;span style=&quot;color: #006dd7;&quot;&gt;부여된 연산(들)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;객체와 연산에 &lt;span style=&quot;color: #006dd7;&quot;&gt;부여된 조건/공리(들)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;사실, 위에서 설명한 공간(space)의 정의는 대수구조(Algebraic Structure)에 대한 정의입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;하지만, 벡터 공간(vector space)은 대수구조로 해석할 수 있으며 대수구조로 벡터 공간을 이해하는 것이 쉽다고 생각하여 이렇게 작성하였습니다.&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;color: #9d9d9d;&quot;&gt;정확한 공간(space)의 정의는 위상 공간(topological space)을 의미하므로 궁금하신 분들은 관련 내용을 찾아 보시면 좋을 것 같습니다.&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;즉, 벡터 공간은 &lt;b&gt;벡터라는 객체&lt;/b&gt;를 다루고, &lt;b&gt;벡터라는 객체에 부여된 연산들&lt;/b&gt;과 &lt;b&gt;여러 가지 공리들&lt;/b&gt;이 정의된 구조인 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정확한 벡터 공간(vector space)의 정의는 체 $F$에 대한 가군 $(V, +, \cdot)$으로 아래와 같은 수학적인 정의를 따른다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;610&quot; data-origin-height=&quot;493&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oC9bP/btsJPRyse1F/ywjK3kAwgmSkBHAahWCo6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oC9bP/btsJPRyse1F/ywjK3kAwgmSkBHAahWCo6k/img.png&quot; data-alt=&quot;벡터 공간(vector space)의 정의&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oC9bP/btsJPRyse1F/ywjK3kAwgmSkBHAahWCo6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoC9bP%2FbtsJPRyse1F%2FywjK3kAwgmSkBHAahWCo6k%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;400&quot; height=&quot;323&quot; data-origin-width=&quot;610&quot; data-origin-height=&quot;493&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;벡터 공간(vector space)의 정의&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;벡터 공간(vector space)의 정확한 정의는 위의 그림과 같지만, (수학을 전공하지 않았다면) 위를 정확히 이해하기 힘들 수 있다.&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;
&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;color: #9d9d9d;&quot;&gt;우리가 흔히 알고 있는 수들의 나열로 표현되는 벡터라는 것을 생각해 보자.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;벡터 간의 덧셈과 벡터의 스칼라(실수)배를 자연스럽게 쓰고 있지 않은가?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;또한, 벡터로 이루어진 식에서 교환법칙을 쓰고, 결합법칙을 사용하고 있지 않은가?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;즉, &lt;u&gt;우리가 사용하고 있던 벡터라는 것은 수학에서의 벡터 공간의 정의를 이미 만족&lt;/u&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정리&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;물리학에서 벡터는 &lt;b&gt;크기와 방향을 모두 갖는 것(객체)&lt;/b&gt;을 의미하며, 수학에서의 벡터는 &lt;b&gt;벡터 공간(vector space)의 요소&lt;/b&gt;를 의미한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;물리학에서 다루는 벡터 또한 수학에서의 벡터에 포함되는 개념이라고 할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;물리학에서 벡터에 정의된 연산들과 공리들이 수학에서 벡터 공간(vector space)의 조건/공리들을 만족하고 있다는 의미이다.&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;color: #000000;&quot;&gt;정리하면, 수학에서의 벡터는 더 일반적이고 추상적인 개념으로 쓰이며 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&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;</description>
      <category>  Math/Linear Algebra</category>
      <author>Gliver</author>
      <guid isPermaLink="true">https://gliver.tistory.com/93</guid>
      <comments>https://gliver.tistory.com/93#entry93comment</comments>
      <pubDate>Sun, 29 Sep 2024 12:22:29 +0900</pubDate>
    </item>
    <item>
      <title>선형대수학이라는 학문에 대해서 (with AI)</title>
      <link>https://gliver.tistory.com/92</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;안녕하세요 Gliver 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 글에서는, 선형대수학이라는 학문을 왜 배워야 하고, 어디에 쓰이는지를 AI를 배우는 컴공을 기준으로 알아보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;이해를 돕기 위한 글이므로 엄밀한 정의가 아닌 표현이 쓰인 부분이 있다는 점 참고해 주시면 감사하겠습니다.&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;목차&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;선형대수학이란?&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;선형대수학을 배우는 이유&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;선형대수학이란?&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위키백과에서는 선형대수학을 아래와 같이 정의하고 있다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000;&quot;&gt;선형대수학(linear algebra)은 &lt;b&gt;벡터 공간&lt;/b&gt;, &lt;b&gt;벡터&lt;/b&gt;, &lt;b&gt;선형 변환&lt;/b&gt;, &lt;b&gt;행렬&lt;/b&gt;, &lt;b&gt;연립 선형 방정식&lt;/b&gt; 등을 연구하는 대수학의 한 분야이다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, &lt;b&gt;벡터 공간&lt;/b&gt;, &lt;b&gt;벡터&lt;/b&gt;, &lt;b&gt;선형 변환&lt;/b&gt;, &lt;b&gt;행렬&lt;/b&gt;, &lt;b&gt;연립 선형 방정식&lt;/b&gt; 등을 연구하는 학문이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아직 선형대수학을 공부하지 않았다면 각각이 무엇이며 어디에 쓰이는지 잘 모르는 것이 당연하다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지금은, 선형대수학은 이러한 것들을 연구하는 학문이라는 것만 알아도 충분하다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;선형대수학을 배우는 이유&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위에서 선형대수학은 &lt;b&gt;벡터 공간&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;b&gt;벡터&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;b&gt;선형 변환&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;b&gt;행렬&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;b&gt;연립 선형 방정식&lt;/b&gt; 등을 연구하는 학문이라고 하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;벡터 공간&lt;/b&gt;, &lt;b&gt;선형 변환&lt;/b&gt; 등은 어려우므로, 여기서는&amp;nbsp;&lt;b&gt;벡터&lt;/b&gt;, &lt;b&gt;행렬&lt;/b&gt;, &lt;b&gt;연립 선형 방정식&lt;/b&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;color: #000000;&quot;&gt;간단하게, &lt;b&gt;벡터는&lt;/b&gt; 수들이 1차원 배열 형태로 담겨 있으며, &lt;b&gt;행렬은&lt;/b&gt; 2차원 배열 형태로 담겨 있다고 생각하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;연립 선형 방정식은&lt;/b&gt; 아래와 같이, 여러 개의 방정식을 동시에 풀어야 하는 문제를 의미한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$$2x + 3y = 8$$&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;$$x - 2y = -3$$&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;color: #000000;&quot;&gt;위와 같은 연립 선형 방정식을 어떻게 풀 수 있을까?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;고등학교까지의 교육과정에서 배웠듯이, 변수들을 연립(대입법을 이용)하여 풀 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;선형대수학에서는 위와 같은 연립 선형 방정식을 아래와 같이 행렬과 벡터의 곱셈으로 표현 가능하며, 답 또한 구할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;$$ \begin{pmatrix} 2 &amp;amp; 3&amp;nbsp; \\ 1 &amp;amp; -2&amp;nbsp; \end{pmatrix} \cdot \begin{pmatrix} x&amp;nbsp; \\ y&amp;nbsp; \end{pmatrix} = \begin{pmatrix} 8&amp;nbsp; \\ -3&amp;nbsp; \end{pmatrix}$$&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그런데, 대입법을 사용하면 되는데 굳이 선형대수학을 이용하여 풀 필요가 있는지 의문이 들 수도 있다.&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&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;color: #000000;&quot;&gt;아래와 같은 연립 선형 방정식을 대입법을 통해서 구할 수 있을까?&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$$2a + 3b - c + 4d - 2e = 7$$ $$-a + 2b + 4c - d + e = 5$$ $$3a - b + c + 2d + e = 10$$ $$4a + b - 3c + d + 2e = 6$$ $$-a + 3b + 2c - 2d + 5e = 8$$&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;변수의 개수가 5개나 되니 조금 번거롭긴 하겠지만, 대입법을 여러 번 사용하여 풀 수 있을 것이다.&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;color: #000000;&quot;&gt;만약에, 변수의 개수가 100개, 1000개, 10000개가 되는 연립 선형 방정식이 주어진다면 풀 수 있을까?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이렇게 변수의 개수가 많아지는 경우에 사람이 풀기 어려우며, 프로그래밍을 하여 푸는 것이 좋다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그리고, 프로그래밍을 하여 방정식을 풀 때는 선형대수학의 이론을 이용하는 것이 좋은 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&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;color: #000000;&quot;&gt;선형대수학을 이용하면 연립 선형 방정식을 프로그래밍으로 풀기 쉬운 이유가 뭘까?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위에서 &lt;span style=&quot;color: #0593d3;&quot;&gt;벡터는 1차원 배열에 대응되고, 행렬은 2차원 배열에 대응된다.&lt;/span&gt;라고 했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한, &lt;span style=&quot;color: #0593d3;&quot;&gt;연립 선형 방정식은 행렬과 벡터의 곱셈으로 표현 가능하다.&lt;/span&gt;라고 했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, 연립 선형 방정식은 행렬과 벡터로 표현 가능하며, 행렬과 벡터는 프로그래밍에서 배열로 표현이 가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, &lt;b&gt;연립 선형 방정식을 프로그래밍에서 배열 형태로 표현할 수 있는 것이다.&lt;/b&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;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;그래서, 연립 선형 방정식의 해는 어떻게 구할 수 있는데?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;연립 선형 방정식을 프로그래밍에서 배열 형태로 표현할 수 있다는 것은 이해됐을&amp;nbsp;것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇다면, 이렇게 표현한 연립 선형 방정식의 해를 어떻게 구할 수 있을까?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가장 간단한 방법으로는 &lt;b&gt;가우스 소거법(Gaussian Elimination)&lt;/b&gt;이 있으며, 이는 프로그래밍으로 구현하기 쉽다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정리&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정리하면, AI를 전공하는 입장에서 선형대수학을 왜 배우는지에 대해 물어보면 아래와 같이 답하면 될 거 같다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;선형대수학을 이용하면 (연립 선형 방정식과 같이) 수학적인 상황을 쉽게 표현/해결 가능하며, 선형대수학에서 나오는 벡터와 행렬은 프로그래밍하기에 적합한 형태이므로 AI 분야에서 많이 활용되므로 중요하다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;AI 분야에서 선형대수학이 어떻게 쓰이는 아직 자세히 몰라도 괜찮다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;선형대수학을 배우고 AI(머신러닝, 딥러닝)를 배우다 보면, 선형대수학이 어디에 쓰이는지 쉽게 알 수 있을 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>  Math/Linear Algebra</category>
      <author>Gliver</author>
      <guid isPermaLink="true">https://gliver.tistory.com/92</guid>
      <comments>https://gliver.tistory.com/92#entry92comment</comments>
      <pubDate>Tue, 17 Sep 2024 10:45:23 +0900</pubDate>
    </item>
    <item>
      <title>[CodeForces] #905 (Div.3) A~F 업솔빙</title>
      <link>https://gliver.tistory.com/90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;안녕하세요 Gliver 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 글은 코드포스 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;u&gt;&lt;a style=&quot;color: #006dd7;&quot; href=&quot;https://codeforces.com/contest/1883&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;#905 (Div.3)&lt;/a&gt;&lt;/u&gt; &lt;/span&gt;에 대해 업솔빙하는 글입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1412&quot; data-origin-height=&quot;65&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GwNTV/btsyUhgYguE/zmdZCysqOHYiEVTFkHzc40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GwNTV/btsyUhgYguE/zmdZCysqOHYiEVTFkHzc40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GwNTV/btsyUhgYguE/zmdZCysqOHYiEVTFkHzc40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGwNTV%2FbtsyUhgYguE%2FzmdZCysqOHYiEVTFkHzc40%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;800&quot; height=&quot;37&quot; data-origin-width=&quot;1412&quot; data-origin-height=&quot;65&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;A. &lt;span style=&quot;background-color: #ffffff; text-align: center;&quot;&gt;Morning&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;단순 구현 문제로, 버튼을 누르는 횟수와 이동하는 횟수를 구해서 출력하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;line-height: 50%;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;button class=&quot;btn btn-outline-secondary btn-sm&quot; type=&quot;button&quot; data-bs-toggle=&quot;collapse&quot; data-bs-target=&quot;#collapseExampleA&quot; aria-expanded=&quot;false&quot; aria-controls=&quot;collapseExample&quot;&gt; A.cpp &lt;/button&gt;&lt;/p&gt;
&lt;div id=&quot;collapseExampleA&quot; class=&quot;collapse&quot;&gt;
&lt;div class=&quot;card card-body&quot;&gt;
&lt;script src=&quot;https://gist.github.com/tjdans6342/394b22854f0a430d05741e0892e78712.js&quot;&gt;&lt;/script&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot;&gt;B. Chemistry&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;개인적으로 조금 복잡하게 생각한 문제이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;팰린드롬을 만들 수 있는 경우는 다음 두 가지 상황으로 제한할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모든 문자의 개수가 짝수개인 경우&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하나의 문자의 개수가 홀수개이고, 나머지 모든 문자의 개수가 짝수개인 경우&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, 문자열을 적절히 제거하여 홀수개인 문자가 1개 이하가 되도록 만들 수 있으면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이는, 홀수개인 문자의 개수에서 $k$를 뺀 값이 1 이하 이면 된다는 의미이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;line-height: 50%;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;button class=&quot;btn btn-outline-secondary btn-sm&quot; type=&quot;button&quot; data-bs-toggle=&quot;collapse&quot; data-bs-target=&quot;#collapseExampleB&quot; aria-expanded=&quot;false&quot; aria-controls=&quot;collapseExample&quot;&gt; B.cpp &lt;/button&gt;&lt;/p&gt;
&lt;div id=&quot;collapseExampleB&quot; class=&quot;collapse&quot;&gt;
&lt;div class=&quot;card card-body&quot;&gt;
&lt;script src=&quot;https://gist.github.com/tjdans6342/db16325a2f501fc9991ae429fa76199d.js&quot;&gt;&lt;/script&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot;&gt;C. Raspberries&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모든 원소의 곱이 $k$로 나누어 떨어지도록 하는 연산의 최소 횟수를 구하는 문제이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$k$ 는 2, 3, 4, 5 중에 하나이므로, 문제를 쉽게 해결할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$k$가 소수(prime number)인 경우(2, 3, 5)에는 해당 수의 배수를 무조건 만들어야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$k$가 4인 경우는 2의 배수 2개를 만들거나 4의 배수를 만들면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;line-height: 50%;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;button class=&quot;btn btn-outline-secondary btn-sm&quot; type=&quot;button&quot; data-bs-toggle=&quot;collapse&quot; data-bs-target=&quot;#collapseExampleC&quot; aria-expanded=&quot;false&quot; aria-controls=&quot;collapseExample&quot;&gt; C.cpp &lt;/button&gt;&lt;/p&gt;
&lt;div id=&quot;collapseExampleC&quot; class=&quot;collapse&quot;&gt;
&lt;div class=&quot;card card-body&quot;&gt;
&lt;script src=&quot;https://gist.github.com/tjdans6342/98fd0c17491079047e67c1736f1690a9.js&quot;&gt;&lt;/script&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot;&gt;D. In Love&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현재 상황에서 겹치지 않는 쌍이 존재하는지를 묻는 문제이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시작점의 좌표가 끝점의 좌표보다 큰 경우가 존재한다면, 해당 두 쌍은 겹치지 않는다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, &lt;code&gt;시작점의 최대값&lt;/code&gt; &amp;gt;&amp;nbsp;&lt;code&gt;끝점의 최소값&lt;/code&gt; 인 경우에는 적어도 하나의 겹치지 않는 쌍이 존재한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;line-height: 50%;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;button class=&quot;btn btn-outline-secondary btn-sm&quot; type=&quot;button&quot; data-bs-toggle=&quot;collapse&quot; data-bs-target=&quot;#collapseExampleD&quot; aria-expanded=&quot;false&quot; aria-controls=&quot;collapseExample&quot;&gt; D.cpp &lt;/button&gt;&lt;/p&gt;
&lt;div id=&quot;collapseExampleD&quot; class=&quot;collapse&quot;&gt;
&lt;div class=&quot;card card-body&quot;&gt;
&lt;script src=&quot;https://gist.github.com/tjdans6342/5414111b9efb90fa402f734ae1e32d37.js&quot;&gt;&lt;/script&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #ef5369; text-align: center;&quot;&gt;E. Look Back&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 문제는 다음과 같은 사실을 만족한다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;arr[i] &amp;gt; arr[i+1] 인 쌍이 존재한다면 arr[i+1]에 연산을 1회 이상 시행해야 한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인덱스 i를 기준으로 i 이전의 원소들이 non-decreasing 상태를 만족하면, [1, i] 구간은 연산을 시행할 필요가 없다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위의 사실을 이용하면, 첫 원소부터 시작하여 arr[i] &amp;lt;= arr[i+1] 이 되게끔 arr[i+1]에 최소 연산을 시행해 주면 문제를 해결할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;원소에 2를 곱하는 형식으로 구현하면 매우 큰 수가 나오므로 배열의 원소에 2를 곱하는 방식이 아닌 다른 방식의 처리가 필요하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;원소에 2를 곱하는 형식이 아닌 원소에 연산을 한 횟수를 저장하는 형식으로 문제를 해결할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;어떤 원소 $a$에 연산을 $p$번 하게 되면 $a \cdot 2^{p}$의 형태로 나타낼 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, $a, b, p$가 정해진 상태에서 $a \cdot 2^{p} \leq b \cdot 2^{q}$를 만족하는 $q$의 최소값을 구할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;line-height: 50%;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;button class=&quot;btn btn-outline-secondary btn-sm&quot; type=&quot;button&quot; data-bs-toggle=&quot;collapse&quot; data-bs-target=&quot;#collapseExampleE&quot; aria-expanded=&quot;false&quot; aria-controls=&quot;collapseExample&quot;&gt; E.cpp &lt;/button&gt;&lt;/p&gt;
&lt;div id=&quot;collapseExampleE&quot; class=&quot;collapse&quot;&gt;
&lt;div class=&quot;card card-body&quot;&gt;
&lt;script src=&quot;https://gist.github.com/tjdans6342/5ccef0a2209789871821f43a0cb02929.js&quot;&gt;&lt;/script&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #ef5369; text-align: center;&quot;&gt;F. You Are So Beautiful&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&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;color: #000000;&quot;&gt;다음의 조건을 만족하는 $[l, r]$ 쌍의 개수를 구하면 되는 문제이다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$b = [a_l, \ a_{l+1} \, \ \cdots \ , \ a_{r-1}, \ a_r]$은 기존의 배열 $a$에서 유일한 subsequence(부분 문자열)이어야 한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(여기서 subsequence는 연속일 필요는 없다)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;예를 들어, a = [2, 3, 2, 3] 인 경우를 살펴보자.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;l=0, r=1 인 경우&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;b = [2, 3] 이며, [a[0], a[1]]을 제외한 [a[0], a[3]]인 경우도 [2, 3]이 되므로 l=0, r=1인 경우는 조건을 만족하지 않는다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;l=0, r=2인 경우&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;b = [2, 3, 2] 이며, [a[0], a[1], a[2]]를 제외한 어떠한 subsequence도 [2, 3, 2]가 되지 못하므로 조건을 만족한다.&lt;/span&gt;&lt;/blockquote&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;color: #000000; text-align: left;&quot;&gt; $b = [a_l, \ a_{l+1} \, \ \cdots \ , \ a_{r-1}, \ a_r]$ 가 조건을 만족하는 경우는 아래의 조건을 만족하는 경우다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인덱스 $l$ 이전에 $a_l$과 같은 값이 존재하지 않는다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인덱스 $r$ 이후에 $a_r$과 같은 값이 존재하지 않는다. &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, $a_l$은 처음으로 등장한 값이어야 하며, $a_r$은 마지막으로 등장한 값이어야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;등장하는 모든 값에 대해 첫 인덱스와 마지막 인덱스를 매칭시키면 빠르게 모든 쌍을 구할 수 있다.&lt;br /&gt;(누적 합 배열을 만들어 처리하면 $O(n)$에 모든 쌍을 구할 수 있다)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;line-height: 50%;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;button class=&quot;btn btn-outline-secondary btn-sm&quot; type=&quot;button&quot; data-bs-toggle=&quot;collapse&quot; data-bs-target=&quot;#collapseExampleF&quot; aria-expanded=&quot;false&quot; aria-controls=&quot;collapseExample&quot;&gt; F.cpp &lt;/button&gt;&lt;/p&gt;
&lt;div id=&quot;collapseExampleF&quot; class=&quot;collapse&quot;&gt;
&lt;div class=&quot;card card-body&quot;&gt;
&lt;script src=&quot;https://gist.github.com/tjdans6342/432f706b2fa135910570c9b35b300ef4.js&quot;&gt;&lt;/script&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>✏️ 알고리즘/PS 기록</category>
      <author>Gliver</author>
      <guid isPermaLink="true">https://gliver.tistory.com/90</guid>
      <comments>https://gliver.tistory.com/90#entry90comment</comments>
      <pubDate>Mon, 23 Oct 2023 16:29:46 +0900</pubDate>
    </item>
    <item>
      <title>[백준 27986번] 평범한 구성적 문제</title>
      <link>https://gliver.tistory.com/89</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1696940687679&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;27986번: 평범한 구성적 문제&quot; data-og-description=&quot;정수 $N$과 $M$개의 정수 쌍 $(L_1, R_1), (L_2, R_2), \cdots (L_M, R_M) $이 주어진다. 이제 아래 조건을 만족하면서 값 $K$를 최대화시키는 수열 $X$를 찾아야 한다. $X$는 $K$ 이하의 양의 정수 $N$개로 구성되어&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/27986&quot; data-og-url=&quot;https://www.acmicpc.net/problem/27986&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hdzY6/hyT9NenCDU/n78FCD1q9c9nVLLBr6ibDK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/27986&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/27986&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hdzY6/hyT9NenCDU/n78FCD1q9c9nVLLBr6ibDK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&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;27986번: 평범한 구성적 문제&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;정수 $N$과 $M$개의 정수 쌍 $(L_1, R_1), (L_2, R_2), \cdots (L_M, R_M) $이 주어진다. 이제 아래 조건을 만족하면서 값 $K$를 최대화시키는 수열 $X$를 찾아야 한다. $X$는 $K$ 이하의 양의 정수 $N$개로 구성되어&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;문제가 수학적인 표현이 많이 쓰여, 다소 이해하기 어렵다고 생각한다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;문제 설명&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;문제에서 요구하는 것은 배열 $X$를 구하는 것이며, 배열 $X$는 $1$부터 $K$이하의 수로 구성되어 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;문제의 입력으로 주어지는 것들은 조건이며, 조건들을 만족하면서 $K$가 최대가 되게 하는 배열 $X$를 구하는 문제이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$K$의 최대값은 하나지만, 이때 배열 $X$는 여러 가지 경우가 나올 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(편의상 $K'$을 $K$의 최대값이라 정의하겠다)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;문제 접근&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;문제에서 주어지는 입력 중에서 $R_i - L_i + 1$ (구간의 길이)가 $L$이라고 하면,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;($L$안에 들어갈 수 있는 원소의 종류의 최대는 $L$이므로) $K'$은 $L$이하여야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, 모든 $(L_i, R_i)$에 대해서 $R_i - L_i + 1$ 값 중에서 최소값이 $K'$이 된다는 것은 직감적으로 알 수 있을 것이다.&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;color: #000000;&quot;&gt;결론적으로, $K'$을 구한 후에 모든 $(L_i, R_i)$에 대해 조건에 맞게끔 적절히 배열 $X$를 구성하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;더 좋은 방법&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$K'$이 정해지면, $(L_i, R_i)$의 값에 상관없이 항상 답을 만족하는 배열 $X$를 만들 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, $K'$이 정해지면, $(L_i, R_i)$의 최악의 경우에도 답을 만족하는 $X$가 항상 존재한다는 것이다.&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;color: #000000;&quot;&gt;예를 들어 $N=7$, $K'=3$이라고 하면, 이때 최악의 $(L_i, R_i)$ 값은 $(1, 3)$, $(2, 4)$, $(3, 5)$, $(4, 6)$, $(5, 7)$ 이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이때, $1231231$ 와 같이&amp;nbsp;배열 $X$를 구성하면 항상 답이 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(직접 해보면, 조건을 만족한다는 것을 알 수 있을 것이다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;span style=&quot;text-align: start;&quot;&gt;항상 조건을 만족하는 배열 $X$가 존재하는 이유는 &lt;/span&gt;&lt;b&gt;문제의 조건이 연속된 구간 단위로 주어지기 때문&lt;/b&gt;&lt;span style=&quot;text-align: start;&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;&lt;span style=&quot;color: #000000;&quot;&gt;똑같이, $K'=5$라면 $N$의 길이에만 맞춰서 $1234512345123451234512345...$ 이런식으로 배열$X$를 구성하면 된다.&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;color: #000000;&quot;&gt;최악의 경우($K'$길이의 모든 $(L_i, R_i)$쌍이 있는 경우)에도 위의 방법대로 배열 $X$를 구성하면 조건을 만족했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, 입력에 대해 $K'$( = $R_i - L_i + 1$의 최소값)을 구하고 $1234...K'1234...K'....$ 와 같이&amp;nbsp;배열 $X$를 구성하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;button class=&quot;btn btn-outline-secondary btn-sm&quot; type=&quot;button&quot; data-bs-toggle=&quot;collapse&quot; data-bs-target=&quot;#collapseExample2&quot; aria-expanded=&quot;false&quot; aria-controls=&quot;collapseExample&quot;&gt;AC code &lt;/button&gt;&lt;/p&gt;
&lt;div id=&quot;collapseExample2&quot; class=&quot;collapse&quot;&gt;
&lt;div class=&quot;card card-body&quot;&gt;
&lt;script src=&quot;https://gist.github.com/tjdans6342/9bb500b65b0d30e54c97f03c10149690.js&quot;&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;984&quot; data-origin-height=&quot;42&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4TcoW/btsxLiH1Lpo/ZM6Nv0JGMsWRQ8RkaktbCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4TcoW/btsxLiH1Lpo/ZM6Nv0JGMsWRQ8RkaktbCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4TcoW/btsxLiH1Lpo/ZM6Nv0JGMsWRQ8RkaktbCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4TcoW%2FbtsxLiH1Lpo%2FZM6Nv0JGMsWRQ8RkaktbCK%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;800&quot; height=&quot;34&quot; data-origin-width=&quot;984&quot; data-origin-height=&quot;42&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;</description>
      <category>✏️ 알고리즘/PS 기록</category>
      <author>Gliver</author>
      <guid isPermaLink="true">https://gliver.tistory.com/89</guid>
      <comments>https://gliver.tistory.com/89#entry89comment</comments>
      <pubDate>Tue, 10 Oct 2023 22:03:35 +0900</pubDate>
    </item>
  </channel>
</rss>