<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>CodeAngie</title>
    <link>https://code-angie.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Tue, 26 May 2026 19:40:26 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>코딩하는 앤지</managingEditor>
    <image>
      <title>CodeAngie</title>
      <url>https://tistory1.daumcdn.net/tistory/5937045/attach/7c3ccd27d47c400287902a5a9856bd1b</url>
      <link>https://code-angie.tistory.com</link>
    </image>
    <item>
      <title>[Android Studio] 안드로이드 스튜디오 설치하기 (Windows)</title>
      <link>https://code-angie.tistory.com/213</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 설치 파일 다운로드 (Windows)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글에 Android Studio download를 검색하거나 아래 링크를 통해서 공식 홈페이지에서 설치 파일을 다운로드 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.android.com/studio?hl=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://developer.android.com/studio?hl=ko&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1772257851652&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;Android 스튜디오 및 앱 도구 다운로드 - Android 개발자 &amp;nbsp;|&amp;nbsp; Android Studio &amp;nbsp;|&amp;nbsp; Android Developers&quot; data-og-description=&quot;Android Studio provides app builders with an integrated development environment (IDE) optimized for Android apps. Download Android Studio today.&quot; data-og-host=&quot;developer.android.com&quot; data-og-source-url=&quot;https://developer.android.com/studio?hl=ko&quot; data-og-url=&quot;https://developer.android.com/studio?hl=ko&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bWfmhr/dJMb8QejyuJ/RPISfxY46n5sJeooJkFdy1/img.png?width=1201&amp;amp;height=676&amp;amp;face=0_0_1201_676,https://scrap.kakaocdn.net/dn/biCI6B/dJMb8WMmVuN/T8HYg4h073IaliagJhsi9k/img.png?width=3060&amp;amp;height=2018&amp;amp;face=0_0_3060_2018,https://scrap.kakaocdn.net/dn/bkJn7E/dJMb8QejyuM/KJsBwFo6JvxW2Z1B7548S1/img.png?width=3078&amp;amp;height=1916&amp;amp;face=0_0_3078_1916&quot;&gt;&lt;a href=&quot;https://developer.android.com/studio?hl=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.android.com/studio?hl=ko&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bWfmhr/dJMb8QejyuJ/RPISfxY46n5sJeooJkFdy1/img.png?width=1201&amp;amp;height=676&amp;amp;face=0_0_1201_676,https://scrap.kakaocdn.net/dn/biCI6B/dJMb8WMmVuN/T8HYg4h073IaliagJhsi9k/img.png?width=3060&amp;amp;height=2018&amp;amp;face=0_0_3060_2018,https://scrap.kakaocdn.net/dn/bkJn7E/dJMb8QejyuM/KJsBwFo6JvxW2Z1B7548S1/img.png?width=3078&amp;amp;height=1916&amp;amp;face=0_0_3078_1916');&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;Android 스튜디오 및 앱 도구 다운로드 - Android 개발자 &amp;nbsp;|&amp;nbsp; Android Studio &amp;nbsp;|&amp;nbsp; Android Developers&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Android Studio provides app builders with an integrated development environment (IDE) optimized for Android apps. Download Android Studio today.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.android.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Android 스튜디오 Panda 1 다운로드 클릭&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1193&quot; data-origin-height=&quot;695&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3I9en/dJMcaaYGlx9/A2tDL1cntQhhuU8YOZWaxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3I9en/dJMcaaYGlx9/A2tDL1cntQhhuU8YOZWaxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3I9en/dJMcaaYGlx9/A2tDL1cntQhhuU8YOZWaxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3I9en%2FdJMcaaYGlx9%2FA2tDL1cntQhhuU8YOZWaxK%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;1193&quot; height=&quot;695&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1193&quot; data-origin-height=&quot;695&quot;/&gt;&lt;/span&gt;&lt;/figure&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;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1321&quot; data-origin-height=&quot;888&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJzz9Q/dJMcaaYGlya/YKx66GSWXkyUk4gFe4E5f1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJzz9Q/dJMcaaYGlya/YKx66GSWXkyUk4gFe4E5f1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJzz9Q/dJMcaaYGlya/YKx66GSWXkyUk4gFe4E5f1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJzz9Q%2FdJMcaaYGlya%2FYKx66GSWXkyUk4gFe4E5f1%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;1321&quot; height=&quot;888&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1321&quot; data-origin-height=&quot;888&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 안드로이트 스튜디오 설치 마법사 실행&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 다른 설정을 해줄 필요 없이 쭉 Next를 누르며 넘어가도 좋다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/w63D2/dJMcachUE5N/LKZdItqa4ZbJwxsRj7EBa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/w63D2/dJMcachUE5N/LKZdItqa4ZbJwxsRj7EBa0/img.png&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;381&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;49.9&quot; data-filename=&quot;blob&quot; style=&quot;width: 49.3235%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/w63D2/dJMcachUE5N/LKZdItqa4ZbJwxsRj7EBa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fw63D2%2FdJMcachUE5N%2FLKZdItqa4ZbJwxsRj7EBa0%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;494&quot; height=&quot;381&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EWRs3/dJMcaa5sJIl/oG7rzLKXCCjSdmHUUxClHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EWRs3/dJMcaa5sJIl/oG7rzLKXCCjSdmHUUxClHK/img.png&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;378&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;50.1&quot; data-filename=&quot;blob&quot; style=&quot;width: 49.5137%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EWRs3/dJMcaa5sJIl/oG7rzLKXCCjSdmHUUxClHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEWRs3%2FdJMcaa5sJIl%2FoG7rzLKXCCjSdmHUUxClHK%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;492&quot; height=&quot;378&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bp9YLB/dJMcaduhT20/sQB5l4T3niZYp3KTzrsGFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bp9YLB/dJMcaduhT20/sQB5l4T3niZYp3KTzrsGFk/img.png&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;383&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;50.15&quot; data-filename=&quot;blob&quot; style=&quot;width: 49.5688%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bp9YLB/dJMcaduhT20/sQB5l4T3niZYp3KTzrsGFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbp9YLB%2FdJMcaduhT20%2FsQB5l4T3niZYp3KTzrsGFk%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;495&quot; height=&quot;383&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZkWNl/dJMcaduhT21/WPt04mAP1PFRExQTbYfrVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZkWNl/dJMcaduhT21/WPt04mAP1PFRExQTbYfrVk/img.png&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;383&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;49.85&quot; data-filename=&quot;blob&quot; style=&quot;width: 49.2684%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZkWNl/dJMcaduhT21/WPt04mAP1PFRExQTbYfrVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZkWNl%2FdJMcaduhT21%2FWPt04mAP1PFRExQTbYfrVk%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;492&quot; height=&quot;383&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1lME8/dJMcaa5sJIm/Xbxaq8CYG1GzStyed9Bxtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1lME8/dJMcaa5sJIm/Xbxaq8CYG1GzStyed9Bxtk/img.png&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;380&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;50.04&quot; data-filename=&quot;blob&quot; style=&quot;width: 49.4535%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1lME8/dJMcaa5sJIm/Xbxaq8CYG1GzStyed9Bxtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1lME8%2FdJMcaa5sJIm%2FXbxaq8CYG1GzStyed9Bxtk%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;495&quot; height=&quot;380&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tajmu/dJMcafloInT/dAwAmzVFPzS4A8kubbijF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tajmu/dJMcafloInT/dAwAmzVFPzS4A8kubbijF0/img.png&quot; data-origin-width=&quot;493&quot; data-origin-height=&quot;379&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;49.96&quot; data-filename=&quot;blob&quot; style=&quot;width: 49.3837%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tajmu/dJMcafloInT/dAwAmzVFPzS4A8kubbijF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftajmu%2FdJMcafloInT%2FdAwAmzVFPzS4A8kubbijF0%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;493&quot; height=&quot;379&quot;/&gt;&lt;/span&gt;&lt;/div&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. 안드로이드 스튜디오 실행&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 마지막에 Start Android Studio를 체크하면 바로 스튜디오가 실행된다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;구글에 사용 데이터를 보낼지 선택 (자유롭게 선택)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;523&quot; data-origin-height=&quot;309&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZTkDS/dJMcacWutd8/22upNJa8CVccnuTqKKLsCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZTkDS/dJMcacWutd8/22upNJa8CVccnuTqKKLsCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZTkDS/dJMcacWutd8/22upNJa8CVccnuTqKKLsCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZTkDS%2FdJMcacWutd8%2F22upNJa8CVccnuTqKKLsCK%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;523&quot; height=&quot;309&quot; data-origin-width=&quot;523&quot; data-origin-height=&quot;309&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;898&quot; data-origin-height=&quot;678&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOD0av/dJMcaioTYyx/dErxlQRSrg3FRinyCFJcv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOD0av/dJMcaioTYyx/dErxlQRSrg3FRinyCFJcv1/img.png&quot; data-alt=&quot;설치를 시작한다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOD0av/dJMcaioTYyx/dErxlQRSrg3FRinyCFJcv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOD0av%2FdJMcaioTYyx%2FdErxlQRSrg3FRinyCFJcv1%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;898&quot; height=&quot;678&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;898&quot; data-origin-height=&quot;678&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-filename=&quot;blob&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;673&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/y2pcB/dJMcaaYGlIt/3Ss4KpGrsLuGcxdajaIM7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/y2pcB/dJMcaaYGlIt/3Ss4KpGrsLuGcxdajaIM7K/img.png&quot; data-alt=&quot;Standard(기본) 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/y2pcB/dJMcaaYGlIt/3Ss4KpGrsLuGcxdajaIM7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fy2pcB%2FdJMcaaYGlIt%2F3Ss4KpGrsLuGcxdajaIM7K%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;894&quot; height=&quot;673&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;673&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Standard(기본) 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;898&quot; data-origin-height=&quot;676&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RpCfW/dJMcaa5sJL5/I2AmJzb0djJfX7Eb1zlGV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RpCfW/dJMcaa5sJL5/I2AmJzb0djJfX7Eb1zlGV0/img.png&quot; data-alt=&quot;셋팅 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RpCfW/dJMcaa5sJL5/I2AmJzb0djJfX7Eb1zlGV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRpCfW%2FdJMcaa5sJL5%2FI2AmJzb0djJfX7Eb1zlGV0%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;898&quot; height=&quot;676&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;898&quot; data-origin-height=&quot;676&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;셋팅 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Accept를 누른 뒤, Next를 눌러야 한다. 설치될 android sdk license 관련한 동의서이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;675&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdfZKF/dJMcaioTYyy/srxGCPPABn9Y0Ed1JPBvk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdfZKF/dJMcaioTYyy/srxGCPPABn9Y0Ed1JPBvk0/img.png&quot; data-alt=&quot;SDK 라이센스 동의&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdfZKF/dJMcaioTYyy/srxGCPPABn9Y0Ed1JPBvk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdfZKF%2FdJMcaioTYyy%2FsrxGCPPABn9Y0Ed1JPBvk0%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;900&quot; height=&quot;675&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;675&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;SDK 라이센스 동의&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;897&quot; data-origin-height=&quot;678&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYhFzu/dJMcaih65vG/eiAqN8u79b98CSczHCetEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYhFzu/dJMcaih65vG/eiAqN8u79b98CSczHCetEk/img.png&quot; data-alt=&quot;설치 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYhFzu/dJMcaih65vG/eiAqN8u79b98CSczHCetEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYhFzu%2FdJMcaih65vG%2FeiAqN8u79b98CSczHCetEk%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;897&quot; height=&quot;678&quot; data-origin-width=&quot;897&quot; data-origin-height=&quot;678&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;777&quot; data-origin-height=&quot;638&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sWNyI/dJMcahcq4eq/ERlWT4v4JIk72cIHJgkYwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sWNyI/dJMcahcq4eq/ERlWT4v4JIk72cIHJgkYwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sWNyI/dJMcahcq4eq/ERlWT4v4JIk72cIHJgkYwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsWNyI%2FdJMcahcq4eq%2FERlWT4v4JIk72cIHJgkYwK%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;777&quot; height=&quot;638&quot; data-origin-width=&quot;777&quot; data-origin-height=&quot;638&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Study/Ect</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/213</guid>
      <comments>https://code-angie.tistory.com/213#entry213comment</comments>
      <pubDate>Sat, 28 Feb 2026 15:16:08 +0900</pubDate>
    </item>
    <item>
      <title>[PyCharm] PyCharm 설치하기 (Windows)</title>
      <link>https://code-angie.tistory.com/212</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;파이썬 개발을 시작할 때 가장 먼저 찾게 되는 도구가 바로 파이참(PyCharm)이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;1. 설치 파일 다운로드 (Windows)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;이제는 Professional과 Community를 구분해서 다운로드하지 않아도 통합버전으로 관리가 가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;Professional 버전을 무료로 한 달 이용 가능하며 이후에는 무료로 이용하거나 구독을 할 수 있다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;아래 링크를 통해 설치파일을 다운로드한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://www.jetbrains.com/ko-kr/pycharm/download/?section=windows&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.jetbrains.com/ko-kr/pycharm/download/?section=windows&lt;/a&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;1343&quot; data-origin-height=&quot;837&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J7j5L/dJMcai3cpYV/kkhmtnlm5pOuWkbpRi4Tjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J7j5L/dJMcai3cpYV/kkhmtnlm5pOuWkbpRi4Tjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J7j5L/dJMcai3cpYV/kkhmtnlm5pOuWkbpRi4Tjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ7j5L%2FdJMcai3cpYV%2Fkkhmtnlm5pOuWkbpRi4Tjk%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;1343&quot; height=&quot;837&quot; data-origin-width=&quot;1343&quot; data-origin-height=&quot;837&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2. 설치 마법사 실행&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;579&quot; data-origin-height=&quot;355&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cIucka/dJMcadHDhww/21CPcH9ucuYHvGHXM1s1x0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cIucka/dJMcadHDhww/21CPcH9ucuYHvGHXM1s1x0/img.png&quot; data-alt=&quot;설치를 시작합니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cIucka/dJMcadHDhww/21CPcH9ucuYHvGHXM1s1x0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcIucka%2FdJMcadHDhww%2F21CPcH9ucuYHvGHXM1s1x0%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;579&quot; height=&quot;355&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;579&quot; data-origin-height=&quot;355&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-filename=&quot;blob&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;357&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brQa0G/dJMcajgLLKS/MnOXukkIruONMD1pC8AJHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brQa0G/dJMcajgLLKS/MnOXukkIruONMD1pC8AJHK/img.png&quot; data-alt=&quot;설치 위치를 지정합니다. (기본 설정)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brQa0G/dJMcajgLLKS/MnOXukkIruONMD1pC8AJHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrQa0G%2FdJMcajgLLKS%2FMnOXukkIruONMD1pC8AJHK%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;576&quot; height=&quot;357&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;357&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-filename=&quot;blob&quot; data-origin-width=&quot;575&quot; data-origin-height=&quot;355&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vdivr/dJMcadOnUUV/nPAzqsRnrlRBdLJk6leMdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vdivr/dJMcadOnUUV/nPAzqsRnrlRBdLJk6leMdK/img.png&quot; data-alt=&quot;설치 옵션을 선택합니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vdivr/dJMcadOnUUV/nPAzqsRnrlRBdLJk6leMdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvdivr%2FdJMcadOnUUV%2FnPAzqsRnrlRBdLJk6leMdK%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;575&quot; height=&quot;355&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;575&quot; data-origin-height=&quot;355&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;설치 옵션을 선택합니다.&lt;/figcaption&gt;
&lt;/figure&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;데스크톱 바로가기 생성&lt;/b&gt;: 바탕화면에 바로가기 아이콘 생성.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;PATH 변수 업데이트&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;(체크 권장)&lt;/span&gt;: 환경 변수 자동 등록. 명령 프롬프트에서 Pycharm에 접근할 수 있도록 변수 설정. (&lt;/span&gt;체크하지 않으면 나중에 터미널에서 python 명령어를 인식하지 못해 재설치해야 할 수도 있음)&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;컨텍스트 메뉴 업데이트&lt;/b&gt;: 폴더 우클릭시 PyCharm Project로 바로 열 수 있도록 해주는 옵션.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;연결 생성&lt;/b&gt;: .py 파일을 선택시 PyCharm으로 연결.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;298&quot; data-origin-height=&quot;215&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOQOPg/dJMb99ZBuXI/xoB7XTlooLkWg1kPbVPFL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOQOPg/dJMb99ZBuXI/xoB7XTlooLkWg1kPbVPFL1/img.png&quot; data-alt=&quot;컨텍스트 메뉴 업데이트 시 보이는 우클릭 메뉴&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOQOPg/dJMb99ZBuXI/xoB7XTlooLkWg1kPbVPFL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOQOPg%2FdJMb99ZBuXI%2FxoB7XTlooLkWg1kPbVPFL1%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;298&quot; height=&quot;215&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;298&quot; data-origin-height=&quot;215&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-filename=&quot;blob&quot; data-origin-width=&quot;577&quot; data-origin-height=&quot;359&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WNDox/dJMcadHDhwx/luEDsHWJfMgkpSb0fctxOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WNDox/dJMcadHDhwx/luEDsHWJfMgkpSb0fctxOK/img.png&quot; data-alt=&quot;시작 메뉴 폴터를 선택합니다. (기본 설정)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WNDox/dJMcadHDhwx/luEDsHWJfMgkpSb0fctxOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWNDox%2FdJMcadHDhwx%2FluEDsHWJfMgkpSb0fctxOK%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;577&quot; height=&quot;359&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;577&quot; data-origin-height=&quot;359&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-filename=&quot;blob&quot; data-origin-width=&quot;578&quot; data-origin-height=&quot;358&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfXPYb/dJMcah4nHDP/lkuOk42kyywYDQKvwRBPAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfXPYb/dJMcah4nHDP/lkuOk42kyywYDQKvwRBPAk/img.png&quot; data-alt=&quot;설치 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfXPYb/dJMcah4nHDP/lkuOk42kyywYDQKvwRBPAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfXPYb%2FdJMcah4nHDP%2FlkuOk42kyywYDQKvwRBPAk%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;578&quot; height=&quot;358&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;578&quot; data-origin-height=&quot;358&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 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot; data-path-to-node=&quot;11&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;3. 프로젝트 생성 및 인터프리터 설정&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;JetBrains의 다른 IDE가 설치되어 있다면 아래 처럼 import settings가 뜨는데, 이때 가져오고 싶은 설정이 있다면 선택하여 동일한 셋팅을 유지할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;상관 없다면 Skip을 눌러도 좋다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;638&quot; data-origin-height=&quot;504&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dMC6dJ/dJMcah4nHDR/KVd77f1EtebK1QyGLfpHO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dMC6dJ/dJMcah4nHDR/KVd77f1EtebK1QyGLfpHO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dMC6dJ/dJMcah4nHDR/KVd77f1EtebK1QyGLfpHO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdMC6dJ%2FdJMcah4nHDR%2FKVd77f1EtebK1QyGLfpHO1%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;638&quot; height=&quot;504&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;638&quot; data-origin-height=&quot;504&quot;/&gt;&lt;/span&gt;&lt;/figure&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;인터프리터가 따로 설정되어 있지 않다면 PyCharm에서 설치를 제안해준다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;최신 버전의 파이썬을 가상환경에 자동으로 설치하고 싶다면 Yes를 눌러 설치해준다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;549&quot; data-origin-height=&quot;319&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dunvdO/dJMb99ZBuXJ/TsIFEKdPqWPYY1K6fXpY4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dunvdO/dJMb99ZBuXJ/TsIFEKdPqWPYY1K6fXpY4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dunvdO/dJMb99ZBuXJ/TsIFEKdPqWPYY1K6fXpY4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdunvdO%2FdJMb99ZBuXJ%2FTsIFEKdPqWPYY1K6fXpY4K%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;549&quot; height=&quot;319&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;549&quot; data-origin-height=&quot;319&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;124&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJQZmU/dJMcaf6yLLI/1o0pJWXK2Cb0xzFdj7L6eK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJQZmU/dJMcaf6yLLI/1o0pJWXK2Cb0xzFdj7L6eK/img.png&quot; data-alt=&quot;2026.02 기준 최신 버전의 python을 자동으로 설치한다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJQZmU/dJMcaf6yLLI/1o0pJWXK2Cb0xzFdj7L6eK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJQZmU%2FdJMcaf6yLLI%2F1o0pJWXK2Cb0xzFdj7L6eK%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;582&quot; height=&quot;124&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;124&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2026.02 기준 최신 버전의 python을 자동으로 설치한다.&lt;/figcaption&gt;
&lt;/figure&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;처음 설치한 경우 PyCharm에서 여러 추천들을 해주는데 알림 팝업이 사라져서 설정을 못했다면, 오른쪽에서 종 모양을 찾아 눌러주면 된다.&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;488&quot; data-origin-height=&quot;214&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwuh35/dJMcajnxx0V/ZvOl7Zey2BcWBnstnQ08x1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwuh35/dJMcajnxx0V/ZvOl7Zey2BcWBnstnQ08x1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwuh35/dJMcajnxx0V/ZvOl7Zey2BcWBnstnQ08x1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbwuh35%2FdJMcajnxx0V%2FZvOl7Zey2BcWBnstnQ08x1%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;488&quot; height=&quot;214&quot; data-origin-width=&quot;488&quot; data-origin-height=&quot;214&quot;/&gt;&lt;/span&gt;&lt;/figure&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;초기에는 Welcome이라는 프로젝트가 생성된다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;해당 프로젝트에서 코드 연습을 하고 싶다면 New Script나 New Notebook을 통해 새 파일을 열어 실행해볼 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1379&quot; data-origin-height=&quot;980&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UBQgn/dJMcaiPHjcN/93DJWolP6dBaZmKi4ugRk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UBQgn/dJMcaiPHjcN/93DJWolP6dBaZmKi4ugRk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UBQgn/dJMcaiPHjcN/93DJWolP6dBaZmKi4ugRk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUBQgn%2FdJMcaiPHjcN%2F93DJWolP6dBaZmKi4ugRk1%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;1379&quot; height=&quot;980&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1379&quot; data-origin-height=&quot;980&quot;/&gt;&lt;/span&gt;&lt;/figure&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;New Script의 경우에는 아래 화면처럼 초기 코드가 작성되어 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;실행을 원하는 코드 라인의 왼쪽 실행 버튼(세모 모양)이나&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333; text-align: start;&quot;&gt;단축키 Ctrl + Shift + F10을 눌러 하단 콘솔창에 결과가 나오면 정상 작동하는 것이다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1304&quot; data-origin-height=&quot;770&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yS7fh/dJMcai90vBJ/CgkdgBwgYLcUvL4Dcg8N61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yS7fh/dJMcai90vBJ/CgkdgBwgYLcUvL4Dcg8N61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yS7fh/dJMcai90vBJ/CgkdgBwgYLcUvL4Dcg8N61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyS7fh%2FdJMcai90vBJ%2FCgkdgBwgYLcUvL4Dcg8N61%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1304&quot; height=&quot;770&quot; data-origin-width=&quot;1304&quot; data-origin-height=&quot;770&quot;/&gt;&lt;/span&gt;&lt;/figure&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333; text-align: start;&quot;&gt; &lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333; text-align: start;&quot;&gt;New Notebook의 경우에는 코드를 입력하고 왼쪽 실행 버튼이나 Ctrl + Enter를 눌러 결과를 확인하면 된다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1297&quot; data-origin-height=&quot;301&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/erPRRL/dJMcachHQiQ/Fw6woKPHDbgKC5R1dQkesk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/erPRRL/dJMcachHQiQ/Fw6woKPHDbgKC5R1dQkesk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/erPRRL/dJMcachHQiQ/Fw6woKPHDbgKC5R1dQkesk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FerPRRL%2FdJMcachHQiQ%2FFw6woKPHDbgKC5R1dQkesk%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;1297&quot; height=&quot;301&quot; data-origin-width=&quot;1297&quot; data-origin-height=&quot;301&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-path-to-node=&quot;19&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Study/Ect</category>
      <category>Pycharm</category>
      <category>Windows</category>
      <category>다운로드</category>
      <category>설치</category>
      <category>파이참</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/212</guid>
      <comments>https://code-angie.tistory.com/212#entry212comment</comments>
      <pubDate>Mon, 2 Feb 2026 10:49:11 +0900</pubDate>
    </item>
    <item>
      <title>[전산직(데이터) 공무원 대비] 알고리즘 기초부터 파헤치기 4</title>
      <link>https://code-angie.tistory.com/211</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt; 조직도나 파일 시스템처럼 부모-자식 관계를 가지는 &lt;b&gt;트리(Tree)&lt;/b&gt;와 우선순위 관리에 최적화된 &lt;b&gt;힙(Heap)&lt;/b&gt;을 통해 더 고급 수준으로 나아가 보자. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-path-to-node=&quot;5&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. 트리의 기초와 순회 (Traversal)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-path-to-node=&quot;6&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;트리를 눈으로 보고 순회 순서(전위/중위/후위)를 적어내거나, 코드를 보고 순서를 맞히는 문제가 나온다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-path-to-node=&quot;7&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;7&quot;&gt;(1) 이진 트리 (Binary Tree) 핵심 용어&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;8,0,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,0,0,0&quot;&gt;완전 이진 트리 (Complete Binary Tree):&lt;/b&gt; 위에서 아래로, &lt;b data-index-in-node=&quot;42&quot; data-path-to-node=&quot;8,0,0,0&quot;&gt;왼쪽에서 오른쪽&lt;/b&gt;으로 빈틈없이 채워진 트리. (&lt;b data-index-in-node=&quot;67&quot; data-path-to-node=&quot;8,0,0,0&quot;&gt;힙&lt;/b&gt;의 필수 조건)&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,1,0&quot;&gt;포화 이진 트리 (Full Binary Tree):&lt;/b&gt; 마지막 레벨까지 꽉 찬 트리. 높이가 $k$일 때, 노드 개수는 $2^k - 1$이다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-path-to-node=&quot;9&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;9&quot;&gt;(2) 트리 순회 (Traversal) - 암기 필수!&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-path-to-node=&quot;10&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;루트(Root)를 언제 방문하느냐&lt;/b&gt;가 기준이다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1768973722822&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;      (A)
     /   \
   (B)   (C)&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;11&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,0,0&quot;&gt;전위 순회 (Pre-order):&lt;/b&gt; &lt;b data-index-in-node=&quot;19&quot; data-path-to-node=&quot;11,0,0&quot;&gt;[Root]&lt;/b&gt; $\rightarrow$ Left $\rightarrow$ Right&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;11,0,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-path-to-node=&quot;11,0,1,0,1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;11,0,1,0,1,0&quot;&gt;순서: &lt;b data-index-in-node=&quot;4&quot; data-path-to-node=&quot;17,0,1,0,0&quot;&gt;A&lt;/b&gt; $\rightarrow$ B $\rightarrow$ C &lt;/span&gt;&lt;/li&gt;
&lt;li data-path-to-node=&quot;11,0,1,0,1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;11,0,1,0,1,0&quot;&gt;코드 특징: print(n)이 재귀 호출보다 &lt;b data-index-in-node=&quot;25&quot; data-path-to-node=&quot;11,0,1,0,1,0&quot;&gt;먼저&lt;/b&gt; 나옴. &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,1,0&quot;&gt;중위 순회 (In-order):&lt;/b&gt; Left $\rightarrow$ &lt;b data-index-in-node=&quot;35&quot; data-path-to-node=&quot;11,1,0&quot;&gt;[Root]&lt;/b&gt; $\rightarrow$ Right&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;11,1,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt; 순서: B $\rightarrow$ &lt;b data-index-in-node=&quot;18&quot; data-path-to-node=&quot;17,1,1,0,0&quot;&gt;A&lt;/b&gt; $\rightarrow$ C &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;코드 특징: print(n)이 재귀 호출 &lt;b data-index-in-node=&quot;23&quot; data-path-to-node=&quot;11,1,1,0,0&quot;&gt;사이&lt;/b&gt;에 껴 있음.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,2,0&quot;&gt;후위 순회 (Post-order):&lt;/b&gt; Left $\rightarrow$ Right $\rightarrow$ &lt;b data-index-in-node=&quot;55&quot; data-path-to-node=&quot;11,2,0&quot;&gt;[Root]&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;11,2,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt; 순서: B $\rightarrow$ C $\rightarrow$ &lt;b data-index-in-node=&quot;32&quot; data-path-to-node=&quot;17,2,1,0,0&quot;&gt;A&lt;/b&gt; &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;코드 특징: print(n)이 재귀 호출 &lt;b data-index-in-node=&quot;23&quot; data-path-to-node=&quot;11,2,1,0,0&quot;&gt;뒤&lt;/b&gt;에 나옴.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1-2. 최신 기출 맛보기&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-path-to-node=&quot;0&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문제.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다음 C언어 코드가 수행하는 트리 순회(Traversal) 방식은?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1768966029890&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void Course(node *n) {
    if (n != NULL) {
        Course(n-&amp;gt;left);   
        Course(n-&amp;gt;right);  
        printf(&quot;%c &quot;, n-&amp;gt;name); 
}}&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;후위 순회&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;레벨 순서 순회&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;중위 순회&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;전위 순회&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;정답: 1번&lt;/b&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;재귀 호출의 순서: 왼쪽 $\rightarrow$ 오른쪽 $\rightarrow$ 루트&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;루트를 가장 나중에 방문하므로 후위 순회이다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;Tip!&lt;/span&gt;&lt;/b&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;printf가 맨 앞에 있으면: &lt;b data-index-in-node=&quot;18&quot; data-path-to-node=&quot;8,1,1,0,0&quot;&gt;전위 순회 (Pre-order)&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;printf가 중간에 있으면: &lt;b data-index-in-node=&quot;17&quot; data-path-to-node=&quot;8,1,1,1,0&quot;&gt;중위 순회 (In-order)&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;printf가 맨 뒤에 있으면: &lt;b data-index-in-node=&quot;18&quot; data-path-to-node=&quot;8,1,1,2,0&quot;&gt;후위 순회 (Post-order)&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-path-to-node=&quot;14&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2. 힙 (Heap) - 데이터직 시험 최다 빈출&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-path-to-node=&quot;15&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;힙&lt;/b&gt;은 우선순위 큐를 구현하는 가장 효율적인 자료구조이다. 배열 인덱스 계산, 삽입/삭제 과정, 시간 복잡도가 출제 포인트다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-path-to-node=&quot;16&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;16&quot;&gt;(1) 힙의 정의&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;17&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;17,0,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;17,0,0,0&quot;&gt;최대 힙 (Max Heap):&lt;/b&gt; 부모 $\ge$ 자식. (루트가 가장 큰 값)&lt;/span&gt;&lt;/li&gt;
&lt;li data-path-to-node=&quot;17,1,1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;17,1,1,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;17,1,1,0&quot;&gt;구조:&lt;/b&gt; 반드시 &lt;b data-index-in-node=&quot;8&quot; data-path-to-node=&quot;17,1,1,0&quot;&gt;완전 이진 트리&lt;/b&gt;여야 함.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-path-to-node=&quot;18&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;18&quot;&gt;(2) 배열로 구현 (중요!)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-path-to-node=&quot;19&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;힙은 구멍 없이 꽉 차 있으므로 배열이 가장 효율적입니다. (연결리스트 X)&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;20&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;인덱스 계산 공식 (&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;기준 인덱스가 $i$일 때) :&lt;/span&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;20,0,1,0,0&quot;&gt;왼쪽 자식:&lt;/b&gt; $2 \times i$&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;20,0,1,1,0&quot;&gt;오른쪽 자식:&lt;/b&gt; $2 \times i + 1$&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;20,0,1,2,0&quot;&gt;부모:&lt;/b&gt; $i / 2$&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; [1]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/&amp;nbsp;&amp;nbsp;&amp;nbsp;\&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;[2]&amp;nbsp;&amp;nbsp;&amp;nbsp;[3]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;/&amp;nbsp;\&lt;br /&gt;&amp;nbsp;[4]&amp;nbsp;[5]&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;배열:&amp;nbsp; [1, 2, 3, 4, 5]&lt;br /&gt;인덱스:[0,&amp;nbsp;1,&amp;nbsp;2,&amp;nbsp;3,&amp;nbsp;4]&lt;br /&gt;&amp;nbsp;&lt;br /&gt;기준 인덱스가 1일 때, 왼쪽 자식의 인덱스는 2, 오른쪽 자식의 인덱스는 3, 부모의 인덱스는 0이다.&lt;/blockquote&gt;
&lt;h4 data-path-to-node=&quot;21&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;21&quot;&gt;(3) 핵심 연산과 시간 복잡도&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 156px;&quot; border=&quot;1&quot; data-path-to-node=&quot;33&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt;연산&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt;과정&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt;시간 복잡도&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;height: 38px;&quot;&gt;&lt;span data-path-to-node=&quot;33,1,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;33,1,0,0&quot;&gt;삽입 (Insert)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 38px;&quot;&gt;&lt;span data-path-to-node=&quot;33,1,1,0&quot;&gt;맨 끝에 넣고 부모와 비교하며 올라감 (&lt;b data-index-in-node=&quot;22&quot; data-path-to-node=&quot;33,1,1,0&quot;&gt;Up-Heap&lt;/b&gt;)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 38px;&quot;&gt;&lt;span data-path-to-node=&quot;33,1,2,0&quot;&gt;&lt;span data-index-in-node=&quot;0&quot; data-math=&quot;O(\log n)&quot;&gt;$O(\log n)$&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;height: 38px;&quot;&gt;&lt;span data-path-to-node=&quot;33,2,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;33,2,0,0&quot;&gt;삭제 (Delete)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 38px;&quot;&gt;&lt;span data-path-to-node=&quot;33,2,1,0&quot;&gt;루트 제거 &lt;span data-index-in-node=&quot;6&quot; data-math=&quot;\rightarrow&quot;&gt;$\rightarrow$&lt;/span&gt; 맨 끝 원소를 루트로 이동 &lt;br /&gt;&lt;span data-index-in-node=&quot;33&quot; data-math=&quot;\rightarrow&quot;&gt;$\rightarrow$&lt;/span&gt; 자식과 비교하며 내려감 (&lt;b data-index-in-node=&quot;59&quot; data-path-to-node=&quot;33,2,1,0&quot;&gt;Down-Heap&lt;/b&gt;)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 38px;&quot;&gt;&lt;span data-path-to-node=&quot;33,2,2,0&quot;&gt;&lt;span data-index-in-node=&quot;0&quot; data-math=&quot;O(\log n)&quot;&gt;$O(\log n)$&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span data-path-to-node=&quot;33,3,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;33,3,0,0&quot;&gt;확인 (Peek)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span data-path-to-node=&quot;33,3,1,0&quot;&gt;최댓값/최솟값 확인 (루트만 보면 됨)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span data-path-to-node=&quot;33,3,2,0&quot;&gt;&lt;span data-index-in-node=&quot;0&quot; data-math=&quot;O(1)&quot;&gt;$O(1)$&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;height: 38px;&quot;&gt;&lt;span data-path-to-node=&quot;33,4,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;33,4,0,0&quot;&gt;힙 정렬 (Heap Sort)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 38px;&quot;&gt;&lt;span data-path-to-node=&quot;33,4,1,0&quot;&gt;힙 생성(&lt;span data-index-in-node=&quot;5&quot; data-math=&quot;O(n)&quot;&gt;$O(n)$&lt;/span&gt;) + &lt;span data-index-in-node=&quot;13&quot; data-math=&quot;n&quot;&gt;$n$&lt;/span&gt;번 삭제(&lt;span data-index-in-node=&quot;19&quot; data-math=&quot;O(n \log n)&quot;&gt;$O(n \log n)$&lt;/span&gt;)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 38px;&quot;&gt;&lt;span data-path-to-node=&quot;33,4,2,0&quot;&gt;전체 &lt;span data-index-in-node=&quot;3&quot; data-math=&quot;O(n \log n)&quot;&gt;$O(n \log n)$&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Up-Heap: 맨 끝에서부터 내 부모(Index/2)와 나(Index)를 비교해 조건을 만족할 때까지 자리를 바꾸며(Swap) 올라간다.&lt;/li&gt;
&lt;li&gt;Down-Heap: 막내를 루트로 옮기고, 루트부터 자식 중 더 작은/큰 값과 비교해 조건을 만족할 때까지 Swap 하며 내려간다.&lt;/li&gt;
&lt;li&gt;힙 생성: 일단 무작위로 넣고 리프 노드의 부모부터(제일 아래 층부터 올라가면서) Down-Heap을 하는 것이라고 보면 된다.&lt;/li&gt;
&lt;li&gt;힙 정렬은 힙을 사용한 정렬로 일한 힙을 생성하고 하나씩 삭제하며서 제일 작은/큰 수부터 정렬하는 방법&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2-2. 최신 기출 맛보기 &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;문제. 힙(Heap) 자료구조의 시간 복잡도에 대한 설명으로 옳은 것은?&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;힙 생성(Build Heap) 후, 데이터 1개를 삽입하는 데 걸리는 시간은 $O(1)$이다. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;힙&amp;nbsp;정렬(Heap&amp;nbsp;Sort)의&amp;nbsp;전체&amp;nbsp;시간&amp;nbsp;복잡도는&amp;nbsp;최악의&amp;nbsp;경우&amp;nbsp;$O(n^2)$이다. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;루트&amp;nbsp;노드(최댓값/최솟값)를&amp;nbsp;삭제하고&amp;nbsp;힙&amp;nbsp;속성을&amp;nbsp;다시&amp;nbsp;만족시키는&amp;nbsp;데&amp;nbsp;$O(\log&amp;nbsp;n)$이&amp;nbsp;걸린다. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;힙에서&amp;nbsp;최댓값(또는&amp;nbsp;최솟값)을&amp;nbsp;확인(Peek)하는&amp;nbsp;데는&amp;nbsp;$O(\log&amp;nbsp;n)$이&amp;nbsp;걸린다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;정답: 3번&lt;/b&gt;&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;삽입은 트리의 높이만큼 올라가야 하므로 $O(\log n)$이다.&lt;/li&gt;
&lt;li&gt;힙 정렬은 최악의 경우에도 $O(n \log n)$을 보장한다. (병합 정렬과 동일)&lt;/li&gt;
&lt;li&gt;삭제 후 재정렬(Down-Heap) 과정은 트리의 높이(&lt;span data-index-in-node=&quot;39&quot; data-math=&quot;\log n&quot;&gt;$\log n$&lt;/span&gt;)만큼 걸린다.&lt;/li&gt;
&lt;li&gt;힙의 대장(최대/최소)은 항상 루트에 있으므로 확인은 $O(1)$이다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-path-to-node=&quot;24&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3. 이진 탐색 트리 (BST)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-path-to-node=&quot;25&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;탐색 원리와 노드 삭제 시 누구랑 자리를 바꾸는지가 핵심이다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-path-to-node=&quot;26&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;26&quot;&gt;(1) 정의&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;27&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;규칙:&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;27,0,0&quot;&gt; Left &amp;lt; Root &amp;lt; Right&lt;/b&gt; 왼쪽은 나보다 작고, 오른쪽은 나보다 크다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;27,1,0,0&quot;&gt;특징: 중위 순회(In-order)하면 오름차순 정렬된 결과가 나온다. (10 -&amp;gt; 20 -&amp;gt; 30)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-path-to-node=&quot;28&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;28&quot;&gt;(2) 노드 삭제 (Deletion) - 까다로움&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;29&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;자식이 없으면? 그냥 삭제.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;자식이 1개면? 자식을 내 자리로 올림.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;자식이 2개면? (시험 포인트)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;29,2,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;45,0,0&quot;&gt;방법 1:&lt;/b&gt; 왼쪽 서브트리에서 가장 큰 놈 (&lt;b data-index-in-node=&quot;24&quot; data-path-to-node=&quot;45,0,0&quot;&gt;Predecessor&lt;/b&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;45,1,0&quot;&gt;방법 2:&lt;/b&gt; 오른쪽 서브트리에서 가장 작은 놈 (&lt;b data-index-in-node=&quot;26&quot; data-path-to-node=&quot;45,1,0&quot;&gt;Successor&lt;/b&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;둘 중 하나를 데려와 자리를 채운다. (비슷한 값을 가져와야 트리가 안 깨짐)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3-1. 최신 기출 맛보기&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;문제. 다음 데이터를 순서대로 삽입하여 '이진 탐색 트리(BST)'를 생성한 후, '전위 순회(Pre-order)'한 결과는?&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;입력 데이터: [40, 20, 30, 10]&lt;/blockquote&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;40, 30, 20, 10 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;40,&amp;nbsp;20,&amp;nbsp;10,&amp;nbsp;30 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;10,&amp;nbsp;20,&amp;nbsp;30,&amp;nbsp;40 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;40,&amp;nbsp;20,&amp;nbsp;30,&amp;nbsp;10&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;정답: 2번&lt;/b&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;16&quot;&gt;트리 생성 과정&lt;/b&gt;&lt;/span&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;17&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;17,0,0&quot;&gt;40&lt;/b&gt;: 루트 노드&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;17,1,0&quot;&gt;20&lt;/b&gt;: 40보다 작으므로 &lt;b data-index-in-node=&quot;14&quot; data-path-to-node=&quot;17,1,0&quot;&gt;왼쪽&lt;/b&gt;에 넣음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;17,2,0&quot;&gt;30&lt;/b&gt;: 40보다 작으므로 왼쪽($\to$ 20)으로 갔다가, 20보다는 크므로 20의 &lt;b data-index-in-node=&quot;46&quot; data-path-to-node=&quot;17,2,0&quot;&gt;오른쪽&lt;/b&gt;에 넣음.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;17,3,0&quot;&gt;10&lt;/b&gt;: 40보다 작고($\to$ 20), 20보다 작으므로 20의 &lt;b data-index-in-node=&quot;35&quot; data-path-to-node=&quot;17,3,0&quot;&gt;왼쪽&lt;/b&gt;에 넣음.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;트리 구조&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;319&quot; data-origin-height=&quot;238&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RrrnD/dJMcahiTJpj/xKz2D3kZu5HK9A9JkdAGp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RrrnD/dJMcahiTJpj/xKz2D3kZu5HK9A9JkdAGp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RrrnD/dJMcahiTJpj/xKz2D3kZu5HK9A9JkdAGp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRrrnD%2FdJMcahiTJpj%2FxKz2D3kZu5HK9A9JkdAGp1%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;319&quot; height=&quot;238&quot; data-origin-width=&quot;319&quot; data-origin-height=&quot;238&quot;/&gt;&lt;/span&gt;&lt;/figure&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;전위 순회&lt;/b&gt;(&lt;b data-index-in-node=&quot;30&quot; data-path-to-node=&quot;20&quot;&gt;[루트]&lt;/b&gt; $\rightarrow$ 왼쪽 $\rightarrow$ 오른쪽): 40 -&amp;gt; 20 -&amp;gt; 10 -&amp;gt; 30.&lt;/span&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;21,0,0&quot;&gt;40&lt;/b&gt; (루트) 방문 $\rightarrow$ &lt;b&gt;출력: 40&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;왼쪽 서브트리(20)로 이동.&lt;/span&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;21,1,1,0,0&quot;&gt;20&lt;/b&gt; (부분 루트) 방문 $\rightarrow$ &lt;b&gt;출력: 20&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;20의 왼쪽(10)으로 이동.&lt;/span&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;21,1,1,1,1,0,0&quot;&gt;10&lt;/b&gt; 방문 $\rightarrow$ &lt;b&gt;출력: 10&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;20의 오른쪽(30)으로 이동.&lt;/span&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;21,1,1,2,1,0,0&quot;&gt;30&lt;/b&gt; 방문 $\rightarrow$ &lt;b&gt;출력: 30&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-path-to-node=&quot;31&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;4. [심화] 고급 균형 트리 (Balanced Tree)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-path-to-node=&quot;32&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;최근 7급 시험은 여기서 변별력을 낸다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-path-to-node=&quot;33&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;33&quot;&gt;(1) AVL 트리&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;34&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;34,0,0&quot;&gt;개념:&lt;/b&gt; BST인데 좌우 높이 차이(Balance Factor)가 &lt;b&gt;1 이하&lt;/b&gt;가 되도록 유지한다.&lt;/span&gt;&lt;/li&gt;
&lt;li data-path-to-node=&quot;34,1,1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;34,1,1,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;34,1,1,0&quot;&gt;회전 (Rotation):&lt;/b&gt; 불균형 발생 시 LL, RR, LR, RL 회전으로 균형을 맞춘다.&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;10,0,0&quot;&gt;원칙:&lt;/b&gt; &quot;불균형이 발생한 곳(그랜드 부모)을 기준으로, 어디가 무거워졌는지 본다.&quot;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;55,1,1,0,0&quot;&gt;LL / RR:&lt;/b&gt; 1번 회전 (Right / Left Rotate)&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;55,1,1,1,0&quot;&gt;LR / RL:&lt;/b&gt; 2번 회전 (방향 꺾어서 회전)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-path-to-node=&quot;36&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-path-to-node=&quot;36,0&quot;&gt;(2) B-트리&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;37&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;37,0,0&quot;&gt;개념:&lt;/b&gt; 자식을 여러 개($M$개) 가질 수 있는 다차원 트리. (DB 인덱스에 사용)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;37,1,0&quot;&gt;삽입 규칙:&lt;/b&gt; 노드가 꽉 차면($M-1$개 초과, Overflow), 중간값(Median)이 부모로 승진(Split)하고 쪼개진다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;트리가 위로 자라는 것이 특징&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;2-3트리는 자식이 최대 3개인 B-트리&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-path-to-node=&quot;39&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-path-to-node=&quot;39,0&quot;&gt;(3) 레드-블랙 트리 (Red-Black Tree)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;40&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;40,0,0&quot;&gt;조건 암기:&lt;/b&gt;&lt;/span&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;40,0,1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;루트는 무조건 &lt;b data-index-in-node=&quot;8&quot; data-path-to-node=&quot;40,0,1,0,0&quot;&gt;검은색(Black)&lt;/b&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;빨간색 노드의 자식은 무조건 검은색 (&lt;b&gt;No Double Red&lt;/b&gt;).&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;모든 리프(NIL: 검정 벽)까지 가는 경로의 검은색 노드 개수는 동일(&lt;b&gt;Black Height&lt;/b&gt;).&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;(추가)&amp;nbsp;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;40,0,1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;삽입은 일단 무조건 빨간색 이후 Red-Red이면 회전하거나 색을 반전한다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;삼촌(부모의 형제)도 Red면 색 반전&lt;/li&gt;
&lt;li&gt;삼촌이 Black(or NIL)이면 회전&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;빨간 노드는 지워도 상관 없음. 검정 노드를 지우면 재조정 필요!&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;형제 노드 색을 보고 회전하고 빨간 조카를 검정으로 만들어 검정하나를 넘겨받거나&lt;/li&gt;
&lt;li&gt;Red-Red가 아니라는 보장하에 검정 노드를 빨강으로 바꾼다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-path-to-node=&quot;42&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;5. 기타 특수 트리&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;43&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;43,0,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;43,0,0,0&quot;&gt;허프만 트리 (Huffman Tree):&lt;/b&gt; 빈도수가 높은 문자는 짧게, 낮은 문자는 길게 비트를 할당하는 압축 알고리즘. (탐욕(Greedy) 기법)&lt;/span&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;43,0,0,0&quot;&gt;시험에서는 단서 조항이 붙기에 주의하면서 풀자!&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;43,0,0,0&quot;&gt;압축 과정은 빈도수가 낮은 것부터 합쳐서 올라가기.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;43,0,0,0&quot;&gt;압축한 트리를 보면서 각 알파벳에 대한 코드를 구하고 알파벳을 코드로 바꿔서 나열.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;43,0,0,0&quot;&gt;디코딩은 반대로 트리를 보고 각 알파벳에 대한 코드를 구하고 하나씩 매칭해서 문자열 도출.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;43,1,0&quot;&gt;트라이 (Trie): &lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;문자열 검색&lt;/b&gt;에 최적화된 트리. &lt;/span&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;시간 복잡도는 문자열 길이에 비례($O(L)$).&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;접두사(Prefix)를 공유해서 저장 공간을 아끼고 검색 속도 높이는 N진 트리.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;10,2,0&quot;&gt;단점:&lt;/b&gt; 각 노드마다 자식 포인터(알파벳 26개 등)를 배열로 가지고 있어야 해서 &lt;b data-index-in-node=&quot;45&quot; data-path-to-node=&quot;10,2,0&quot;&gt;메모리를 많이 차지.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;TEA, TEN, IN, ANT 가 있다면 아래와 같이 트리 구성 가능.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;615&quot; data-origin-height=&quot;365&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/N4MuE/dJMcafej6ck/n6Rboga9scKWt63Ja652r1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/N4MuE/dJMcafej6ck/n6Rboga9scKWt63Ja652r1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/N4MuE/dJMcafej6ck/n6Rboga9scKWt63Ja652r1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FN4MuE%2FdJMcafej6ck%2Fn6Rboga9scKWt63Ja652r1%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;237&quot; data-origin-width=&quot;615&quot; data-origin-height=&quot;365&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 style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;  고급 트리&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;관련&lt;/span&gt; 기출 문제를 풀어보고 싶다면?&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&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: #333333;&quot;&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://gemini.google.com/share/64578c690336&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://gemini.google.com/share/64578c690336&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://gemini.google.com/share/c070e2f09791&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://gemini.google.com/share/c070e2f09791&lt;/a&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;&lt;span style=&quot;color: #333333;&quot;&gt; &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; text-align: start;&quot;&gt;다음 포스팅에서는&amp;nbsp;&lt;b&gt;그래프 탐색&lt;/b&gt;에 대해&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; text-align: start;&quot;&gt;&amp;nbsp;정리해 보겠다.&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;</description>
      <category>Study</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/211</guid>
      <comments>https://code-angie.tistory.com/211#entry211comment</comments>
      <pubDate>Wed, 21 Jan 2026 12:47:56 +0900</pubDate>
    </item>
    <item>
      <title>[전산직(데이터) 공무원 대비] 알고리즘 기초부터 파헤치기 3</title>
      <link>https://code-angie.tistory.com/210</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;이제 알고리즘의 허리 역할을 하는 정렬과 탐색으로 넘어가 보자.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 공무원 시험에서는 이 정렬 알고리즘이 얼마나 빠른지(시간 복잡도), 메모리는 얼마나 쓰는지(공간 복잡도), 그리고 데이터가 어떻게 변하는지를 묻는다. &lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;1. 정렬의 양대 산맥: 퀵(Quick) vs 병합(Merge)&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;이 둘은 모두 &lt;b&gt;분할 정복(Divide &amp;amp; Conquer)&lt;/b&gt;을 사용하고 평균 $O(n \log n)$으로 매우 빠르지만, 성격이 완전 다르다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-path-to-node=&quot;5&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5&quot;&gt;(1) 퀵 정렬 (Quick Sort) - &quot;불안정하지만 빠른 천재&quot;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;6&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,0,0&quot;&gt;원리:&lt;/b&gt; 피벗(Pivot)이라는 기준점을 하나 잡는다. 피벗보다 작은놈은 왼쪽, 큰 놈은 오른쪽으로 몰아넣고(Partition) 양쪽을 각각 다시 재귀 호출한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,1,0&quot;&gt;장점:&lt;/b&gt; 추가 메모리가 거의 필요 없고(In-place), 캐시 효율(Cache Hit)이 좋아 &lt;b data-index-in-node=&quot;42&quot; data-path-to-node=&quot;6,1,0&quot;&gt;실제로는 가장 빠르다.&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,2,0&quot;&gt;단점 (치명적):&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;6,2,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,2,1,0,0&quot;&gt;불안정 정렬(Unstable):&lt;/b&gt; 같은 값의 순서가 뒤집힐 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,2,1,1,0&quot;&gt;최악의 경우 $O(n^2)$:&lt;/b&gt; 피벗을 잘못 잡아서(예: 이미 정렬된 배열에서 맨 앞을 피벗으로 함) 한쪽으로만 쏠릴 때 급격히 느려진다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-path-to-node=&quot;7&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;7&quot;&gt;(2) 병합 정렬 (Merge Sort) - &quot;안정적인 모범생&quot;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,0,0&quot;&gt;원리:&lt;/b&gt; 일단 무조건 &lt;b data-index-in-node=&quot;11&quot; data-path-to-node=&quot;8,0,0&quot;&gt;반으로 쪼갭니다.&lt;/b&gt; 더 이상 못 쪼갤 때까지(크기가 1) 쪼갠 다음, &lt;b data-index-in-node=&quot;49&quot; data-path-to-node=&quot;8,0,0&quot;&gt;합치면서(Merge) 정렬한다&lt;/b&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,1,0&quot;&gt;장점:&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8,1,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;입력 데이터가 어떻든 항상 $O(n \log n)$을 보장한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,1,1,1,0&quot;&gt;안정 정렬(Stable):&lt;/b&gt; 순서가 유지된다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,2,0&quot;&gt;단점:&lt;/b&gt; 정렬된 데이터를 잠시 저장할 별도의 메모리 공간($O(n)$)이 반드시 필요하다. (공간 복잡도가 높음)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;10&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;[핵심 비교표] 머릿속에 저장!&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-path-to-node=&quot;11&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;비교 항목&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;퀵 정렬 (Quick Sort)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;병합 정렬 (Merge Sort)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;핵심 원리&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;피벗&amp;nbsp;&lt;/b&gt;기준 분할 (Partition)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;일단 반으로 쪼개고 &lt;b&gt;병합&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-path-to-node=&quot;11,1,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,1,0,0&quot;&gt;평균 시간 복잡도&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-path-to-node=&quot;11,1,1,0&quot;&gt;$O(n \log n)$&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-path-to-node=&quot;11,1,2,0&quot;&gt;$O(n \log n)$&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-path-to-node=&quot;11,2,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,2,0,0&quot;&gt;최악 시간&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-path-to-node=&quot;11,2,1,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,2,1,0&quot;&gt;$O(n^2)$&lt;/b&gt; (피벗 최소/최대로 잡을 시)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-path-to-node=&quot;11,2,2,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,2,2,0&quot;&gt;$O(n \log n)$&lt;/b&gt; (항상 보장)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-path-to-node=&quot;11,4,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,4,0,0&quot;&gt;메모리 (공간 복잡도)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-path-to-node=&quot;11,4,1,0&quot;&gt;&lt;b&gt;적게 씀&lt;/b&gt; ($O(\log n)$ 스택 메모리만 사용)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-path-to-node=&quot;11,4,2,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,4,2,0&quot;&gt;많이 씀&lt;/b&gt; ($O(n)$ 배열 필요)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-path-to-node=&quot;11,4,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,4,0,0&quot;&gt;안전성&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;불안정&amp;nbsp;&lt;/b&gt;(순서 뒤집힘)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-path-to-node=&quot;11,4,2,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,4,2,0&quot;&gt;안정&amp;nbsp;&lt;/b&gt;(순서 유지)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-path-to-node=&quot;11,5,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,5,0,0&quot;&gt;적합한 상황&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;일반적인 배열 정렬 (메모리 제한)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-path-to-node=&quot;11,5,2,0&quot;&gt;Linked List 정렬 (순차 접근 유리)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-path-to-node=&quot;7,0&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt; 암기 포인트:&lt;/b&gt;&lt;/span&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: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&quot;메모리가 부족한 시스템이다?&quot; $\rightarrow$ &lt;b data-index-in-node=&quot;30&quot; data-path-to-node=&quot;7,1,0,0&quot;&gt;퀵 정렬&lt;/b&gt; (단, 최악 방지 피벗 선정 필요)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&quot;입력 데이터의 정렬 상태와 상관없이 일정한 속도가 필요하다?&quot; $\rightarrow$ &lt;b data-index-in-node=&quot;48&quot; data-path-to-node=&quot;7,1,1,0&quot;&gt;병합 정렬&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&quot;Linked List를 정렬한다?&quot; $\rightarrow$ &lt;b data-index-in-node=&quot;33&quot; data-path-to-node=&quot;7,1,2,0&quot;&gt;병합 정렬&lt;/b&gt; (임의 접근이 안 돼도 순차적으로 합치기 좋음)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;h2 style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;1-1. 최신 기출 맛보기&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size20&quot; data-path-to-node=&quot;23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;문제 1. 정렬 비교&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-path-to-node=&quot;15&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;퀵 정렬(Quick Sort)과 병합 정렬(Merge Sort)에 대한 설명으로 &lt;b data-index-in-node=&quot;49&quot; data-path-to-node=&quot;15&quot;&gt;옳지 않은&lt;/b&gt; 것은?&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;16&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;퀵 정렬은 피벗(Pivot)의 선택에 따라 성능 차이가 크게 발생할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;병합 정렬은 연결 리스트(Linked List)를 정렬할 때 배열보다 효율적으로 구현할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;퀵 정렬은 추가적인 메모리 공간을 많이 사용하므로, 메모리가 제한된 시스템에서는 병합 정렬이 더 선호된다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;병합 정렬은 입력 데이터의 정렬 상태와 무관하게 항상 일정한 시간 복잡도를 가진다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-path-to-node=&quot;17&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;17&quot;&gt;(힌트)&lt;/b&gt; 메모리를 &quot;누가 더 많이 먹는지(배열 공간 vs 스택 공간)&quot;를 잘 따져보세요!&lt;/span&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-path-to-node=&quot;17&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;정답: 3번&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-path-to-node=&quot;17&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 완전히 반대로 설명했다. &lt;b data-index-in-node=&quot;31&quot; data-path-to-node=&quot;20&quot;&gt;병합 정렬&lt;/b&gt;은 합병 과정에서 입력 크기만큼의 추가 배열($O(n)$)이 필요하여 메모리를 많이 먹는다. 반면 &lt;b data-index-in-node=&quot;89&quot; data-path-to-node=&quot;20&quot;&gt;퀵 정렬&lt;/b&gt;은 재귀 호출을 위한 스택 메모리($O(\log n)$)만 조금 쓰므로 메모리가 제한된 곳에서 유리하다. &lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-path-to-node=&quot;17&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;2. 기타 정렬 알고리즘 (코드 식별 &amp;amp; 특수 상황용)&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;시험에서 코드를 보여주거나 특수한 상황을 주고 어떤 정렬인지 묻는 유형 대비용&lt;b&gt;&lt;b data-path-to-node=&quot;7,0,0&quot; data-index-in-node=&quot;0&quot;&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;7,1,0&quot;&gt;(2) 삽입 정렬 (InsertionSort) - &quot;이미 정렬된 데이터의 제왕&quot;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-path-to-node=&quot;7,0,1,0,0&quot; data-index-in-node=&quot;0&quot;&gt;원리:&lt;/b&gt;&amp;nbsp;데이터를 하나씩 뽑아서, 앞쪽의 이미 정렬된 부분 사이의&amp;nbsp;&lt;b data-path-to-node=&quot;7,0,1,0,0&quot; data-index-in-node=&quot;36&quot;&gt;적절한 위치에 끼워 넣는다.&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-path-to-node=&quot;7,0,1,1,0&quot; data-index-in-node=&quot;0&quot;&gt;코드 특징:&lt;/b&gt;&amp;nbsp;key 값을 잡고, while 문으로 나보다 큰 놈들을&amp;nbsp;&lt;b data-path-to-node=&quot;7,0,1,1,0&quot; data-index-in-node=&quot;38&quot;&gt;뒤로 미는(Shift)&lt;/b&gt;&amp;nbsp;연산이 보임.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-path-to-node=&quot;7,1,0&quot; data-index-in-node=&quot;0&quot;&gt;(2) 쉘 정렬 (Shell Sort) - &quot;삽입 정렬의 업그레이드&quot;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-path-to-node=&quot;7,1,1&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-path-to-node=&quot;7,1,1,0,0&quot; data-index-in-node=&quot;0&quot;&gt;등장 배경:&lt;/b&gt;&amp;nbsp;삽입 정렬이 '역순'으로 되어 있으면 이동 횟수가 너무 많은 단점을 해결.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-path-to-node=&quot;7,1,1,1,0&quot; data-index-in-node=&quot;0&quot;&gt;핵심:&lt;/b&gt;&amp;nbsp;&lt;b data-path-to-node=&quot;7,1,1,1,0&quot; data-index-in-node=&quot;4&quot;&gt;일정한 간격(Gap)&lt;/b&gt;&amp;nbsp;(예: 5, 3, 1)을 두고 띄엄띄엄 부분 리스트를 만들어 삽입 정렬을 수행함.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-path-to-node=&quot;7,2,0&quot; data-index-in-node=&quot;0&quot;&gt;(3) 선택 정렬 (Selection Sort) - &quot;최솟값 집착남&quot;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-path-to-node=&quot;7,2,1&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-path-to-node=&quot;7,2,1,0,0&quot; data-index-in-node=&quot;0&quot;&gt;원리:&lt;/b&gt;&amp;nbsp;리스트 전체를 훑어서 **가장 작은 값(Min)**을 찾아&amp;nbsp;&lt;b data-path-to-node=&quot;7,2,1,0,0&quot; data-index-in-node=&quot;37&quot;&gt;맨 앞&lt;/b&gt;과 자리를 바꿈.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-path-to-node=&quot;7,2,1,1,0&quot; data-index-in-node=&quot;0&quot;&gt;특징:&lt;/b&gt; 교환(Swap) 횟수가 가장 적음. 하지만 비교 횟수는 많아서 항상 $O(N^2)$임.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;2-1. &lt;/b&gt;&lt;b&gt;최신 기출 맛보기&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-path-to-node=&quot;5&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5&quot;&gt;문제 1. 주어진 데이터에 알맞는 알고리즘&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-path-to-node=&quot;6&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;데이터가 100만 개 있는데, 그중 &lt;b data-index-in-node=&quot;20&quot; data-path-to-node=&quot;6&quot;&gt;단 5개만 제자리에 있지 않고 나머지는 모두 이미 정렬&lt;/b&gt;되어 있다. 이 데이터를 오름차순으로 정렬할 때 &lt;b data-index-in-node=&quot;77&quot; data-path-to-node=&quot;6&quot;&gt;가장 빠른 알고리즘&lt;/b&gt;은?&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;7&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;퀵 정렬 (Quick Sort)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;병합 정렬 (Merge Sort)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;선택 정렬 (Selection Sort)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;삽입 정렬 (Insertion Sort)&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;정답: 4번&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;퀵, 병합 정렬은 데이터 상태와 무관하게 쪼개고 합치느라 평균 $O(N \log N)$의 시간이 걸린다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;하지만&amp;nbsp;&lt;b data-index-in-node=&quot;4&quot; data-path-to-node=&quot;8,1,1,0&quot;&gt;삽입 정렬&lt;/b&gt;은 이미 정렬된 부분은 비교만 쓱 하고 지나가기 때문에, 이런 '거의 정렬된' 상황에서는 **$O(N)$**에 가까운 압도적인 속도를 낸다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;문제 2. 쉘 정렬&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-path-to-node=&quot;11&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;다음 배열을 &lt;b&gt;쉘 정렬(Shell Sort)&lt;/b&gt;을 사용하여 정렬하고자 한다. &lt;b data-index-in-node=&quot;44&quot; data-path-to-node=&quot;11&quot;&gt;간격(Gap)을 3&lt;/b&gt;으로 설정하여 첫 번째 패스를 수행한 후의 &lt;b data-index-in-node=&quot;78&quot; data-path-to-node=&quot;11&quot;&gt;중간 결과&lt;/b&gt;로 옳은 것은?&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-path-to-node=&quot;11&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;초기 상태:&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&amp;nbsp;[9, 1, 2, 5, 3, 4]&lt;/span&gt;&lt;/blockquote&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;13&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;[1, 2, 3, 4, 5, 9]&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;[5, 3, 4, 9, 1, 2]&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;[5, 1, 2, 9, 3, 4]&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;[2, 1, 5, 3, 4, 9]&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p style=&quot;background-color: #fafafa; color: #666666; text-align: start;&quot; data-path-to-node=&quot;14,0&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-path-to-node=&quot;14,0&quot; data-index-in-node=&quot;0&quot;&gt;정답: 3번&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-path-to-node=&quot;14,1&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;간격이 3이므로 인덱스가 3만큼 떨어진 녀석끼리 짝을 지어 비교/교환&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-path-to-node=&quot;14,1,0,1&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;그룹 1 (인덱스 0, 3): 9와 5 비교&amp;nbsp;$\rightarrow$&amp;nbsp;5가 작으므로 교환&amp;nbsp;$\rightarrow$&amp;nbsp;[5, ..., 9, ...]&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;그룹 2 (인덱스 1, 4): 1과 3 비교&amp;nbsp;$\rightarrow$&amp;nbsp;1이 작으므로 그대로.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;그룹 3 (인덱스 2, 5): 2와 4 비교&amp;nbsp;$\rightarrow$&amp;nbsp;2가 작으므로 그대로.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;문제3. 코드 식별 문제&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt; 다음 C언어 코드가 수행하는 정렬 알고리즘의 이름은? &lt;/span&gt;&lt;/p&gt;
&lt;div data-ved=&quot;0CAAQhtANahgKEwic1-KHz5aSAxUAAAAAHQAAAAAQlQo&quot; data-hveid=&quot;0&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;cpp&quot;&gt;&lt;code&gt;for (i = 0; i &amp;lt; n-1; i++) {
    min_idx = i;                // 1. 일단 맨 앞을 제일 작다고 가정
    for (j = i+1; j &amp;lt; n; j++) {
        if (list[j] &amp;lt; list[min_idx]) {
            min_idx = j;        // 2. 더 작은 놈 발견하면 인덱스 갱신
        }
    }
    swap(list[i], list[min_idx]); // 3. 제일 작은 놈을 맨 앞으로 데려옴
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;19&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;삽입 정렬&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;선택 정렬&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;버블 정렬&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;퀵 정렬&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-path-to-node=&quot;20,0&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-path-to-node=&quot;20,0&quot; data-index-in-node=&quot;0&quot;&gt;정답: 2번&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-path-to-node=&quot;20,1&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;코드의 핵심은 min_idx (최솟값의 위치)를 찾는 것.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&quot;가장 작은 값을 선택(Select)해서 맨 앞으로 보낸다&quot;&amp;nbsp;$\rightarrow$&amp;nbsp;&lt;b data-path-to-node=&quot;20,1,1,0&quot; data-index-in-node=&quot;50&quot;&gt;선택 정렬&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;참고: 삽입 정렬은 key 값을 들고 뒤로 미는(j--) 코드가 나온다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-path-to-node=&quot;10&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;3. 검색&lt;/span&gt; (Searching) &amp;amp; 해싱 (Hashing)&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 데이터를 찾는 방법은 크게 '비교' 방식과 '주소 계산' 방식으로 나뉜다. &lt;/span&gt;&lt;/p&gt;
&lt;h4 data-path-to-node=&quot;12&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;12&quot;&gt;1. 이진 탐색 (Binary Search): &quot;업-다운 게임&quot;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;13&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;13,0,0&quot;&gt;조건:&lt;/b&gt; 반드시 데이터가 &lt;b data-index-in-node=&quot;13&quot; data-path-to-node=&quot;13,0,0&quot;&gt;정렬되어 있어야&lt;/b&gt; 한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;13,1,0&quot;&gt;원리:&lt;/b&gt; 중간값(Middle)을 찍어서 찾으려는 값보다 크면 왼쪽, 작으면 오른쪽만 본다. (한 번 비교할 때마다 후보가 절반으로 줄어듦)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;13,2,0&quot;&gt;시간 복잡도:&lt;/b&gt; &lt;b data-index-in-node=&quot;8&quot; data-path-to-node=&quot;13,2,0&quot;&gt;$O(\log n)$&lt;/b&gt; (순차 탐색보다 빠름)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;13,3,0&quot;&gt;최대 비교 횟수:&lt;/b&gt; $\lfloor \log_2 n \rfloor + 1$ (&lt;b&gt;공식 중요!&lt;/b&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-path-to-node=&quot;14&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;14&quot;&gt;2. 해싱 (Hashing): &quot;주소로 바로 찾아가기&quot;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;15&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;15,0,0&quot;&gt;개념:&lt;/b&gt; Key를 해시 함수에 넣으면 주소(Index)가 즉시 나온다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;15,1,0&quot;&gt;시간 복잡도:&lt;/b&gt; 이상적인 경우 &lt;b data-index-in-node=&quot;16&quot; data-path-to-node=&quot;15,1,0&quot;&gt;$O(1)$&lt;/b&gt; (단 한 방에 찾음!)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;15,2,0&quot;&gt;문제점:&lt;/b&gt; 서로 다른 키가 같은 주소를 가리키는 &lt;b data-index-in-node=&quot;26&quot; data-path-to-node=&quot;15,2,0&quot;&gt;충돌(Collision)&lt;/b&gt; 발생.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;13,1,0&quot;&gt;[심화  ] 충돌(Collision) 해결 기법:&lt;/b&gt;&lt;b data-path-to-node=&quot;13,1,1,0,0&quot; data-index-in-node=&quot;0&quot;&gt;&lt;/b&gt;&lt;/span&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: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-path-to-node=&quot;13,1,1,0,0&quot; data-index-in-node=&quot;0&quot;&gt;개방 주소법 (Open Addressing):&lt;/b&gt; 빈방을 찾아서 떠도는 방식이다. 별도의 메모리가 필요 없다. &lt;/span&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: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-path-to-node=&quot;19,0,0&quot; data-index-in-node=&quot;0&quot;&gt;선형 조사법 (Linear Probing):&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-path-to-node=&quot;19,0,1&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;충돌 나면? 바로 옆 칸($+1$) 을 본다. 또 차 있으면? 그 옆 칸($+2$)...&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-path-to-node=&quot;19,0,1,1,0&quot; data-index-in-node=&quot;0&quot;&gt;문제점:&lt;/b&gt;&amp;nbsp;한 곳에 데이터가 뭉치는&amp;nbsp;&lt;b data-path-to-node=&quot;19,0,1,1,0&quot; data-index-in-node=&quot;19&quot;&gt;군집화(Clustering)&lt;/b&gt;&amp;nbsp;현상이 생겨 성능 저하 발생. ($O(1) \to O(n)$)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-path-to-node=&quot;19,1,0&quot; data-index-in-node=&quot;0&quot;&gt;이중 해싱 (Double Hashing):&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-path-to-node=&quot;19,0,1&quot;&gt;
&lt;li style=&quot;list-style-type: none;&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-path-to-node=&quot;19,1,1&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;충돌 나면?&amp;nbsp;&lt;b data-path-to-node=&quot;19,1,1,0,0&quot; data-index-in-node=&quot;7&quot;&gt;다른 해시 함수&lt;/b&gt;를 한 번 더 돌려서 점프할 보폭을 정한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;규칙적이지 않게 띄엄띄엄 저장해서 군집화 방지.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; $h(k, i) = (h_1(k) + i \times h_2(k)) \pmod M$ &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 첫 번째 해시($h_1$)로 주소를 잡고, 충돌 시 두 번째 해시($h_2$) 결과만큼 보폭(Jump)을 주어 이동함. &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;19,2,0&quot;&gt;체이닝 (Chaining):&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;19,2,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;충돌 나면? 해당 칸에 연결 리스트(Linked List)를 달아서 줄줄이 매달아 버린다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;테이블이 꽉 차도 계속 데이터를 넣을 수 있지만, 추가 메모리가 든다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;3-1. 최신 기출 맛보기&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size20&quot; data-path-to-node=&quot;23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;문제 1. 해싱 주소 계산&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;크기가 11인 해시 테이블(인덱스 0~10)이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;해시 함수 $h(k) = k \pmod 11$ 을 사용하고, 충돌 시 선형 조사법(Linear Probing)으로 해결한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터 [12, 25, 45, 14]가 순서대로 들어올 때, 14가 저장될 인덱스는?&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;24&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;4&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;5&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-path-to-node=&quot;25&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;25&quot;&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-path-to-node=&quot;25&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-path-to-node=&quot;17&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;정답: 2번&amp;nbsp;&lt;/b&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: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;37,0,0&quot;&gt;12:&lt;/b&gt; $12 \% 11 = 1$ &amp;rarr; &lt;b data-index-in-node=&quot;19&quot; data-path-to-node=&quot;37,0,0&quot;&gt;[1번 인덱스]&lt;/b&gt; 저장&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;37,1,0&quot;&gt;25:&lt;/b&gt; $25 \% 11 = 3$ &amp;rarr; &lt;b data-index-in-node=&quot;19&quot; data-path-to-node=&quot;37,1,0&quot;&gt;[3번 인덱스]&lt;/b&gt; 저장&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;37,2,0&quot;&gt;45:&lt;/b&gt; $45 \% 11 = 1$ &amp;rarr; (1번 꽉 참, 충돌!) &amp;rarr; 옆 칸(2번) 확인 &amp;rarr; &lt;b data-index-in-node=&quot;48&quot; data-path-to-node=&quot;37,2,0&quot;&gt;[2번 인덱스]&lt;/b&gt; 저장&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;37,3,0&quot;&gt;14:&lt;/b&gt; $14 \% 11 = 3$ &amp;rarr; (3번 꽉 참, 충돌!) &amp;rarr; 옆 칸(4번) 확인 &amp;rarr; &lt;b data-index-in-node=&quot;48&quot; data-path-to-node=&quot;37,3,0&quot;&gt;[4번 인덱스]&lt;/b&gt; 저장&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-path-to-node=&quot;17&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-path-to-node=&quot;15&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;4. [심화] 문자열 매칭 (String Matching)&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-path-to-node=&quot;16&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 긴 글($T$)에서 특정 단어($P$)를 찾는 특수 알고리즘이다. 이름과 특징만 매칭해도 문제를 풀 수 있다. &lt;/span&gt;&lt;/p&gt;
&lt;h4 data-path-to-node=&quot;17&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;17&quot;&gt;(1) 브루트 포스 (Brute Force)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;18&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;무식하게 한 칸씩 비교. 틀리면 한 칸 이동해서 처음부터 다시.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시간 복잡도: &lt;b data-index-in-node=&quot;8&quot; data-path-to-node=&quot;18,1,0&quot;&gt;$O(MN)$&lt;/b&gt; (매우 느림)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-path-to-node=&quot;19&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;19&quot;&gt;(2) KMP 알고리즘 (Knuth-Morris-Pratt)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;20&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;글자가 틀렸을 때, &lt;b data-index-in-node=&quot;15&quot; data-path-to-node=&quot;20,0,0&quot;&gt;&quot;어디까지 맞았는지 아니까, 접두사/접미사 일치 길이만큼 점프하자!&quot;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 핵심 키워드: &lt;b data-index-in-node=&quot;8&quot; data-path-to-node=&quot;42,1,1,1,0&quot;&gt;실패 함수 ($\pi$(pi) 배열:&lt;/b&gt; 일치하는 길이 미리 계산), Backtracking 없음.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 시간 복잡도 : &lt;b data-index-in-node=&quot;4&quot; data-path-to-node=&quot;20,2,0&quot;&gt;$O(N+M)$&lt;/b&gt; (검색할 문자열 길이 + 패턴 길이). 뒤로 돌아가지 않음(Backtracking X).&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-path-to-node=&quot;21&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;21&quot;&gt;(3) 라빈-카프 (Rabin-Karp)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;22&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문자열을 숫자(해시값)로 변환해서 비교.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 핵심 키워드: &lt;b data-index-in-node=&quot;8&quot; data-path-to-node=&quot;42,2,1,1,0&quot;&gt;롤링 해시 (Rolling Hash)&lt;/b&gt; - 창문을 밀듯이 이전 값에 맨 앞 값 빼고 맨 뒤 값 더해서 해시 갱신. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 시간 복잡도 : 평균 &lt;b&gt;$O(N+M)$&lt;/b&gt;, 최악 &lt;b&gt;$O(MN)$&lt;/b&gt; (해시 충돌 시).&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-path-to-node=&quot;11&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;(4) 보이어-무어 알고리즘 (Boyer-Moore)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;12&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;패턴의 &lt;b data-index-in-node=&quot;8&quot; data-path-to-node=&quot;12,0,0&quot;&gt;오른쪽 끝에서 왼쪽으로&lt;/b&gt; 비교한다. (KMP와 반대 방향!)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;원리: 글자가 틀렸을 때, 패턴에 아예 없는 글자라면 &lt;b data-index-in-node=&quot;30&quot; data-path-to-node=&quot;12,1,0&quot;&gt;패턴 길이만큼 통째로 건너뜀(Skip)&lt;/b&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt; &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333; text-align: start;&quot;&gt;시간 복잡도&lt;/span&gt; : 일반적인 상용 프로그램(문서 편집기 찾기 기능)에서 가장 많이 쓰임. 최선의 경우 &lt;b&gt;$O(N/M)$&lt;/b&gt;으로 패턴이 길수록 오히려 빨라짐.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-path-to-node=&quot;13&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;(5) 트라이 (Trie) - &quot;문자열 검색 전용 트리&quot;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;14&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;문자열 집합을 저장하고 빠르게 검색하기 위한 &lt;b data-index-in-node=&quot;29&quot; data-path-to-node=&quot;14,0,0&quot;&gt;트리(Tree)&lt;/b&gt; 자료구조.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;구조: 루트에서부터 글자 하나씩 링크를 따라 내려가는 구조. (예: 자동 완성 기능)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;시간 복잡도: 찾으려는 문자열의 길이가 $L$일 때, &lt;b data-index-in-node=&quot;28&quot; data-path-to-node=&quot;14,2,0&quot;&gt;$O(L)$&lt;/b&gt;.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;14,2,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;i data-index-in-node=&quot;0&quot; data-path-to-node=&quot;14,2,1,0,0&quot;&gt;중요:&lt;/i&gt; 데이터가 100만 개가 있어도, 단어 길이($L$)만큼만 가면 찾음. 데이터 개수($N$)와 무관하게 빠름.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;  더 많은 &lt;span style=&quot;text-align: start;&quot;&gt;정렬과 탐색&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;관련&lt;/span&gt; 문제를 풀어보고 싶다면?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;제미나이가 만든 퀴즈 풀어보기 &lt;a style=&quot;color: #333333;&quot; href=&quot;https://gemini.google.com/share/3a1d980cc779&quot;&gt;https://gemini.google.com/share/3a1d980cc779&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;[제미나이 퀴즈 오답노트]&lt;/span&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-path-to-node=&quot;6,0,0&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,0,0&quot;&gt;[6번 문제]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-path-to-node=&quot;6,0,0&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,0,0&quot;&gt;실패 함수(Failure Function)의 정의:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;6,0,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;패턴 내에서 &quot;접두사(Prefix)와 접미사(Suffix)가 일치하는 최대 길이&quot;를 저장한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,0,1,1,0&quot;&gt;왜?&lt;/b&gt; 매칭에 실패했을 때, &quot;앞부분 이만큼은 똑같으니까 다시 비교하지 말고 건너뛰자!&quot;라고 점프할 위치를 알려주기 때문에.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;실전 계산&lt;/b&gt;: ABABAC의 $\pi$ 배열 구하기&lt;/span&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;6,1,1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;A (길이 1): 접두/접미사 없음 $\to$ &lt;b data-index-in-node=&quot;24&quot; data-path-to-node=&quot;6,1,1,0,0&quot;&gt;0&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;AB (길이 2): A $\neq$ B $\to$ &lt;b data-index-in-node=&quot;24&quot; data-path-to-node=&quot;6,1,1,1,0&quot;&gt;0&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;ABA (길이 3): 앞의 A == 뒤의 A $\to$ &lt;b data-index-in-node=&quot;29&quot; data-path-to-node=&quot;6,1,1,2,0&quot;&gt;1&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;ABAB (길이 4): 앞의 AB == 뒤의 AB $\to$ &lt;b data-index-in-node=&quot;32&quot; data-path-to-node=&quot;6,1,1,3,0&quot;&gt;2&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;ABABA (길이 5): 앞의 ABA == 뒤의 ABA $\to$ &lt;b data-index-in-node=&quot;35&quot; data-path-to-node=&quot;6,1,1,4,0&quot;&gt;3&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;ABABAC (길이 6): 앞의 ABABA... 뒤가 C라 안 맞음 $\to$ &lt;b data-index-in-node=&quot;42&quot; data-path-to-node=&quot;6,1,1,5,0&quot;&gt;0&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;글자를 하나씩 늘려가며 (접두사 == 접미사)가 되는 가장 긴 길이를 찾는다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;[7번 문제] &lt;/b&gt;&lt;span style=&quot;caret-color: auto; letter-spacing: 0px;&quot;&gt;공간 복잡도가 가장 큰 정렬 알고리즘은?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;11&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,0,0&quot;&gt;퀵 정렬:&lt;/b&gt; 재귀 호출을 위한 스택 메모리만 필요 $\rightarrow$ &lt;b data-index-in-node=&quot;39&quot; data-path-to-node=&quot;11,0,0&quot;&gt;$O(\log n)$&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,1,0&quot;&gt;힙 정렬:&lt;/b&gt; 배열 안에서 자리만 바꿈 (In-place) $\rightarrow$ &lt;b data-index-in-node=&quot;43&quot; data-path-to-node=&quot;11,1,0&quot;&gt;$O(1)$&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,2,0&quot;&gt;선택 정렬:&lt;/b&gt; 변수 하나(temp)만 있으면 됨 $\rightarrow$ &lt;b data-index-in-node=&quot;38&quot; data-path-to-node=&quot;11,2,0&quot;&gt;$O(1)$&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,3,0&quot;&gt;병합 정렬 (Merge Sort):&lt;/b&gt; (정답)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;11,3,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;두 리스트를 합칠 때, 데이터를 잠시 옮겨 담을 입력 크기만한 임시 배열(List)이 반드시 필요하다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,3,1,1,0&quot;&gt;공간 복잡도: $O(n)$&lt;/b&gt; (가장 많이 씀)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;한번 더 퀵 정렬과 병합 정렬 비교하고 넘어가기!&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-path-to-node=&quot;8&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;퀵 정렬 vs 병합 정렬 (결정적 차이)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-path-to-node=&quot;9&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;9&quot;&gt;관련 문제: 1번, 4번, 7번&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-path-to-node=&quot;10&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&quot;둘 다 $O(n \log n)$인데 뭐가 달라요?&quot;라고 묻는다면 아래 3가지를 대답해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;11&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,0,0&quot;&gt;안정성 (Stability):&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;11,0,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,0,1,0,0&quot;&gt;병합(Merge):&lt;/b&gt; &lt;b data-index-in-node=&quot;11&quot; data-path-to-node=&quot;11,0,1,0,0&quot;&gt;안정&lt;/b&gt;. 합칠 때(Merge) 앞의 리스트에 있는 값을 먼저 넣으면 순서가 유지.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,0,1,1,0&quot;&gt;퀵(Quick):&lt;/b&gt; &lt;b data-index-in-node=&quot;10&quot; data-path-to-node=&quot;11,0,1,1,0&quot;&gt;불안정&lt;/b&gt;. 피벗을 기준으로 휙휙 교환(Swap)하다 보면 원래 순서가 뒤집힘.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,1,0&quot;&gt;메모리 (Space Complexity):&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;11,1,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,1,1,0,0&quot;&gt;병합(Merge):&lt;/b&gt; 합칠 때 데이터를 잠시 둘 입력 크기만한 임시 배열($O(n)$)이 무조건 필요. (공간 낭비 큼)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,1,1,1,0&quot;&gt;퀵(Quick):&lt;/b&gt; 추가 배열 없이 재귀 호출을 위한 스택 공간($O(\log n)$)만 있으면 됨. (제자리 정렬)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,2,0&quot;&gt;최악의 경우 (Worst Case):&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;11,2,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,2,1,0,0&quot;&gt;퀵(Quick):&lt;/b&gt; &lt;b data-index-in-node=&quot;10&quot; data-path-to-node=&quot;11,2,1,0,0&quot;&gt;이미 정렬된 데이터&lt;/b&gt;에서 피벗을 최소/최대로 잡으면 $O(n^2)$이 됨. (분할이 1개, N-1개로 됨)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,2,1,1,0&quot;&gt;병합(Merge):&lt;/b&gt; 데이터가 정렬돼 있든 말든 무조건 반으로 쪼개므로 항상 $O(n \log n)$.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;[8번 문제]&lt;/b&gt;&amp;nbsp;시간 복잡도가 $O(N+M)$인 알고리즘은?&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;16&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;16,0,0&quot;&gt;브루트 포스:&lt;/b&gt; 본문($N$)의 모든 위치에서 패턴($M$)을 비교 $\rightarrow$ $O(NM)$ (느림)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;16,1,0&quot;&gt;이진 탐색:&lt;/b&gt; 정렬된 &lt;b data-index-in-node=&quot;11&quot; data-path-to-node=&quot;16,1,0&quot;&gt;숫자&lt;/b&gt;를 찾는 것 $\rightarrow$ $O(\log n)$ (문자열 매칭 아님)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;버블 정렬:&lt;/b&gt; 인접한 두 원소를 비교해서 자리를 바꿈 &lt;span style=&quot;background-color: #fafafa; text-align: start;&quot; data-math=&quot;\rightarrow&quot; data-index-in-node=&quot;33&quot;&gt;$\rightarrow$&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; text-align: start;&quot; data-math=&quot;O(NM)&quot; data-index-in-node=&quot;45&quot;&gt;$O(&lt;span style=&quot;background-color: #fafafa; text-align: start;&quot;&gt;n^2&lt;/span&gt;)$&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;16,2,0&quot;&gt;KMP 알고리즘:&lt;/b&gt; (정답)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;16,2,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;본문은 뒤로 돌아가지 않고 쭉 훑음 ($N$)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;패턴은 미리 실패 함수를 계산해둠 ($M$)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;둘을 합쳐&lt;b&gt; $O(N+M)$&lt;/b&gt;이라는 환상적인 속도를 냄.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;[9번 문제]&amp;nbsp;&lt;/b&gt;비교 정렬의 한계 (Lower Bound)&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;19&quot;&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;20&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&quot;왜 정렬은 $O(n \log n)$보다 빨라질 수 없나요?&quot;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;두 수를 비교(Yes/No)해서 순서를 정하는 방식(비교 기반 정렬)은 수학적으로 &lt;b&gt;의사 결정 트리(Decision Tree)&lt;/b&gt;의 높이만큼 시간이 걸림.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;이 트리의 최소 높이가 $\log(n!)$이며, 이는 약 &lt;b&gt;$n \log n$&lt;/b&gt;에 해당.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;(참고: 비교하지 않는 '기수 정렬(Radix Sort)' 등은 $O(n)$이 가능하지만, 특수한 경우에만 사용.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;[10번 문제]&lt;/b&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;19&quot;&gt;&lt;/b&gt; 이진 탐색(Binary Search)에 가장 적합한 자료구조는?&lt;/span&gt;&lt;/p&gt;
&lt;p data-path-to-node=&quot;20&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&quot;업-다운 게임&quot;을 생각하면 사회자가 &quot;가운데 숫자를 봐!&quot;라고 했을 때, &lt;b data-index-in-node=&quot;49&quot; data-path-to-node=&quot;20&quot;&gt;즉시($O(1)$)&lt;/b&gt; 볼 수 있어야 함.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;21&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;21,0,0&quot;&gt;정렬된 배열 (Sorted Array):&lt;/b&gt; arr[mid]로 &lt;b data-index-in-node=&quot;33&quot; data-path-to-node=&quot;21,0,0&quot;&gt;한 방에 접근 가능&lt;/b&gt;. $\rightarrow$ &lt;b data-index-in-node=&quot;57&quot; data-path-to-node=&quot;21,0,0&quot;&gt;최적 ($O(\log n)$ 유지)&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;21,1,0&quot;&gt;정렬된 연결 리스트 (Sorted Linked List):&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;21,1,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;가운데를 보려면? &quot;첫 번째 노드야, 다음, 다음, 다음...&quot; 하고 절반을 걸어가야 함.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;중간 가는 데만 $O(n)$이 걸리므로, 이진 탐색의 의미가 사라짐. (결국 $O(n)$ 됨)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;22,0&quot;&gt;결론:&lt;/b&gt;&lt;span style=&quot;caret-color: auto; letter-spacing: 0px;&quot;&gt; 이진 탐색은 반드시 &lt;/span&gt;&lt;b data-index-in-node=&quot;15&quot; data-path-to-node=&quot;22,0&quot;&gt;'인덱스로 접근 가능한(Random Access)' 배열&lt;/b&gt;&lt;span style=&quot;caret-color: auto; letter-spacing: 0px;&quot;&gt;에서만 쓴다.&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;span style=&quot;text-align: start;&quot;&gt;다음 포스팅에서는 &lt;b&gt;트리와 힙&lt;/b&gt;에 대해&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;정리해 보겠다.&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;</description>
      <category>Study</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/210</guid>
      <comments>https://code-angie.tistory.com/210#entry210comment</comments>
      <pubDate>Mon, 19 Jan 2026 12:04:59 +0900</pubDate>
    </item>
    <item>
      <title>[전산직(데이터) 공무원 대비] 알고리즘 기초부터 파헤치기 2</title>
      <link>https://code-angie.tistory.com/209</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt; 본격적인 알고리즘(정렬, 탐색 등)으로 들어가기 전에, 이미 알고 있겠지만 살짝 훑어보는 느낌으로 &lt;b&gt;선형 &lt;/b&gt;&lt;b data-index-in-node=&quot;55&quot; data-path-to-node=&quot;7&quot;&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt; 시험에는 &quot;이 상황에서 어떤 자료구조를 쓰는 게 효율적인가?&quot;를 묻거나, 스택/큐의 연산 순서를 추적하는 문제가 출제된다. &lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;1. 선형 자료구조 (배열 vs 연결 리스트)&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;자료구조의 가장 기본인 &lt;b&gt;배열&lt;/b&gt;(Array)과 &lt;b&gt;연결 리스트&lt;/b&gt;(Linked List)를 비교해보자.&lt;span style=&quot;text-align: start;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;18&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;18&quot;&gt;핵심 이론: 한 눈에 비교&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-path-to-node=&quot;19&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;배열 (Array)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;연결 리스트 (Linked List)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;19,1,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;19,1,0,0&quot;&gt;메모리 구조&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;19,1,1,0&quot;&gt;연속된 공간에 할당 (밀집)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;19,1,2,0&quot;&gt;흩어진 공간을 포인터로 연결 (분산)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;19,1,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;19,1,0,0&quot;&gt;메모리 효율&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;19,1,1,0&quot;&gt;공간 낭비 적음 (데이터만 저장)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;19,1,2,0&quot;&gt;공간 낭비 있음 (포인터 별도 저장 공간 필요)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;19,2,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;19,2,0,0&quot;&gt;접근 속도&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;19,2,1,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;19,2,1,0&quot;&gt;$O(1)$&lt;/b&gt; (인덱스로 즉시 접근)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;19,2,2,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;19,2,2,0&quot;&gt;$O(n)$&lt;/b&gt; (첫 노드부터 순차 탐색)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;19,3,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;19,3,0,0&quot;&gt;삽입/삭제&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;19,3,1,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;19,3,1,0&quot;&gt;$O(n)$&lt;/b&gt; (데이터를 밀거나 당겨야 함)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;19,3,2,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;19,3,2,0&quot;&gt;$O(1)$&lt;/b&gt; (링크만 끊고 연결하면 됨, 위치 아는 경우)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;19,4,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;19,4,0,0&quot;&gt;크기&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;19,4,1,0&quot;&gt;&lt;b&gt;고정적&lt;/b&gt; (생성 후 변경 불가)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;19,4,2,0&quot;&gt;&lt;b&gt;동적&lt;/b&gt; (필요할 때마다 늘림)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;19,5,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;19,5,0,0&quot;&gt;활용&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;19,5,1,0&quot;&gt;데이터 조회가 많고 데이 크기가 고정될 때&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-path-to-node=&quot;19,5,2,0&quot;&gt;데이터 삽입/삭제가 빈번할 때&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;1-1. 최신 기출 맛보기&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-path-to-node=&quot;23&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 1. 선형 자료구조 비교&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-path-to-node=&quot;23&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;단일 연결 리스트(Singly Linked List)와 비교할 때, 배열(Array)의 장점에 해당하는 것만 모두 고른 것은?&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-path-to-node=&quot;24&quot; data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;ㄱ. $i$번째 원소에 접근하는 시간이 빠르다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;ㄴ. 원소의 삽입과 삭제가 번거롭지 않고 빠르다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;ㄷ. 연속된 메모리 공간을 사용하므로 공간 지역성(Locality)이 좋다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;ㄹ. 메모리를 동적으로 할당하여 낭비가 없다.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;25&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;ㄱ, ㄷ&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;ㄱ, ㄹ&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;ㄴ, ㄷ&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;ㄴ, ㄹ&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;정답: 1번&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;1,0,0&quot;&gt;ㄱ (O):&lt;/b&gt; 배열은 인덱스를 알면 $O(1)$만에 즉시 접근(Random Access) 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;1,1,0&quot;&gt;ㄷ (O):&lt;/b&gt; 메모리 상에 데이터가 붙어 있어 캐시 적중률(Cache Hit Ratio)이 높음 (공간 지역성)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;1,2,0&quot;&gt;ㄴ (X):&lt;/b&gt; 배열 중간에 삽입/삭제하려면 뒤의 데이터를 모두 밀거나 당겨야 해서 $O(n)$이 걸림 (연결 리스트가 $O(1)$로 유리)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;1,3,0&quot;&gt;ㄹ (X):&lt;/b&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;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;2. 선형 자료구조의: 응용 스택(Stack)과 큐(Queue)&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt; 데이터의 입출력 순서나 포인터(Top, Front, Rear)의 이동을 묻는 문제가 주로 나온다. &lt;/span&gt;&lt;/p&gt;
&lt;h4 data-path-to-node=&quot;3&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;(1) 스택 (Stack): LIFO (Last-In, First-Out)&lt;/b&gt;&lt;/span&gt;&lt;/h4&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;개념: &lt;/b&gt;&quot;나중에 들어간 놈이 먼저 나온다.&quot; (후입선출)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;비유: &lt;/b&gt;프링글스 통, 쌓여있는 종이컵&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5,0,0&quot;&gt;구조:&lt;/b&gt; &lt;b&gt;한쪽 끝&lt;/b&gt;(&lt;b data-index-in-node=&quot;9&quot; data-path-to-node=&quot;5,0,0&quot;&gt;Top&lt;/b&gt;)에서만 삽입과 삭제 발생&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5,1,0&quot;&gt;핵심 연산 ($O(1)$):&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;5,1,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Push(x): Top 위에 데이터 쌓기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Pop(): Top에 있는 데이터 꺼내기&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5,2,0&quot;&gt;활용:&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;5,2,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5,2,1,0,0&quot;&gt;재귀 함수(Recursion)의 호출 관리&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;웹 브라우저 '뒤로 가기'&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;괄호 검사 (()()) (짝 맞추기)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;후위 표기식(Postfix)&lt;/b&gt; 계산&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5,3,0&quot;&gt;주의:&lt;/b&gt; 꽉 찼는데 더 넣으면 &lt;b data-index-in-node=&quot;16&quot; data-path-to-node=&quot;5,3,0&quot;&gt;Overflow&lt;/b&gt;, 비었는데 꺼내면 &lt;b data-index-in-node=&quot;35&quot; data-path-to-node=&quot;5,3,0&quot;&gt;Underflow&lt;/b&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;h4 data-path-to-node=&quot;7&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;(2) 큐 (Queue): FIFO (First-In, First-Out)&lt;/b&gt;&lt;/span&gt;&lt;/h4&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt; &lt;b&gt;개념:&amp;nbsp;&lt;/b&gt; &quot;먼저 들어간 놈이 먼저 나온다.&quot; (선입선출)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;비유: &lt;/b&gt;식당 대기 줄, 프린터 인쇄 대기열&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;9,0,0&quot;&gt;구조:&lt;/b&gt; &lt;b&gt;뒤&lt;/b&gt;(&lt;b data-index-in-node=&quot;6&quot; data-path-to-node=&quot;9,0,0&quot;&gt;Rear&lt;/b&gt;)로 들어와서 &lt;b&gt;앞&lt;/b&gt;(&lt;b data-index-in-node=&quot;20&quot; data-path-to-node=&quot;9,0,0&quot;&gt;Front&lt;/b&gt;)으로 나갑니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;9,1,0&quot;&gt;핵심 연산 ($O(1)$):&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;9,1,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Enqueue(x): 줄 맨 뒤에 세움 ($\text{Rear} = \text{Rear} + 1$)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Dequeue(): 줄 맨 앞 사람을 내보냄 ($\text{Front} = \text{Front} + 1$)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;9&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;9,2,0&quot;&gt;활용:&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;9,2,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;운영체제의 &lt;b data-index-in-node=&quot;6&quot; data-path-to-node=&quot;9,2,1,0,0&quot;&gt;프로세스 스케줄링&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;9,2,1,1,0&quot;&gt;BFS (너비 우선 탐색)&lt;/b&gt; 알고리즘&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;버퍼(Buffer)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-path-to-node=&quot;11&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;(3) 원형 큐&lt;/b&gt; &lt;b&gt;(Circular Queue)&lt;/b&gt; &lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;공무원 시험에 나오는 큐는 90%가 '원형 큐'라고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;선형 큐는 데이터를 꺼내면 앞쪽 공간이 비어서 낭비되는데, 이를 해결하기 위해 배열의 끝과 시작을 이어 붙인 형태이다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;13&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;13,0,0&quot;&gt;인덱스 계산 공식 (암기 필수!)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;13,0,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,0,0&quot;&gt;초기 상태:&lt;/b&gt; Front = Rear = 0 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;인덱스 계산: &lt;/b&gt;다음 위치 = (현재위치 + 1) % 배열크기 (나머지 연산 MOD 사용)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,1,0&quot;&gt;데이터 삽입 (Enqueue):&lt;/b&gt; Rear = (Rear + 1) % N 하고 저장&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,2,0&quot;&gt;데이터 삭제 (Dequeue):&lt;/b&gt; Front = (Front + 1) % N 하고 삭제&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;13,0,1,2,0&quot;&gt;포화(Full) 상태:&lt;/b&gt; (Rear + 1) % size == Front&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;13,0,1,3,0&quot;&gt;공백(Empty) 상태:&lt;/b&gt; Front == Rear&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;2-1. 최신 기출 맛보기&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot; data-path-to-node=&quot;23&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 1. 스택과 큐 동작&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;크기가 충분한 스택(S)과 큐(Q)가 있다. 다음 연산을 순서대로 수행했을 때, &lt;b data-index-in-node=&quot;49&quot; data-path-to-node=&quot;17&quot;&gt;최종적으로 출력되는 값의 순서&lt;/b&gt;는?&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. S.push(A) &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2. S.push(B) &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3. Q.enqueue(C) &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;4. Q.enqueue(D) &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;5. S.pop() -&amp;gt; 출력 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;6. Q.enqueue(S.pop()) &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;7. Q.dequeue() -&amp;gt; 출력 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;8. Q.dequeue() -&amp;gt; 출력&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;B, C, A&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;B, C, D&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;A, C, D&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;B, D, A&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;정답: 2번&lt;/b&gt;&lt;b&gt;&lt;/b&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;34,0,0&quot;&gt;4번까지의 스택과 큐 상태: S:&lt;/b&gt; [A, B] / &lt;b data-index-in-node=&quot;12&quot; data-path-to-node=&quot;34,0,0&quot;&gt;Q:&lt;/b&gt; [C, D]&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;34,1,0&quot;&gt;5번:&lt;/b&gt; S.pop() &amp;rarr; &lt;b data-index-in-node=&quot;14&quot; data-path-to-node=&quot;34,1,0&quot;&gt;B 출력&lt;/b&gt; (S: [A])&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;34,2,0&quot;&gt;6번:&lt;/b&gt; S.pop() &amp;rarr; A 반환, Q에 삽입 &amp;rarr; &lt;span style=&quot;background-color: #fafafa; text-align: start;&quot;&gt;&lt;b&gt;S&lt;/b&gt;: []&lt;/span&gt; / &lt;b data-index-in-node=&quot;28&quot; data-path-to-node=&quot;34,2,0&quot;&gt;Q:&lt;/b&gt; [C, D, A]&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;34,3,0&quot;&gt;7번:&lt;/b&gt; Q.deq() &amp;rarr; &lt;b data-index-in-node=&quot;14&quot; data-path-to-node=&quot;34,3,0&quot;&gt;C 출력&lt;/b&gt; (Q: [D, A])&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;34,4,0&quot;&gt;8번:&lt;/b&gt; Q.deq() &amp;rarr; &lt;b data-index-in-node=&quot;14&quot; data-path-to-node=&quot;34,4,0&quot;&gt;D 출력&lt;/b&gt; (Q: [A])&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-path-to-node=&quot;23&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 2. 원형 큐 인덱스 계산&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-path-to-node=&quot;9&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;크기가 &lt;b data-index-in-node=&quot;8&quot; data-path-to-node=&quot;9&quot;&gt;5&lt;/b&gt;인 배열 Q[0...4]를 사용하는 원형 큐가 있다. 초기에 Front = 0, Rear = 0인 상태에서 다음 연산을 수행했을 때, &lt;b data-index-in-node=&quot;84&quot; data-path-to-node=&quot;9&quot;&gt;최종적인 Front와 Rear의 값&lt;/b&gt;은?&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-path-to-node=&quot;10&quot; data-ke-style=&quot;style3&quot;&gt;
&lt;p data-path-to-node=&quot;10,0&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;연산 순서:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;10,1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Enqueue(A)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Enqueue(B)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Dequeue()&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Enqueue(C)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Enqueue(D)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Dequeue()&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Enqueue(E)&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;11&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Front: 1, Rear: 3&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Front: 2, Rear: 0&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Front: 2, Rear: 4&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Front: 3, Rear: 1&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;12&quot;&gt;(힌트)&lt;/b&gt; 배열 크기가 5이므로 인덱스는 4를 넘어가면 다시 0이 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;정답: 2번&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;3&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,0,0&quot;&gt;초기 상태:&lt;/b&gt; F=0, R=0&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Enq(A): R이 1 증가 $\rightarrow$ &lt;b data-index-in-node=&quot;28&quot; data-path-to-node=&quot;3,1,0&quot;&gt;R=1&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Enq(B): R이 1 증가 $\rightarrow$ &lt;b data-index-in-node=&quot;28&quot; data-path-to-node=&quot;3,2,0&quot;&gt;R=2&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Deq(): F가 1 증가 $\rightarrow$ &lt;b data-index-in-node=&quot;27&quot; data-path-to-node=&quot;3,3,0&quot;&gt;F=1&lt;/b&gt; (A 삭제)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Enq(C): R이 1 증가 $\rightarrow$ &lt;b data-index-in-node=&quot;28&quot; data-path-to-node=&quot;3,4,0&quot;&gt;R=3&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Enq(D): R이 1 증가 $\rightarrow$ &lt;b data-index-in-node=&quot;28&quot; data-path-to-node=&quot;3,5,0&quot;&gt;R=4&lt;/b&gt; (배열 끝 도달!)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Deq(): F가 1 증가 $\rightarrow$ &lt;b data-index-in-node=&quot;27&quot; data-path-to-node=&quot;3,6,0&quot;&gt;F=2&lt;/b&gt; (B 삭제)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,7,0&quot;&gt;Enq(E):&lt;/b&gt; R이 1 증가해야 하는데, (4 + 1) % 5 = 0이 되므로 $\rightarrow$ &lt;b data-index-in-node=&quot;56&quot; data-path-to-node=&quot;3,7,0&quot;&gt;R=0&lt;/b&gt; (뱅글 돌아감)&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-path-to-node=&quot;4&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$\therefore$ 최종 결과: &lt;b data-index-in-node=&quot;18&quot; data-path-to-node=&quot;4&quot;&gt;Front: 2, Rear: 0&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-path-to-node=&quot;4&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&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: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;R은 항상 다음 값이 들어올 자리에 가있다는 것을 잊지 말기!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;새로운 값을 입력하고 옆자리로 R이 이동하는 것까지 마무리해야 한다.&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;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot; data-path-to-node=&quot;23&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 3. 수식 표기법 변환 (중위 -&amp;gt; 후위) &lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;다음 중위 표기식을 후위 표기식으로 바르게 변환한 것은?&lt;/span&gt;&lt;/p&gt;
&lt;div data-path-to-node=&quot;14&quot;&gt;
&lt;blockquote data-math=&quot;A * (B + C) - D&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;$$A * (B + C) - D$$&lt;/span&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;15&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-index-in-node=&quot;0&quot; data-math=&quot;A B C + * D -&quot;&gt;$A B C + * D -$&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-index-in-node=&quot;0&quot; data-math=&quot;A B + C * D -&quot;&gt;$A B + C * D -$&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-index-in-node=&quot;0&quot; data-math=&quot;A B C * + D -&quot;&gt;$A B C * + D -$&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot; data-index-in-node=&quot;0&quot; data-math=&quot;A * B C + D -&quot;&gt;$A * B C + D -$&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;(힌트) &lt;/b&gt;우선순위: &lt;b&gt;&lt;b data-index-in-node=&quot;14&quot; data-path-to-node=&quot;42&quot;&gt;괄호 &amp;gt; 곱셈/나눗셈 &amp;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;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt; &lt;b&gt;정답: 1번&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fcfcfc; text-align: left;&quot;&gt;$A * (B + C) - D$의 변환 과정 추적&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fcfcfc; color: #333333; text-align: left; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;우선순위: 괄호 &amp;gt; * &amp;gt; + , -&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 100%; height: 231px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt; 읽은 문자 &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt; 스택 상태 (Top은 오른쪽) &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt; 출력(결과) &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt; 설명 &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;A&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;A&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;피연산자는 바로 출력&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;*&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;*&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;A&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;스택이 비었으니 Push&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;* (&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;A&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;괄호 시작은 무조건 Push&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;B&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;* (&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;A B&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;피연산자 출력&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;+&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;* ( +&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;A B&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;괄호 안에서 + Push&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;C&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;* ( +&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;A B C&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;피연산자 출력&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;*&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;A B C +&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;괄호 끝! &lt;b&gt;(&lt;/b&gt; 만날 때까지 팝(Pop)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;-&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;-&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;A B C + *&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;-가 들어가려는데,&amp;nbsp;&lt;b&gt;Top(*)이 더 셈.&lt;/b&gt;&amp;nbsp;강한 놈(*) 먼저 내보내고(Pop) 입장.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;D&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;-&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;A B C + * D&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;피연산자 출력&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;끝&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;A B C + * D -&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;남은 - 팝&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;다음 포스팅에서는 &lt;/span&gt;&lt;b&gt;정렬(Sorting)과 검색(Searching)&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;을 정리해 보겠다.&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;</description>
      <category>Study</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/209</guid>
      <comments>https://code-angie.tistory.com/209#entry209comment</comments>
      <pubDate>Sat, 17 Jan 2026 22:47:30 +0900</pubDate>
    </item>
    <item>
      <title>[전산직(데이터) 공무원 대비] 알고리즘 기초부터 파헤치기 1</title>
      <link>https://code-angie.tistory.com/208</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;전공자에게도 익숙하지만, 막상 시험 문제로 마주하면 헷갈리고 자꾸 잊어버리는 게 바로 '기초'인 것 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&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: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;빠르게 제미나이의 도움을 받아 이론을 요약하고, 기초부터 심화 문제까지 풀어보며&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&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: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;오늘은 그 첫 번째 순서, 알고리즘의 기초 중의 기초인 '알고리즘 분석(Algorithm Analysis)'이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;1. 알고리즘 특성&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;(1) 알고리즘의 5대 특성 (암기)&lt;/b&gt;&lt;/span&gt;&lt;/h3&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;입력(Input): &lt;/b&gt;0개 이상의 외부 입력이 있어야 함. (꼭 1개 이상일 필요 없음, &lt;b data-index-in-node=&quot;50&quot; data-path-to-node=&quot;8,0,1,0,0&quot;&gt;0개여도 됨!&lt;/b&gt;) &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt; &lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,0,1,1,0&quot;&gt;출력 (Output):&lt;/b&gt; 적어도 1개 이상의 결과가 나와야 함.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt; &lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,0,1,2,0&quot;&gt;명확성 (Definiteness):&lt;/b&gt; 각 명령어는 모호하지 않고 명확해야 함. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt; &lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,0,1,3,0&quot;&gt;유한성 (Finiteness):&lt;/b&gt; 한정된 단계를 거친 후에는 &lt;b data-index-in-node=&quot;33&quot; data-path-to-node=&quot;8,0,1,3,0&quot;&gt;반드시 종료&lt;/b&gt;해야 함. (무한 루프는 알고리즘이 아님) &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt; &lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,0,1,4,0&quot;&gt;유효성 (Effectiveness):&lt;/b&gt; 모든 명령은 실행 가능해야 함. &lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;(2) 알고리즘 기술 방법&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;순서도(Flowchart), 의사 코드(Pseudo-code), 자연어 등은 사용 가능.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,1,1,1,0&quot;&gt;주의:&lt;/b&gt; 추상 데이터 타입(Abstract Data Type)은 데이터의 '구조와 연산'을 정의하는 논리적 개념이지, 알고리즘(문제 해결 절차)을 기술하는 방법이 아닙니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;2. 알고리즘 분석 (Time Complexity)&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;알고리즘의 성능은 단순한 '실행 시간(초, sec)'이 아니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;입력 크기($n$)가 커질 때 연산 횟수가 어떻게 증가하는가&lt;/b&gt;를 측정하는 것이 핵심이다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;(1) 점근적 표기법 (Asymptotic Notation) - 3대장&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시험에 단골로 등장하는 3가지 표기법의 &lt;b&gt;정의&lt;/b&gt;와 &lt;b&gt;의미&lt;/b&gt;를 정확히 구분해야 한다.&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: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;빅오 표기법 ($O$, Big-O): 최악의 경우 (상한선)&lt;/b&gt;&lt;/span&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;실무와 시험에서 가장 많이 사용&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;정의:&lt;/b&gt; $n \ge n_0$인 모든 $n$에 대해 &lt;b&gt;$f(n) \le c \cdot g(n)$&lt;/b&gt;을 만족하는 양의 상수 $c, n_0$가 존재하면 $f(n) = O(g(n))$이다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;의미:&lt;/b&gt; &quot;아무리 운이 나빠도, 즉 최악의 경우라도 $g(n)$ 정도의 속도는 보장한다.&quot; ($\le$)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;빅오메가 표기법 ($\Omega$, Big-Omega): 최선의 경우 (하한선)&lt;/b&gt;&lt;/span&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: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;정의:&lt;/b&gt; &lt;b&gt;$f(n) \ge c \cdot g(n)$&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;의미:&lt;/b&gt; &quot;아무리 운이 좋아도, 최소한 $g(n)$ 시간은 걸린다.&quot; ($\ge$)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;빅세타 표기법 ($\Theta$, Big-Theta): 평균 (정확한 구간, 동일 차수)&lt;/b&gt;&lt;/span&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: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;정의:&lt;/b&gt; &lt;b&gt;$c_1 \cdot g(n) \le f(n) \le c_2 \cdot g(n)$&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;의미:&lt;/b&gt; $f(n)$이 $g(n)$과 동일한 증가율을 보인다. (상한과 하한이 맞물릴 때)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;(2) 시간 복잡도 계산 요령 (시험용 Speed Up)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;복잡한 수식이 나와도 당황하지 말자. 다음 &lt;b&gt;3가지 규칙&lt;/b&gt;만 기억하면 문제의 90%는 풀린다.&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: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;최고차항만 남긴다:&lt;/b&gt; $3n^2 + 100n + 5 \rightarrow$ &lt;b&gt;$O(n^2)$&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;계수(상수)는 무시한다:&lt;/b&gt; $O(2n) \rightarrow$ &lt;b&gt;$O(n)$&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;로그의 밑은 무시한다:&lt;/b&gt; $log_2 n$이든 $log_{10} n$이든 그냥 &lt;b&gt;$O(\log n)$&lt;/b&gt;으로 통일.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;(3) 반드시 암기해야 할 성능 순서 &lt;span style=&quot;text-align: start;&quot;&gt; &lt;/span&gt; (빠름 $\rightarrow$ 느림)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시험 직전 1초 컷을 위해 이 순서는 머리에 콕 박아두자.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$$O(1) &amp;lt; O(\log n) &amp;lt; O(n) &amp;lt; O(n \log n) &amp;lt; O(n^2) &amp;lt; O(n^3) &amp;lt; O(2^n) &amp;lt; O(n!)$$&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;width: 707px;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 126px;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt; &lt;b&gt;&lt;b&gt;표기&lt;/b&gt;&lt;/b&gt; &lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 310px;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;b&gt;대표 예시&lt;/b&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 271px;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;b&gt;비고&lt;/b&gt; &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 126px;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;$O(1)$&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 310px;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;배열 인덱스 접근, 스택 Push/Pop&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 271px;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;상수 시간 (즉시)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 126px;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;$O(\log n)$&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 310px;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이진 탐색 (Binary Search)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 271px;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;반씩 쪼개기&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 126px;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;$O(n)$&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 310px;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;for문 1개 (순차 탐색)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 271px;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;선형 시간&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 126px;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;$O(n \log n)$&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 310px;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;퀵, 병합, 힙 정렬&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 271px;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;고급 정렬 알고리즘&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 126px;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;$O(n^2)$&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 310px;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이중 for문, 버블/삽입/선택 정렬&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 271px;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;제곱 시간&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 126px;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt; $O(2^n)$ &lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 310px;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 피보나치(재귀), 하노이 탑 &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 271px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;지수 시간 (비효울의 끝판왕&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;21&quot;&gt;(4) [비교 심화] 재귀 vs 반복 (피보나치 수열)&lt;/b&gt; &lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;같은 문제라도 구현 방식에 따라 천지 차이가 난다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;22&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;22,0,0&quot;&gt;단순 재귀 (Naive Recursion):&lt;/b&gt; &lt;b data-index-in-node=&quot;25&quot; data-path-to-node=&quot;22,0,0&quot;&gt;$O(2^n)$&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;22,0,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;동일한 하위 문제를 끊임없이 &lt;b data-index-in-node=&quot;16&quot; data-path-to-node=&quot;22,0,1,0,0&quot;&gt;중복 호출&lt;/b&gt;함. ($fib(3)$을 구하기 위해 $fib(2)$를 또 계산...)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;22,1,0&quot;&gt;반복문 / 동적계획법 (DP):&lt;/b&gt; &lt;b data-index-in-node=&quot;18&quot; data-path-to-node=&quot;22,1,0&quot;&gt;$O(n)$&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;22,1,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;계산한 값을 배열에 저장(&lt;b data-index-in-node=&quot;14&quot; data-path-to-node=&quot;22,1,1,0,0&quot;&gt;Memoization&lt;/b&gt;)하거나, for문을 사용하여 중복을 제거함. 성능이 대폭 개선됨.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;3. 복잡도 종류 (Complexity Classes: P vs NP) &lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-path-to-node=&quot;26&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;26&quot;&gt;(1) 핵심 정의&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;27&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;27,0,0&quot;&gt;P (Polynomial):&lt;/b&gt; 다항 시간($O(n^k)$) 내에 해를 &lt;b data-index-in-node=&quot;36&quot; data-path-to-node=&quot;27,0,0&quot;&gt;'구할(Solve)'&lt;/b&gt; 수 있는 문제. (쉬운 문제)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;27,0,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;i data-index-in-node=&quot;0&quot; data-path-to-node=&quot;27,0,1,0,0&quot;&gt;예: 정렬, 검색, 최단 경로(다익스트라)&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;27,1,0&quot;&gt;NP (Non-deterministic Polynomial):&lt;/b&gt; 다항 시간 내에 주어진 해가 맞는지 &lt;b&gt;'검증(Verify)'&lt;/b&gt;할 수 있는 문제.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;27,1,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;i data-index-in-node=&quot;0&quot; data-path-to-node=&quot;27,1,1,0,0&quot;&gt;주의: '못 푸는 문제'가 아님! 답을 찍어서 주면 확인은 빨리 할 수 있다는 뜻.&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;27,2,0&quot;&gt;NP-Complete (NP-완전):&lt;/b&gt; NP 중에서 &lt;b data-index-in-node=&quot;28&quot; data-path-to-node=&quot;27,2,0&quot;&gt;가장 어려운&lt;/b&gt; 문제들.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;27,2,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;모든 NP 문제는 다항 시간 내에 NP-완전 문제로 &lt;b data-index-in-node=&quot;35&quot; data-path-to-node=&quot;27,2,1,0,0&quot;&gt;환원(Reduction)&lt;/b&gt; 가능하다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;27,3,0&quot;&gt;NP-Hard (NP-하드):&lt;/b&gt; NP-완전보다 같거나 더 어려운 문제. (NP에 포함될 수도, 안 될 수도 있음)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-path-to-node=&quot;28&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;28&quot;&gt;(2) 포함 관계 (벤 다이어그램 암기)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-path-to-node=&quot;28&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$P \subseteq NP$ (P는 NP의 부분집합이다)&lt;/span&gt;&lt;/li&gt;
&lt;li data-path-to-node=&quot;28&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$NP\text{-Complete} = NP \cap NP\text{-Hard}$ (교집합)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;221&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXwBST/dJMcachySFF/WMIDYsnrIBZtsLsemiauj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXwBST/dJMcachySFF/WMIDYsnrIBZtsLsemiauj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXwBST/dJMcachySFF/WMIDYsnrIBZtsLsemiauj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXwBST%2FdJMcachySFF%2FWMIDYsnrIBZtsLsemiauj0%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;300&quot; height=&quot;221&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;221&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;(3) [심화] 대표적인 NP-Complete 문제 (암기)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;시험에서 &quot;다음 중 성격이 다른 문제는?&quot; 하고 P 문제들 사이에 끼워 냅니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;31&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;31,0,0&quot;&gt;TSP (Traveling Salesperson Problem, 외판원 순회 문제)&lt;/b&gt;&lt;/span&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;여러 도시와 각 도시간 이동 비용이 주어졌을 때, 모든 도시를 한 번씩 방문하고 돌아오는 최단 경로 찾기. ($O(n!)$) &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;최적해(가장 짧은 거리)를 구하는 문제는 NP-하드 문제이고, &lt;br /&gt;거리 K이하인 경로가 있는가?라고 묻는 문제는 NP-완전 문제다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;31,1,0&quot;&gt;SAT (Boolean Satisfiability Problem, 충족 가능성 문제)&lt;/b&gt;&lt;/span&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;논리식을 True로 만드는 변수 조합 찾기. (최초의 NP-Complete 문제, 쿡의 정리로 증명됨)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;모든 NP 문제는 이 SAT 문제로 환원(변형)될 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;31,2,0&quot;&gt;Knapsack (배낭 문제):&lt;/b&gt; 가방 무게 제한 내에서 가치 최대화하기. (0/1 배낭 문제)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;31,3,0&quot;&gt;Hamiltonian Cycle:&lt;/b&gt; 그래프의 모든 정점을 한 번씩 방문하는 경로 찾기.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;i data-index-in-node=&quot;0&quot; data-path-to-node=&quot;31,4,0&quot;&gt;반면, '최단 경로', '최소 신장 트리(MST)', '정렬'은 P 문제임.&lt;/i&gt;&lt;/b&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;4. 실전 코드 분석 (기출 패턴)&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;단순한 for문은 누구나 푼다. 가장 많이 실수하는 &lt;b&gt;함정 유형 2가지&lt;/b&gt;를 정리했다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;Case A: 반복문 변수가 배수로 증가할 때 ($+1$이 아님)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;// i가 1부터 시작해서 2배씩 커짐 (1, 2, 4, 8 ...)
for (int i = 1; i &amp;lt; n; i = i * 2) {
    sum++;
}&lt;/code&gt;&lt;/pre&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: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;분석:&lt;/b&gt; $i$가 $1, 2, 4, 8, \dots, 2^k$ 형태로 증가하여 $n$에 도달한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;계산:&lt;/b&gt; $2^k \approx n$ 이므로, 횟수 $k \approx \log_2 n$이다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;정답: $O(\log n)$&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;Case B: 종속적인 이중 반복문&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;for (int i = 0; i &amp;lt; n; i++) {
    for (int j = 0; j &amp;lt; i; j++) { // j가 n이 아니라 i까지 반복
        sum++;
    }
}&lt;/code&gt;&lt;/pre&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: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;분석:&lt;/b&gt; 바깥 루프는 $0$부터 $n-1$까지, 안쪽 루프는 $i$번($0, 1, 2, \dots, n-1$) 실행된다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;계산:&lt;/b&gt; 총 횟수는 $1 + 2 + \dots + (n-1) = \frac{n(n-1)}{2}$ (등차수열의 합)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;정답: $O(n^2)$&lt;/b&gt; (최고차항 기준)&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;5. 최신 기출 맛보기&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;문제 1. 점근적 표기법의 정의&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다음 설명의 (가), (나)에 들어갈 내용은?&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&quot;모든 $n \ge n_0$에 대해 $0 \le c_1 g(n) \le f(n) \le c_2 g(n)$을 만족하는 양의 상수가 존재하면, $f(n) = ( \text{가} )$이다. 이를 $( \text{나} )$ 표기법이라 한다.&quot;&lt;/span&gt;&lt;/blockquote&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: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(가) $\Theta(g(n))$&amp;nbsp; (나) 빅세타&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(가) $O(g(n))$&amp;nbsp; (나) 빅오&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(가) $\Omega(g(n))$&amp;nbsp; (나) 빅오메가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(가) $o(g(n))$&amp;nbsp; (나) 리틀오&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;정답: 1번&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$c_1 g(n)$(하한)과 $c_2 g(n)$(상한) 사이에 끼어있는 '샌드위치($\le f(n) \le$)' 형태는 &lt;b&gt;빅세타($\Theta$)&lt;/b&gt;의 정의이다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;문제 2. 재귀 함수의 시간 복잡도 (하노이 탑)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다음 하노이 탑(Tower of Hanoi) 알고리즘의 시간 복잡도는? (원판 개수: $n$)&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;void hanoi(int n, char from, char to, char aux) {
    if (n == 1) { move(from, to); return; }
    hanoi(n - 1, from, aux, to);
    move(from, to);
    hanoi(n - 1, aux, to, from);
}&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: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$O(\log n)$&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$O(n)$&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$O(n \log n)$&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$O(2^n)$&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;정답: 4번&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;하노이 탑은 대표적인 지수 시간(Exponential Time) 알고리즘이다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;점화식:&lt;/b&gt;&amp;nbsp;$T(n) = 2T(n-1) + 1$ (원판 $n$개를 옮기려면, $n-1$개를 2번 옮겨야 함)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;결과:&lt;/b&gt;&amp;nbsp;$2^n - 1$회 이동 $\rightarrow$&amp;nbsp;&lt;b&gt;$O(2^n)$&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  [오답 노트] 병합 정렬과 헷갈리지 말 것! (또 틀림..)&lt;/b&gt;&lt;/span&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: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;병합 정렬:&lt;/b&gt;&amp;nbsp;$T(n) = 2T(n/2) + n$ $\rightarrow$ 문제를&amp;nbsp;&lt;b&gt;절반($n/2$)&lt;/b&gt;으로 쪼갬 $\rightarrow$&amp;nbsp;&lt;b&gt;$O(n \log n)$&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;하노이 탑&lt;/b&gt;: $T(n) = 2T(n-1) + 1$ $\rightarrow$ 문제를&amp;nbsp;&lt;b&gt;하나($n-1$)&lt;/b&gt;만 줄여서 2번 호출 $\rightarrow$&amp;nbsp;&lt;b&gt;$O(2^n)$&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(절반으로 줄어드는 것과 하나씩 줄어드는 것은 천지 차이다!)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: none;&quot;&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;[특별 보충] 점화식 완전 정복 (마스터 정리)&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;심화 문제를 위해 재귀 알고리즘 시간 복잡도 $T(n)$을 구하는 3가지 패턴을 정리했다. 이것만 알면 복잡한 점화식도 3초 만에 풀 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. 마스터 정리 (Master Theorem)&lt;/span&gt;&lt;/h3&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: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;형태:&lt;/b&gt; $T(n) = aT(n/b) + f(n)$&lt;/span&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: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문제를 $b$등분 하고, $a$번 호출하며, 합치는 비용이 $f(n)$일 때&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;비교:&lt;/b&gt; &lt;b&gt;$\bf n^{\log_b a}$&lt;/b&gt; (재귀 비용) vs &lt;b&gt;$\bf f(n)$&lt;/b&gt; (병합 비용)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt; &lt;b&gt;Case&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt; &lt;b&gt;상황&lt;/b&gt; &lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;b&gt;시간 복잡도&lt;/b&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;b&gt;예시&lt;/b&gt; &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Case 1&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;재귀 비용&lt;/b&gt;이 클 때 ($&amp;gt;$)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$O(n^{\log_b a})$&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$T(n) = 4T(n/2) + n \rightarrow O(n^2)$&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Case 2&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;둘이 &lt;b&gt;비등&lt;/b&gt;할 때 ($=$)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$O(n^{\log_b a} \log n)$&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$T(n) = 2T(n/2) + n \rightarrow O(n \log n)$&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Case 3&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;병합 비용&lt;/b&gt;이 클 때 ($&amp;lt;$)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$O(f(n))$&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$T(n) = T(n/2) + n^2 \rightarrow O(n^2)$&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2. 감소하는 점화식 (Decrease &amp;amp; Conquer)&lt;/span&gt;&lt;/h3&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: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;형태:&lt;/b&gt; $T(n) = T(n-1) + C$&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;매번 1씩 줄어들면서 반복 $\rightarrow$ &lt;b&gt;$O(n)$&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;예: $T(n) = T(n-1) + n \rightarrow O(n^2)$ (1부터 $n$까지의 합)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3. 지수적 증가&lt;/span&gt;&lt;/h3&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: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;형태:&lt;/b&gt; $T(n) = 2T(n-1) + 1$&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문제가 줄지 않고 2배로 증식 $\rightarrow$ &lt;b&gt;$O(2^n)$&lt;/b&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&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: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;제미나이가 만든 점화식 집중 훈련 퀴즈 풀어보기&amp;nbsp;&lt;a href=&quot;https://gemini.google.com/share/6e71fbe6b0f5&quot;&gt;https://gemini.google.com/share/6e71fbe6b0f5&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다음 포스팅에서는 &lt;b&gt;배열(Array)과 연결 리스트(Linked List), 스택(Stack)과 큐(Queue)&lt;/b&gt;를 정리해 보겠다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Study</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/208</guid>
      <comments>https://code-angie.tistory.com/208#entry208comment</comments>
      <pubDate>Sat, 17 Jan 2026 22:35:57 +0900</pubDate>
    </item>
    <item>
      <title>[Discord] 디스코드 설치하기 (Windows)</title>
      <link>https://code-angie.tistory.com/207</link>
      <description>&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;h4 data-ke-size=&quot;size20&quot;&gt;1. 공식 웹사이트 접속&lt;/h4&gt;
&lt;figure id=&quot;og_1756795163553&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;Download Discord to Talk, Play, and Hang Out&quot; data-og-description=&quot;Download Discord to talk, play, and hang out with friends over voice, video, or text. Available for Windows, macOS, Linux, iOS, Android devices, and consoles.&quot; data-og-host=&quot;discord.com&quot; data-og-source-url=&quot;https://discord.com/download&quot; data-og-url=&quot;https://discord.com/download&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bhmqIT/hyZGi0LcOd/MS2vTh29qcef9ZD2cFjEgK/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/E0pZ5/hyZDWqTRWt/FFL9NiMVXJKkgH5xu0o0yk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://discord.com/download&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://discord.com/download&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bhmqIT/hyZGi0LcOd/MS2vTh29qcef9ZD2cFjEgK/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/E0pZ5/hyZDWqTRWt/FFL9NiMVXJKkgH5xu0o0yk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&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;Download Discord to Talk, Play, and Hang Out&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Download Discord to talk, play, and hang out with friends over voice, video, or text. Available for Windows, macOS, Linux, iOS, Android devices, and consoles.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;discord.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. Download for Windows 선택&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1178&quot; data-origin-height=&quot;703&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyKKtf/btsQhjhGhmN/hnHgNn0fGB0gMjIkVpicTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyKKtf/btsQhjhGhmN/hnHgNn0fGB0gMjIkVpicTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyKKtf/btsQhjhGhmN/hnHgNn0fGB0gMjIkVpicTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcyKKtf%2FbtsQhjhGhmN%2FhnHgNn0fGB0gMjIkVpicTK%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;1178&quot; height=&quot;703&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1178&quot; data-origin-height=&quot;703&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;3. 설치 파일 실행&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DiscordSetup.exe 파일을 실행하면 자동으로 설치가 진행되고 따로 설정이 필요없다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;318&quot; data-origin-height=&quot;142&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XdDnP/btsQhsSXHfE/sT76kbDGqnfI4iytkZ3mR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XdDnP/btsQhsSXHfE/sT76kbDGqnfI4iytkZ3mR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XdDnP/btsQhsSXHfE/sT76kbDGqnfI4iytkZ3mR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXdDnP%2FbtsQhsSXHfE%2FsT76kbDGqnfI4iytkZ3mR1%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;318&quot; height=&quot;142&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;318&quot; data-origin-height=&quot;142&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;4. 설치 완료&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;설치가 완료되면 자동으로 어플이 열리고 로그인하여 사용하면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;712&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NmbmF/btsQfjwbo5T/rzz3rgPuET60EVJd2FvTg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NmbmF/btsQfjwbo5T/rzz3rgPuET60EVJd2FvTg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NmbmF/btsQfjwbo5T/rzz3rgPuET60EVJd2FvTg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNmbmF%2FbtsQfjwbo5T%2Frzz3rgPuET60EVJd2FvTg0%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;1272&quot; height=&quot;712&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;712&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Study/Ect</category>
      <category>discord</category>
      <category>디스코드</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/207</guid>
      <comments>https://code-angie.tistory.com/207#entry207comment</comments>
      <pubDate>Tue, 2 Sep 2025 21:07:54 +0900</pubDate>
    </item>
    <item>
      <title>[Git] Git 설치하기 (Windows)</title>
      <link>https://code-angie.tistory.com/206</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;개발자에게 없어서는 안 될 버전 관리 도구인 Git을 설치하는 과정을 설명하려고 한다.&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. Git 설치 파일 다운로드&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;공식 웹사이트에 접속하여 &lt;b&gt;Download for Windows&lt;/b&gt;를 클릭한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1062&quot; data-origin-height=&quot;749&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDQgwu/btsP297PrgM/Ru1Jz2nB7yRbc7piFcJ5y0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDQgwu/btsP297PrgM/Ru1Jz2nB7yRbc7piFcJ5y0/img.png&quot; data-alt=&quot;Download for Windows 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDQgwu/btsP297PrgM/Ru1Jz2nB7yRbc7piFcJ5y0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDQgwu%2FbtsP297PrgM%2FRu1Jz2nB7yRbc7piFcJ5y0%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;1062&quot; height=&quot;749&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1062&quot; data-origin-height=&quot;749&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Download for Windows 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Windows x64의 최신 버전 Git을 다운 받으려면 &lt;b&gt;Click here to download&lt;/b&gt;를 클릭한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1064&quot; data-origin-height=&quot;504&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AkjNP/btsP33zzdxz/Su5nmckPcWki0KnJbuNh1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AkjNP/btsP33zzdxz/Su5nmckPcWki0KnJbuNh1k/img.png&quot; data-alt=&quot;click here to download 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AkjNP/btsP33zzdxz/Su5nmckPcWki0KnJbuNh1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAkjNP%2FbtsP33zzdxz%2FSu5nmckPcWki0KnJbuNh1k%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;1064&quot; height=&quot;504&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1064&quot; data-origin-height=&quot;504&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;click here to download 클릭&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;2. 설치 마법사 실행&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;설치 중에는 다양한 옵션을 설정할 수 있는데, 대체로 기본 설정으로 두고 시작하면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b48voB/btsP3vbYFQL/jV39joBClrPac8821Gant0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b48voB/btsP3vbYFQL/jV39joBClrPac8821Gant0/img.png&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;391&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;49.83&quot; data-filename=&quot;blob&quot; style=&quot;width: 49.2555%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b48voB/btsP3vbYFQL/jV39joBClrPac8821Gant0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb48voB%2FbtsP3vbYFQL%2FjV39joBClrPac8821Gant0%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;494&quot; height=&quot;391&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsF6i4/btsP2wh7Z1k/kuPe7Kdb1sTVJ6nJcUTl6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsF6i4/btsP2wh7Z1k/kuPe7Kdb1sTVJ6nJcUTl6K/img.png&quot; data-origin-width=&quot;496&quot; data-origin-height=&quot;390&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;50.17&quot; data-filename=&quot;blob&quot; style=&quot;width: 49.5817%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsF6i4/btsP2wh7Z1k/kuPe7Kdb1sTVJ6nJcUTl6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsF6i4%2FbtsP2wh7Z1k%2FkuPe7Kdb1sTVJ6nJcUTl6K%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;496&quot; height=&quot;390&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;496&quot; data-origin-height=&quot;391&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pXsMV/btsP4poKMGJ/ljKvuZ7hMbGFf9XY3kDIrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pXsMV/btsP4poKMGJ/ljKvuZ7hMbGFf9XY3kDIrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pXsMV/btsP4poKMGJ/ljKvuZ7hMbGFf9XY3kDIrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpXsMV%2FbtsP4poKMGJ%2FljKvuZ7hMbGFf9XY3kDIrK%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;496&quot; height=&quot;391&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;496&quot; data-origin-height=&quot;391&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Open Git Bash here: 폴더에서 우클릭시 Git bash가 해당 위치에서 바로 실행되도록 함&lt;/li&gt;
&lt;li&gt;Open Git GUI here: 우클릭 메뉴에 GUI 추가&lt;/li&gt;
&lt;li&gt;바로가기 아이콘을 추가하고 싶다면 Additional icons &amp;gt; In the Desktop을 체크해도 좋다.&lt;/li&gt;
&lt;li&gt;위 두 가지는 편리성을 높여주는 옵션이어서 하면 좋지만 GUI를 사용안한다면 제외해도 무방하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;390&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXyyly/btsP2E1wUCg/6SGRJsfWFyP23wN6CWnysK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXyyly/btsP2E1wUCg/6SGRJsfWFyP23wN6CWnysK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXyyly/btsP2E1wUCg/6SGRJsfWFyP23wN6CWnysK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXyyly%2FbtsP2E1wUCg%2F6SGRJsfWFyP23wN6CWnysK%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;495&quot; height=&quot;390&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;390&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;389&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vJuAO/btsP3t6jUG0/xe9aTgJoZuk9i7f3xj3UKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vJuAO/btsP3t6jUG0/xe9aTgJoZuk9i7f3xj3UKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vJuAO/btsP3t6jUG0/xe9aTgJoZuk9i7f3xj3UKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvJuAO%2FbtsP3t6jUG0%2Fxe9aTgJoZuk9i7f3xj3UKk%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;492&quot; height=&quot;389&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;389&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Git에서 사용할 기본 텍스트 에디터를 선택하는 옵션인데 본인에게 편한 에디터를 선택하면 된다.&lt;/li&gt;
&lt;li&gt;예를 들어, Visual Studio Code를 사용하고 있다면 해당 옵션을 선택할 수 있다.&lt;/li&gt;
&lt;li&gt;나중에 변경 가능하니 그대로 Vim을 선택해도 상관없다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;496&quot; data-origin-height=&quot;391&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zTIRt/btsP372Vna4/lWzCGnVwWTxuFQ21F7sbX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zTIRt/btsP372Vna4/lWzCGnVwWTxuFQ21F7sbX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zTIRt/btsP372Vna4/lWzCGnVwWTxuFQ21F7sbX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzTIRt%2FbtsP372Vna4%2FlWzCGnVwWTxuFQ21F7sbX0%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;496&quot; height=&quot;391&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;496&quot; data-origin-height=&quot;391&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;git init으로 생성하는 모든 새 저장소의 초기 브랜치 이름을 선택하는 옵션이다.&lt;/li&gt;
&lt;li&gt;최근에는 main을 기본 브랜치로 사용하는 추세임으로 main으로 설정하면 좋다.&lt;/li&gt;
&lt;li&gt;하지만 팀이나 프로젝트의 규칙이 있다면 알맞게 초기 브랜치 이름을 설정할 수 있다. (추후 변경 가능)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;387&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3YZH5/btsP4tj9XRB/UioJ5xGrjz3k7jFkduGTn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3YZH5/btsP4tj9XRB/UioJ5xGrjz3k7jFkduGTn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3YZH5/btsP4tj9XRB/UioJ5xGrjz3k7jFkduGTn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3YZH5%2FbtsP4tj9XRB%2FUioJ5xGrjz3k7jFkduGTn1%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;492&quot; height=&quot;387&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;387&quot;/&gt;&lt;/span&gt;&lt;/figure&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;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Git Bash에서만 Git 명령어 사용 가능&lt;/li&gt;
&lt;li&gt;CMD, PowerShell, VSCode 등에서도 Git 명령어 사용 가능&lt;/li&gt;
&lt;li&gt;Git과 Unix 명령어도 CMD에서 사용 가능 (충돌 가능성 있음)&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSfNvz/btsP2EtKTM7/0E9OOTr1PHZ6Na0AbQuqsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSfNvz/btsP2EtKTM7/0E9OOTr1PHZ6Na0AbQuqsk/img.png&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;389&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;50.09&quot; data-filename=&quot;blob&quot; style=&quot;width: 49.5082%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSfNvz/btsP2EtKTM7/0E9OOTr1PHZ6Na0AbQuqsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSfNvz%2FbtsP2EtKTM7%2F0E9OOTr1PHZ6Na0AbQuqsk%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;492&quot; height=&quot;389&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/umNET/btsP4AwNkJR/bW3E4Ba83VbSqwmXdexdh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/umNET/btsP4AwNkJR/bW3E4Ba83VbSqwmXdexdh0/img.png&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;392&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;49.91&quot; data-filename=&quot;blob&quot; style=&quot;width: 49.329%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/umNET/btsP4AwNkJR/bW3E4Ba83VbSqwmXdexdh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FumNET%2FbtsP4AwNkJR%2FbW3E4Ba83VbSqwmXdexdh0%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;494&quot; height=&quot;392&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특별한 설정이 없다면 기본값인 OpenSSH를 사용하는 것이 안전하고, OpenSSL을 사용하는 것이 GitHub와 호환성이 좋다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;390&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IjKcg/btsP5KFqQz8/LVXf3GDW3JkVjCFgkYxgI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IjKcg/btsP5KFqQz8/LVXf3GDW3JkVjCFgkYxgI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IjKcg/btsP5KFqQz8/LVXf3GDW3JkVjCFgkYxgI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIjKcg%2FbtsP5KFqQz8%2FLVXf3GDW3JkVjCFgkYxgI1%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;492&quot; height=&quot;390&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;390&quot;/&gt;&lt;/span&gt;&lt;/figure&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;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvISuI/btsP35D3gEg/3hwk3n4EE2AikAft3HGysk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvISuI/btsP35D3gEg/3hwk3n4EE2AikAft3HGysk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvISuI/btsP35D3gEg/3hwk3n4EE2AikAft3HGysk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvISuI%2FbtsP35D3gEg%2F3hwk3n4EE2AikAft3HGysk%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;495&quot; height=&quot;392&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;392&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MinTTY는 리눅스와 유사한 터미널을 제공하고, 복사 붙여넣기나 글꼴 설정에 더 유리하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;389&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kKmmA/btsP4cppOg6/jDknXOUCrv0Ro1Q1QuBF2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kKmmA/btsP4cppOg6/jDknXOUCrv0Ro1Q1QuBF2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kKmmA/btsP4cppOg6/jDknXOUCrv0Ro1Q1QuBF2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkKmmA%2FbtsP4cppOg6%2FjDknXOUCrv0Ro1Q1QuBF2k%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;494&quot; height=&quot;389&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;389&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;391&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n0DLA/btsP328s1Oo/OjPzzp2pe6uHGIG8x9L3kK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n0DLA/btsP328s1Oo/OjPzzp2pe6uHGIG8x9L3kK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n0DLA/btsP328s1Oo/OjPzzp2pe6uHGIG8x9L3kK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn0DLA%2FbtsP328s1Oo%2FOjPzzp2pe6uHGIG8x9L3kK%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;495&quot; height=&quot;391&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;391&quot;/&gt;&lt;/span&gt;&lt;/figure&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;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;390&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lehmI/btsP25j5LUl/5bz2WosJCwQbKoZxiFXii1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lehmI/btsP25j5LUl/5bz2WosJCwQbKoZxiFXii1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lehmI/btsP25j5LUl/5bz2WosJCwQbKoZxiFXii1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlehmI%2FbtsP25j5LUl%2F5bz2WosJCwQbKoZxiFXii1%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;494&quot; height=&quot;390&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;390&quot;/&gt;&lt;/span&gt;&lt;/figure&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;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crPIQH/btsP4txCNqb/Qm5FZdrwMk3sv2HtAKX1fK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crPIQH/btsP4txCNqb/Qm5FZdrwMk3sv2HtAKX1fK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crPIQH/btsP4txCNqb/Qm5FZdrwMk3sv2HtAKX1fK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrPIQH%2FbtsP4txCNqb%2FQm5FZdrwMk3sv2HtAKX1fK%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;494&quot; height=&quot;392&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;392&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;394&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H9Vp2/btsP3fUvmHs/t9BCsqqm3fMQ7gGktOuTyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H9Vp2/btsP3fUvmHs/t9BCsqqm3fMQ7gGktOuTyK/img.png&quot; data-alt=&quot;설치 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H9Vp2/btsP3fUvmHs/t9BCsqqm3fMQ7gGktOuTyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH9Vp2%2FbtsP3fUvmHs%2Ft9BCsqqm3fMQ7gGktOuTyK%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;492&quot; height=&quot;394&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;394&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;설치 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 설치 확인&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;설치가 완료된 후에 Git Bash 또는 CMD에서 아래 명령어로 설치 여부를 확인한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1755968076405&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git --version&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정상적으로 버전이 출력되면 설치가 제대로 된 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1755968128599&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git version 2.51.0.windows.1&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Study/Ect</category>
      <category>GIT</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/206</guid>
      <comments>https://code-angie.tistory.com/206#entry206comment</comments>
      <pubDate>Tue, 26 Aug 2025 02:56:10 +0900</pubDate>
    </item>
    <item>
      <title>[Windows] 윈도우11에서 사용자 폴더 이름 변경하기</title>
      <link>https://code-angie.tistory.com/205</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Windows에서 사용자 계정을 설정하다 보면, 사용자 폴더 이름이 마음에 들지 않거나 잘못 설정되는 경우가 있다.&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;h3 data-ke-size=&quot;size23&quot;&gt;1. 새 계정 생성 후 파일 옮기기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 안정적인 방법으로, 시스템 오류 없이 폴더명을 원하는 대로 설정할 수 있다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 새 계정 생성&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;설정에 들어가 계정탭의 다른 사용자를 선택한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1185&quot; data-origin-height=&quot;570&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmKEca/btsP2ALyH1i/A1bZkC7lctDS3JbDRAaLY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmKEca/btsP2ALyH1i/A1bZkC7lctDS3JbDRAaLY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmKEca/btsP2ALyH1i/A1bZkC7lctDS3JbDRAaLY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmKEca%2FbtsP2ALyH1i%2FA1bZkC7lctDS3JbDRAaLY0%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;700&quot; height=&quot;337&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1185&quot; data-origin-height=&quot;570&quot;/&gt;&lt;/span&gt;&lt;/figure&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;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1185&quot; data-origin-height=&quot;523&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z4das/btsP21oC9Tj/NHZklQynqplQ77JkhCp0x1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z4das/btsP21oC9Tj/NHZklQynqplQ77JkhCp0x1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z4das/btsP21oC9Tj/NHZklQynqplQ77JkhCp0x1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz4das%2FbtsP21oC9Tj%2FNHZklQynqplQ77JkhCp0x1%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;700&quot; height=&quot;309&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1185&quot; data-origin-height=&quot;523&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;계정을 생성할 때는 Microsoft 계정을 사용하지 않고 계정을 추가한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;967&quot; data-origin-height=&quot;938&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OqYb7/btsP418OmhN/altJZarCr7ktKupCjctVak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OqYb7/btsP418OmhN/altJZarCr7ktKupCjctVak/img.png&quot; data-alt=&quot;이 사람의 로그인 정보를 가지고 있지 않습니다를 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OqYb7/btsP418OmhN/altJZarCr7ktKupCjctVak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOqYb7%2FbtsP418OmhN%2FaltJZarCr7ktKupCjctVak%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; height=&quot;485&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;967&quot; data-origin-height=&quot;938&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-filename=&quot;blob&quot; data-origin-width=&quot;967&quot; data-origin-height=&quot;940&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/df4d3L/btsP5sdXBeN/9SMWnYvfpcuJlZChVw0kUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/df4d3L/btsP5sdXBeN/9SMWnYvfpcuJlZChVw0kUK/img.png&quot; data-alt=&quot;자세한 정보를 확인하고 동의를 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/df4d3L/btsP5sdXBeN/9SMWnYvfpcuJlZChVw0kUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdf4d3L%2FbtsP5sdXBeN%2F9SMWnYvfpcuJlZChVw0kUK%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; height=&quot;486&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;967&quot; data-origin-height=&quot;940&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-filename=&quot;blob&quot; data-origin-width=&quot;967&quot; data-origin-height=&quot;938&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsqNfQ/btsP436youk/LsEEGLoAfch8HiROYDYL11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsqNfQ/btsP436youk/LsEEGLoAfch8HiROYDYL11/img.png&quot; data-alt=&quot;Microsoft 계정 없이 사용자 추가 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsqNfQ/btsP436youk/LsEEGLoAfch8HiROYDYL11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsqNfQ%2FbtsP436youk%2FLsEEGLoAfch8HiROYDYL11%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; height=&quot;485&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;967&quot; data-origin-height=&quot;938&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Microsoft 계정 없이 사용자 추가 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;970&quot; data-origin-height=&quot;945&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JTem9/btsP3tL0mAM/9h3S8NL6KKTMO0Pndfgem1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JTem9/btsP3tL0mAM/9h3S8NL6KKTMO0Pndfgem1/img.png&quot; data-alt=&quot;원하는 사용자 이름을 작성하고 다음을 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JTem9/btsP3tL0mAM/9h3S8NL6KKTMO0Pndfgem1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJTem9%2FbtsP3tL0mAM%2F9h3S8NL6KKTMO0Pndfgem1%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; height=&quot;487&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;970&quot; data-origin-height=&quot;945&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;원하는 사용자 이름을 작성하고 다음을 선택&lt;/figcaption&gt;
&lt;/figure&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;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;577&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t3HYr/btsP43yIv8P/bSkw96sQPSQXZlqf7zkCb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t3HYr/btsP43yIv8P/bSkw96sQPSQXZlqf7zkCb1/img.png&quot; data-alt=&quot;v 표시를 누르고 계정 유형 변경 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t3HYr/btsP43yIv8P/bSkw96sQPSQXZlqf7zkCb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft3HYr%2FbtsP43yIv8P%2FbSkw96sQPSQXZlqf7zkCb1%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;700&quot; height=&quot;341&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;577&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;v 표시를 누르고 계정 유형 변경 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;964&quot; data-origin-height=&quot;491&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkmVnm/btsP3yGjjZV/1k0lcbwZzKjPXNkKMy8ZY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkmVnm/btsP3yGjjZV/1k0lcbwZzKjPXNkKMy8ZY1/img.png&quot; data-alt=&quot;계정 유형을 관리자로 변경 후 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkmVnm/btsP3yGjjZV/1k0lcbwZzKjPXNkKMy8ZY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkmVnm%2FbtsP3yGjjZV%2F1k0lcbwZzKjPXNkKMy8ZY1%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; height=&quot;255&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;964&quot; data-origin-height=&quot;491&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;계정 유형을 관리자로 변경 후 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 새 계정 설정&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;새 계정으로 로그인하여 초기 설정을 완료한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 기존 파일 옮기기&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이전 계정에서 필요한 파일을 새 계정의 사용자 폴더로 복사하거나 이동시킨다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 필요에 따라 기존 계정 삭제&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존 계정은 꼭 삭제할 필요는 없지만 데이터를 모두 이동시켰다면 삭제해도 무방하다.&lt;/li&gt;
&lt;li&gt;설정 &amp;gt; 계정 &amp;gt; 다른 사용자 로 들어가서 기존 계정을 제거한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;464&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AUIF7/btsP4f7xARd/XUH0sv20TQO32bOECBU1a0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AUIF7/btsP4f7xARd/XUH0sv20TQO32bOECBU1a0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AUIF7/btsP4f7xARd/XUH0sv20TQO32bOECBU1a0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAUIF7%2FbtsP4f7xARd%2FXUH0sv20TQO32bOECBU1a0%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;700&quot; height=&quot;554&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;464&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;h3 data-ke-size=&quot;size23&quot;&gt;2. 레지스트리 편집으로 폴더명 변경 (비추천)&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;b&gt;오류 발생 가능성이 높고 시간만 낭비&lt;/b&gt;될 수 있어 추천하지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;잘못된 설정은 시스템 오류를 발생시킬 수 있으니 주의하고 진행해야 한다.&quot;&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;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;주의사항&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;레지스트리 수정 전 백업을 해두는 것이 좋다.&lt;/li&gt;
&lt;li&gt;일부 앱은 사용자 폴더 경로를 기억하고 있기 때문에 수동으로 다시 설정해야 할 수 있다.&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;1. 관리자 계정 활성화&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;먼저 시작에서 cmd를 검색하고, &lt;b&gt;관리자 권한으로&lt;/b&gt; 명령 프롬프트를 실행한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;861&quot; data-origin-height=&quot;444&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8UjAV/btsP5flk84R/YKnj5G2NMhS61PK5fmFWyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8UjAV/btsP5flk84R/YKnj5G2NMhS61PK5fmFWyK/img.png&quot; data-alt=&quot;시작 메뉴에서 cmd를 검색하고 관리자 권한으로 실행&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8UjAV/btsP5flk84R/YKnj5G2NMhS61PK5fmFWyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8UjAV%2FbtsP5flk84R%2FYKnj5G2NMhS61PK5fmFWyK%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;861&quot; height=&quot;444&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;861&quot; data-origin-height=&quot;444&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;시작 메뉴에서 cmd를 검색하고 관리자 권한으로 실행&lt;/figcaption&gt;
&lt;/figure&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;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1755959783851&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;net user &quot;Administrator&quot; /active:yes&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;975&quot; data-origin-height=&quot;122&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LiCfy/btsP4AcuRhk/KRbfxKbpKCvR4LY6DYRkv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LiCfy/btsP4AcuRhk/KRbfxKbpKCvR4LY6DYRkv1/img.png&quot; data-alt=&quot;관리자 계정 활성화&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LiCfy/btsP4AcuRhk/KRbfxKbpKCvR4LY6DYRkv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLiCfy%2FbtsP4AcuRhk%2FKRbfxKbpKCvR4LY6DYRkv1%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;975&quot; height=&quot;122&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;975&quot; data-origin-height=&quot;122&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;관리자 계정 활성화&lt;/figcaption&gt;
&lt;/figure&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;b&gt;Administrator&lt;/b&gt; 계정으로 로그인한다. (암호 없음)&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;2. 사용자 SID 확인&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다음 명령어를 통해 폴더명을 변경하고 싶은 계정의 이름과 SID를 확인한다.&lt;/li&gt;
&lt;li&gt;SID는 레지스트리에서 해당 계정을 식별하는 고유 키다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1755960008378&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;wmic useraccount get name,SID&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;993&quot; data-origin-height=&quot;330&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dCbF8a/btsP3wPtSye/yk5Hb8xEagV6D6FvreL2Wk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dCbF8a/btsP3wPtSye/yk5Hb8xEagV6D6FvreL2Wk/img.png&quot; data-alt=&quot;계정명과 SID 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dCbF8a/btsP3wPtSye/yk5Hb8xEagV6D6FvreL2Wk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdCbF8a%2FbtsP3wPtSye%2Fyk5Hb8xEagV6D6FvreL2Wk%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;600&quot; height=&quot;199&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;993&quot; data-origin-height=&quot;330&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;계정명과 SID 확인&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;3. 레지스트리 편집기 열기&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Windows 검색창에 regedit을 입력해 레지스트리 편집기를 찾아서 연다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1371&quot; data-origin-height=&quot;1023&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/G06LZ/btsP40PyWal/tiTtTp0p9LS4q2B3A8VvV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G06LZ/btsP40PyWal/tiTtTp0p9LS4q2B3A8VvV1/img.png&quot; data-alt=&quot;레지스트리 편집기 검색&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G06LZ/btsP40PyWal/tiTtTp0p9LS4q2B3A8VvV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG06LZ%2FbtsP40PyWal%2FtiTtTp0p9LS4q2B3A8VvV1%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;1371&quot; height=&quot;1023&quot; data-origin-width=&quot;1371&quot; data-origin-height=&quot;1023&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;레지스트리 편집기 검색&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;레지스트리 편집기에서 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList 경로로 이동한다.&lt;/li&gt;
&lt;li&gt;SID 목록 중, 앞서 확인한 계정의 SID를 선택한다.&lt;/li&gt;
&lt;li&gt;ProfileImagePath 값을 찾아 더블 클릭한다. (혹은 마우스 오른쪽 클릭 &amp;gt; 수정 선택)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1410&quot; data-origin-height=&quot;578&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZOogS/btsP33zy2z5/kTCGVBgqkMdt0jur1KKRuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZOogS/btsP33zy2z5/kTCGVBgqkMdt0jur1KKRuk/img.png&quot; data-alt=&quot;레지스트리 편집기에서 해당 경로로 이동&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZOogS/btsP33zy2z5/kTCGVBgqkMdt0jur1KKRuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZOogS%2FbtsP33zy2z5%2FkTCGVBgqkMdt0jur1KKRuk%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;1410&quot; height=&quot;578&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1410&quot; data-origin-height=&quot;578&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;레지스트리 편집기에서 해당 경로로 이동&lt;/figcaption&gt;
&lt;/figure&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;b&gt;폴더 이름만&lt;/b&gt; 원하는 이름으로 수정한다. &lt;b&gt;경로까지 변경하지 않도록 주의!!!&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;C:\Users\이전이름 =&amp;gt; &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;C:\Users\새로운이름&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;625&quot; data-origin-height=&quot;303&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QwDZi/btsP2K1xm91/M1SKJxqDpw97v43RieysH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QwDZi/btsP2K1xm91/M1SKJxqDpw97v43RieysH1/img.png&quot; data-alt=&quot;폴더명 변경&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QwDZi/btsP2K1xm91/M1SKJxqDpw97v43RieysH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQwDZi%2FbtsP2K1xm91%2FM1SKJxqDpw97v43RieysH1%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;194&quot; data-origin-width=&quot;625&quot; data-origin-height=&quot;303&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;4. 실제 폴더 이름 변경&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일 탐색기를 열고 C:\Users 경로로 이동한다. (Windows키 + E)&lt;/li&gt;
&lt;li&gt;해당 사용자 폴더를 마우스 오른쪽 클릭하고 이름 바꾸기를 선택하여 레지스트리에서 설정한 이름과 동일하게 변경한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;651&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ClUJy/btsP4lfyLpo/XsraiPTaNicXTG6topkYz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ClUJy/btsP4lfyLpo/XsraiPTaNicXTG6topkYz1/img.png&quot; data-alt=&quot;폴더명 변경&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ClUJy/btsP4lfyLpo/XsraiPTaNicXTG6topkYz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FClUJy%2FbtsP4lfyLpo%2FXsraiPTaNicXTG6topkYz1%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; height=&quot;416&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;651&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;5. 관리자 계정 비활성화 및 확인&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관리자 계정에서 로그아웃하고 원래 계정으로 로그인한다.&lt;/li&gt;
&lt;li&gt;관리자 권한으로 명령 프롬프트를 열고 아래 명령어로 관리자 계정을 비활성화 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1755962030994&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;net user &quot;Administrator&quot; /active:no&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고 문헌&lt;/p&gt;
&lt;figure id=&quot;og_1755981998622&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;윈도우11 사용자 폴더명 변경과 어드민 폴더 삭제 - Microsoft Q&amp;amp;A&quot; data-og-description=&quot;계정을 Microsoft 계정을 사용하고 있어 아이디의 일부분이 사용자 폴더명으로 되어있어 Luke로 변경하고싶습니다. 이 과정에서 제가 인터넷을 보고 따라하다가 ren 명령어가 액세스 거부로 되지 않&quot; data-og-host=&quot;learn.microsoft.com&quot; data-og-source-url=&quot;https://learn.microsoft.com/ko-kr/answers/questions/4045625/11&quot; data-og-url=&quot;https://learn.microsoft.com/ko-kr/answers/questions/4045625/11&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/rJNEV/hyZzycthm3/dpDUKfrygQCyOksv9uG9hk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/answers/questions/4045625/11&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://learn.microsoft.com/ko-kr/answers/questions/4045625/11&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/rJNEV/hyZzycthm3/dpDUKfrygQCyOksv9uG9hk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&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;윈도우11 사용자 폴더명 변경과 어드민 폴더 삭제 - Microsoft Q&amp;amp;A&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;계정을 Microsoft 계정을 사용하고 있어 아이디의 일부분이 사용자 폴더명으로 되어있어 Luke로 변경하고싶습니다. 이 과정에서 제가 인터넷을 보고 따라하다가 ren 명령어가 액세스 거부로 되지 않&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;learn.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Study/Ect</category>
      <category>사용자 폴더명 변경</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/205</guid>
      <comments>https://code-angie.tistory.com/205#entry205comment</comments>
      <pubDate>Mon, 25 Aug 2025 07:02:01 +0900</pubDate>
    </item>
    <item>
      <title>[Windows] WMIC 설치하기</title>
      <link>https://code-angie.tistory.com/204</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;WMIC(Windows Management Instrumentation Command-line)는 윈도우 시스템을 관리하고 정보를 조회할 수 있는 명령어이다. 하지만 최신 Windows 버전에서는 기본적으로 설치되어 있지 않아 직접 추가해줘야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Windows에서 WMIC를 설치하는 과정은 다음과 같다.&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. 시작 메뉴에서 설정 열기&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;시작 메뉴에서 설정이 안보이면 검색해서 찾을 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;441&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mL2Tv/btsP255rrgB/HTIT4tLIIDkQkEQh9grlpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mL2Tv/btsP255rrgB/HTIT4tLIIDkQkEQh9grlpk/img.png&quot; data-alt=&quot;Windows 시작 메뉴를 열고 설정 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mL2Tv/btsP255rrgB/HTIT4tLIIDkQkEQh9grlpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmL2Tv%2FbtsP255rrgB%2FHTIT4tLIIDkQkEQh9grlpk%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;955&quot; height=&quot;441&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;441&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Windows 시작 메뉴를 열고 설정 클릭&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;2. 선택적 기능 열기&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;선택적 기능에서는 Windows에서 기본적으로 설치되지 않은 기능들을 추가하거나 제거할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1197&quot; data-origin-height=&quot;916&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Jksop/btsP4zdyLMj/GPiQmHfelYjWRM9YhVwDDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Jksop/btsP4zdyLMj/GPiQmHfelYjWRM9YhVwDDK/img.png&quot; data-alt=&quot;설정 창에서 시스템을 선택한 후 선택적 기능 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Jksop/btsP4zdyLMj/GPiQmHfelYjWRM9YhVwDDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJksop%2FbtsP4zdyLMj%2FGPiQmHfelYjWRM9YhVwDDK%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;1197&quot; height=&quot;916&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1197&quot; data-origin-height=&quot;916&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;3. 기능 보기 열기&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;330&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSZpZM/btsP2udzKOi/nWvxWV0yocrwM7UmRBwSik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSZpZM/btsP2udzKOi/nWvxWV0yocrwM7UmRBwSik/img.png&quot; data-alt=&quot;기능 보기 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSZpZM/btsP2udzKOi/nWvxWV0yocrwM7UmRBwSik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSZpZM%2FbtsP2udzKOi%2FnWvxWV0yocrwM7UmRBwSik%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; height=&quot;428&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;330&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;4. 사용 가능한 기능 보기&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;추가된 기능 검색은 이미 설치 되어 있는 기능을 볼 수 있다.&lt;/li&gt;
&lt;li&gt;새로 추가하기 위해서는 사용 가능한 기능 보기를 선택하여 검색해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;809&quot; data-origin-height=&quot;935&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brFYcE/btsP4sMjXiU/KW3LbYz3iguEjZvrYa5uKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brFYcE/btsP4sMjXiU/KW3LbYz3iguEjZvrYa5uKK/img.png&quot; data-alt=&quot;사용 가능한 기능 보기 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brFYcE/btsP4sMjXiU/KW3LbYz3iguEjZvrYa5uKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrFYcE%2FbtsP4sMjXiU%2FKW3LbYz3iguEjZvrYa5uKK%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;600&quot; height=&quot;693&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;809&quot; data-origin-height=&quot;935&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;5. WMIC 검색 및 추가&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;WMIC를 검색하고 찾은 기능을 체크하여 추가를 누른다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;813&quot; data-origin-height=&quot;937&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZiJc1/btsP2KAq6wv/awmzPoZdmuhRjuyMaYVQp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZiJc1/btsP2KAq6wv/awmzPoZdmuhRjuyMaYVQp0/img.png&quot; data-alt=&quot;WMIC 검색 및 추가&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZiJc1/btsP2KAq6wv/awmzPoZdmuhRjuyMaYVQp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZiJc1%2FbtsP2KAq6wv%2FawmzPoZdmuhRjuyMaYVQp0%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;600&quot; height=&quot;692&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;813&quot; data-origin-height=&quot;937&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;WMIC 검색 및 추가&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;6. 설치 진행&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;설치가 완료되는데 몇 분 정도 시간이 걸릴 수 있다.&lt;/li&gt;
&lt;li&gt;작업 중에 닫는다면 설치가 중단될 수 있기 때문에 완료된 후 닫기를 누른다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;813&quot; data-origin-height=&quot;319&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F9Kvh/btsP2DhfAeP/KduhsE1ebKemOa2EIBxuyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F9Kvh/btsP2DhfAeP/KduhsE1ebKemOa2EIBxuyK/img.png&quot; data-alt=&quot;설치 중&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F9Kvh/btsP2DhfAeP/KduhsE1ebKemOa2EIBxuyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF9Kvh%2FbtsP2DhfAeP%2FKduhsE1ebKemOa2EIBxuyK%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;600&quot; height=&quot;690&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;813&quot; data-origin-height=&quot;319&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;7. 설치 확인하기&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;설치가 완료되면 명령줄(cmd)에서 WMIC를 사용할 수 있다.&lt;/li&gt;
&lt;li&gt;예시로 wmic useraccount get name, SID 명령어를 입력하면 다음과 같이 계정명과 SID를 확인할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;970&quot; data-origin-height=&quot;300&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqVSQt/btsP4pPPTEF/zCpIcSL47FtlQIYbvp1U8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqVSQt/btsP4pPPTEF/zCpIcSL47FtlQIYbvp1U8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqVSQt/btsP4pPPTEF/zCpIcSL47FtlQIYbvp1U8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqVSQt%2FbtsP4pPPTEF%2FzCpIcSL47FtlQIYbvp1U8k%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;600&quot; height=&quot;186&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;970&quot; data-origin-height=&quot;300&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Study/Ect</category>
      <category>WMIC</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/204</guid>
      <comments>https://code-angie.tistory.com/204#entry204comment</comments>
      <pubDate>Sun, 24 Aug 2025 01:11:46 +0900</pubDate>
    </item>
    <item>
      <title>[Chrome] 크롬 웹브라우저 다운로드 및 설치하기</title>
      <link>https://code-angie.tistory.com/203</link>
      <description>&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;/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. 먼저 구글 공식 링크에 들어가 Chrome 다운로드 버튼을 누른다.&lt;/h4&gt;
&lt;figure id=&quot;og_1755887114457&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;Chrome 웹브라우저&quot; data-og-description=&quot;더욱 스마트해진 Google로 더 간편하고 안전하고 빠르게.&quot; data-og-host=&quot;www.google.com&quot; data-og-source-url=&quot;https://www.google.com/chrome/&quot; data-og-url=&quot;https://www.google.com/intl/ko_ALL/chrome/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cGYm0d/hyZC15la45/VU9thGKG0iIOlfsEnqU04K/img.png?width=1200&amp;amp;height=630&amp;amp;face=84_262_286_464,https://scrap.kakaocdn.net/dn/fdGl6/hyZyqeDAhg/zaC8I6UuLqpicFbRnbW3h1/img.png?width=1200&amp;amp;height=630&amp;amp;face=84_262_286_464&quot;&gt;&lt;a href=&quot;https://www.google.com/chrome/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.google.com/chrome/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cGYm0d/hyZC15la45/VU9thGKG0iIOlfsEnqU04K/img.png?width=1200&amp;amp;height=630&amp;amp;face=84_262_286_464,https://scrap.kakaocdn.net/dn/fdGl6/hyZyqeDAhg/zaC8I6UuLqpicFbRnbW3h1/img.png?width=1200&amp;amp;height=630&amp;amp;face=84_262_286_464');&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;Chrome 웹브라우저&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;더욱 스마트해진 Google로 더 간편하고 안전하고 빠르게.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1890&quot; data-origin-height=&quot;760&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IupeW/btsP5fercrX/cRWnAGnSFJBcPzWHBEVwO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IupeW/btsP5fercrX/cRWnAGnSFJBcPzWHBEVwO1/img.png&quot; data-alt=&quot;크롬 공식 다운로드 페이지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IupeW/btsP5fercrX/cRWnAGnSFJBcPzWHBEVwO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIupeW%2FbtsP5fercrX%2FcRWnAGnSFJBcPzWHBEVwO1%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;1890&quot; height=&quot;760&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1890&quot; data-origin-height=&quot;760&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;크롬 공식 다운로드 페이지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 다운로드가 완료되면 ChromeSetup.exe 파일을 실행한다.&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;358&quot; data-origin-height=&quot;139&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MLELe/btsP2Z5cB0A/eTmU0DOESc23PG0FzgPPH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MLELe/btsP2Z5cB0A/eTmU0DOESc23PG0FzgPPH1/img.png&quot; data-alt=&quot;설치 파일 실행&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MLELe/btsP2Z5cB0A/eTmU0DOESc23PG0FzgPPH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMLELe%2FbtsP2Z5cB0A%2FeTmU0DOESc23PG0FzgPPH1%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;358&quot; height=&quot;139&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;358&quot; data-origin-height=&quot;139&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;설치 파일 실행&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 설치 마법사가 자동으로 진행되어 별도의 복잡한 과정 없이 설치가 완료되고 크롬이 열린다.&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;647&quot; data-origin-height=&quot;303&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lrDy3/btsP4WlVdXT/9O0mvyMZ9hg1AQOCdehvUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lrDy3/btsP4WlVdXT/9O0mvyMZ9hg1AQOCdehvUK/img.png&quot; data-alt=&quot;설치 중&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lrDy3/btsP4WlVdXT/9O0mvyMZ9hg1AQOCdehvUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlrDy3%2FbtsP4WlVdXT%2F9O0mvyMZ9hg1AQOCdehvUK%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;647&quot; height=&quot;303&quot; data-origin-width=&quot;647&quot; data-origin-height=&quot;303&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;1021&quot; data-origin-height=&quot;788&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ISdCw/btsP1ZEIiIA/CDHFI6KQu06tFneXKjPMD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ISdCw/btsP1ZEIiIA/CDHFI6KQu06tFneXKjPMD1/img.png&quot; data-alt=&quot;크롬 시작 페이지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ISdCw/btsP1ZEIiIA/CDHFI6KQu06tFneXKjPMD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FISdCw%2FbtsP1ZEIiIA%2FCDHFI6KQu06tFneXKjPMD1%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;1021&quot; height=&quot;788&quot; data-origin-width=&quot;1021&quot; data-origin-height=&quot;788&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;4. 구글 계정으로 로그인한다면 북마크, 비밀번호, 확장 프로그램등이 자동으로 동기화되어 이전 설정을 그대로 사용할 수 있다.&lt;/h4&gt;</description>
      <category>Study/Ect</category>
      <category>Chrome</category>
      <category>구글</category>
      <category>크롬</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/203</guid>
      <comments>https://code-angie.tistory.com/203#entry203comment</comments>
      <pubDate>Sat, 23 Aug 2025 03:22:43 +0900</pubDate>
    </item>
    <item>
      <title>[Java] 윈도우에서 Java 개발 환경 설치하기 2025ver. (Eclipse Temurin JDK 설치, IntelliJ IDEA 설치)</title>
      <link>https://code-angie.tistory.com/202</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.&amp;nbsp;개발&amp;nbsp;환경&amp;nbsp;셋팅&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;자바 환경 셋팅은 크게 JDK 설치 &amp;gt; 환경변수 설정 &amp;gt; IDE 설치 &amp;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: #000000;&quot;&gt;여기서는 Windows를 기준으로 Eclipse Temurin JDK, IntelliJ IDEA를 설치하는 과정을 설명할 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.1. JDK 설치하기 (Eclipse Temurin)&lt;/span&gt;&lt;/h3&gt;
&lt;figure id=&quot;og_1755633985924&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;Adoptium&quot; data-og-description=&quot;Eclipse Adoptium provides prebuilt OpenJDK binaries from a fully open source set of build scripts and infrastructure.&quot; data-og-host=&quot;adoptium.net&quot; data-og-source-url=&quot;https://adoptium.net/&quot; data-og-url=&quot;https://adoptium.net&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/mAOi2/hyZC9WcsGG/7w2EqMkcic2QxEpYV5ATwk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/El0Tc/hyZypTWHks/kjkp6MPUkUv2JC4CnfVrdK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot;&gt;&lt;a href=&quot;https://adoptium.net/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://adoptium.net/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/mAOi2/hyZC9WcsGG/7w2EqMkcic2QxEpYV5ATwk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/El0Tc/hyZypTWHks/kjkp6MPUkUv2JC4CnfVrdK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720');&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;Adoptium&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Eclipse Adoptium provides prebuilt OpenJDK binaries from a fully open source set of build scripts and infrastructure.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;adoptium.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.1.1. bash를 사용하여 설치하기 (winget)&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;명령어 한줄로 간단하게 jdk를 설치하고 싶다면 이 방법을 사용할 수 있다. 여러가지 JDK를 번갈아 쓴다면 이 방법이 더욱 간결하고 편리할 것이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755635666264&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Temurin JDK 21 설치
winget install EclipseAdoptium.Temurin.21.JDK&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1) Documentation을 통해서 설치, 업그레이드, 제거 코드도 확인 가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;웹사이트에 접속해서 Resources &amp;gt; Installation Guide 를 선택&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1344&quot; data-origin-height=&quot;420&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pMInC/btsPX4yd79G/zSs7ZPiDC4kLkMRs3BOBf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pMInC/btsPX4yd79G/zSs7ZPiDC4kLkMRs3BOBf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pMInC/btsPX4yd79G/zSs7ZPiDC4kLkMRs3BOBf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpMInC%2FbtsPX4yd79G%2FzSs7ZPiDC4kLkMRs3BOBf1%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;1344&quot; height=&quot;420&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1344&quot; data-origin-height=&quot;420&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;OS에 알맞는 명령어를 확인하고 cmd 에서 설치&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1069&quot; data-origin-height=&quot;487&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAOny8/btsPY9y4BSM/N0YQPu06JIZPjHklmB9Rfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAOny8/btsPY9y4BSM/N0YQPu06JIZPjHklmB9Rfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAOny8/btsPY9y4BSM/N0YQPu06JIZPjHklmB9Rfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAOny8%2FbtsPY9y4BSM%2FN0YQPu06JIZPjHklmB9Rfk%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;1069&quot; height=&quot;487&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1069&quot; data-origin-height=&quot;487&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1755633569211&quot; class=&quot;applescript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# 자바가 잘 설치되어 있는지 혹은 이미 설치되어 있는 자바가 있는지는 다음 명령어를 통해 확인할 수 있다.
java --version&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.1.2. MSI를 내려받아 설치하기&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;처음 자바를 설치한다면 개발 환경 설정을 간편하게 할 수 있기 때문에 MSI 설치를 더 추천한다. 설치 마법사 GUI가 제공되기 때문에 직관적으로 확인하면서 설치 가능하다.&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;&lt;span style=&quot;color: #000000;&quot;&gt;공식 홈페이지에 접속하면 바로 윈도우를 위한 최신 버전의 Temurin MSI를 설치할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1306&quot; data-origin-height=&quot;575&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1qXe9/btsPXGqS0iV/JXYhbOOkiACBTzURKySyQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1qXe9/btsPXGqS0iV/JXYhbOOkiACBTzURKySyQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1qXe9/btsPXGqS0iV/JXYhbOOkiACBTzURKySyQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1qXe9%2FbtsPXGqS0iV%2FJXYhbOOkiACBTzURKySyQ0%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;1306&quot; height=&quot;575&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1306&quot; data-origin-height=&quot;575&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;다운 받은 파일을 실행하여 설치 마법사를 통해 JDK 설치 및 환경 설정을 완료한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;491&quot; data-origin-height=&quot;383&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TwoyA/btsPWgmcB3b/WLy8m2N8kvME9DFIleifIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TwoyA/btsPWgmcB3b/WLy8m2N8kvME9DFIleifIK/img.png&quot; data-alt=&quot;설치하려고 한다면 Next, 취소하려면 Cancel&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TwoyA/btsPWgmcB3b/WLy8m2N8kvME9DFIleifIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTwoyA%2FbtsPWgmcB3b%2FWLy8m2N8kvME9DFIleifIK%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;491&quot; height=&quot;383&quot; data-origin-width=&quot;491&quot; data-origin-height=&quot;383&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;설치하려고 한다면 Next, 취소하려면 Cancel&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;383&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kUd2g/btsPXmTHYlB/NpUWCYf7cLIk6mqm8t5jdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kUd2g/btsPXmTHYlB/NpUWCYf7cLIk6mqm8t5jdk/img.png&quot; data-alt=&quot;동의 체크하고 Next&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kUd2g/btsPXmTHYlB/NpUWCYf7cLIk6mqm8t5jdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkUd2g%2FbtsPXmTHYlB%2FNpUWCYf7cLIk6mqm8t5jdk%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;492&quot; height=&quot;383&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;383&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;동의 체크하고 Next&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;489&quot; data-origin-height=&quot;380&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFistG/btsPWrOrJ5s/VKi9HpDlGMKUWxcuJkdNgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFistG/btsPWrOrJ5s/VKi9HpDlGMKUWxcuJkdNgk/img.png&quot; data-alt=&quot;개인PC면 install for all, 회사PC면 install just for you를 선택하고 Next&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFistG/btsPWrOrJ5s/VKi9HpDlGMKUWxcuJkdNgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFistG%2FbtsPWrOrJ5s%2FVKi9HpDlGMKUWxcuJkdNgk%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;489&quot; height=&quot;380&quot; data-origin-width=&quot;489&quot; data-origin-height=&quot;380&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;개인PC면 install for all, 회사PC면 install just for you를 선택하고 Next&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;491&quot; data-origin-height=&quot;382&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nNKwz/btsPZvV387d/elt5u6FATRnWQhqBGfkk60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nNKwz/btsPZvV387d/elt5u6FATRnWQhqBGfkk60/img.png&quot; data-alt=&quot;기본 설정을 확인하고 필요하다면 다른 세팅도 추가하고 Next (기본 설정만해도 OK)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nNKwz/btsPZvV387d/elt5u6FATRnWQhqBGfkk60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnNKwz%2FbtsPZvV387d%2Felt5u6FATRnWQhqBGfkk60%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;491&quot; height=&quot;382&quot; data-origin-width=&quot;491&quot; data-origin-height=&quot;382&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;기본 설정을 확인하고 필요하다면 다른 세팅도 추가하고 Next (기본 설정만해도 OK)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;491&quot; data-origin-height=&quot;381&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UJpHi/btsPZT3zpBu/NPPYSr0OfEyt1unsJ3SvJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UJpHi/btsPZT3zpBu/NPPYSr0OfEyt1unsJ3SvJ0/img.png&quot; data-alt=&quot;설치 시작&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UJpHi/btsPZT3zpBu/NPPYSr0OfEyt1unsJ3SvJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUJpHi%2FbtsPZT3zpBu%2FNPPYSr0OfEyt1unsJ3SvJ0%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;491&quot; height=&quot;381&quot; data-origin-width=&quot;491&quot; data-origin-height=&quot;381&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;490&quot; data-origin-height=&quot;382&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dOne52/btsPWuqTRZg/gAttwbakSbzEK84ZZKGaN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dOne52/btsPWuqTRZg/gAttwbakSbzEK84ZZKGaN0/img.png&quot; data-alt=&quot;설치 중&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dOne52/btsPWuqTRZg/gAttwbakSbzEK84ZZKGaN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdOne52%2FbtsPWuqTRZg%2FgAttwbakSbzEK84ZZKGaN0%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;490&quot; height=&quot;382&quot; data-origin-width=&quot;490&quot; data-origin-height=&quot;382&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;489&quot; data-origin-height=&quot;382&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RklWw/btsPYOaNxHA/06JSXQISdlovx3P7NAKNqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RklWw/btsPYOaNxHA/06JSXQISdlovx3P7NAKNqK/img.png&quot; data-alt=&quot;설치 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RklWw/btsPYOaNxHA/06JSXQISdlovx3P7NAKNqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRklWw%2FbtsPYOaNxHA%2F06JSXQISdlovx3P7NAKNqK%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;489&quot; height=&quot;382&quot; data-origin-width=&quot;489&quot; data-origin-height=&quot;382&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.2. IntelliJ IDEA 설치하기&lt;/span&gt;&lt;/h3&gt;
&lt;figure id=&quot;og_1755637913818&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;IntelliJ IDEA 다운로드&quot; data-og-description=&quot;&quot; data-og-host=&quot;www.jetbrains.com&quot; data-og-source-url=&quot;https://www.jetbrains.com/ko-kr/idea/download/?section=windows&quot; data-og-url=&quot;https://www.jetbrains.com/ko-kr/idea/download/?section=windows&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.jetbrains.com/ko-kr/idea/download/?section=windows&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.jetbrains.com/ko-kr/idea/download/?section=windows&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;IntelliJ IDEA 다운로드&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.jetbrains.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1) 웹사이트에 접속해 IntelliJ IDEA Ultimate 혹은 Community를 다운로드하여 설치한다.&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;Ultimate과 Community가 지원하는 것이 다르기에 필요한 것을 확인한 후 설치하면 된다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Ulimate 버전은 유료이며, 30일 평가판을 사용할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdOA5s/btsPXsflDkM/emKCibWONjxdKtq7VYRJX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdOA5s/btsPXsflDkM/emKCibWONjxdKtq7VYRJX0/img.png&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;241&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;50.96&quot; data-filename=&quot;blob&quot; style=&quot;width: 50.3641%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdOA5s/btsPXsflDkM/emKCibWONjxdKtq7VYRJX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdOA5s%2FbtsPXsflDkM%2FemKCibWONjxdKtq7VYRJX0%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;600&quot; height=&quot;241&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dqkZJr/btsPWe9MukM/FbRq88EfVkHOqWnCXWXX7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dqkZJr/btsPWe9MukM/FbRq88EfVkHOqWnCXWXX7K/img.png&quot; data-origin-width=&quot;623&quot; data-origin-height=&quot;260&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;49.04&quot; style=&quot;width: 48.4731%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dqkZJr/btsPWe9MukM/FbRq88EfVkHOqWnCXWXX7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdqkZJr%2FbtsPWe9MukM%2FFbRq88EfVkHOqWnCXWXX7K%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;623&quot; height=&quot;260&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;다운 받은 파일을 실행하여 IntelliJ IDEA를 완료한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;578&quot; data-origin-height=&quot;354&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WEAXG/btsPZduIpTZ/JilOvl5NCVLTescbCNBsOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WEAXG/btsPZduIpTZ/JilOvl5NCVLTescbCNBsOk/img.png&quot; data-alt=&quot;설치를 시작하려면 다음 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WEAXG/btsPZduIpTZ/JilOvl5NCVLTescbCNBsOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWEAXG%2FbtsPZduIpTZ%2FJilOvl5NCVLTescbCNBsOk%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;578&quot; height=&quot;354&quot; data-origin-width=&quot;578&quot; data-origin-height=&quot;354&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;577&quot; data-origin-height=&quot;357&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjmmdX/btsP4qgF0zH/hKzhYbkOZT43q6JwLHtUw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjmmdX/btsP4qgF0zH/hKzhYbkOZT43q6JwLHtUw0/img.png&quot; data-alt=&quot;설치 위치를 설정하고 다음 선택 (기본 설정 OK)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjmmdX/btsP4qgF0zH/hKzhYbkOZT43q6JwLHtUw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjmmdX%2FbtsP4qgF0zH%2FhKzhYbkOZT43q6JwLHtUw0%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;577&quot; height=&quot;357&quot; data-origin-width=&quot;577&quot; data-origin-height=&quot;357&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;설치 위치를 설정하고 다음 선택 (기본 설정 OK)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;355&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qqE6B/btsPZjuMzDX/CsmhzXkZA4mwiKEUDPGnZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qqE6B/btsPZjuMzDX/CsmhzXkZA4mwiKEUDPGnZk/img.png&quot; data-alt=&quot;설치 옵션을 체크해주고 다음 선택 (보통 4개 모두 체크, gradle을 추가하기도 함)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qqE6B/btsPZjuMzDX/CsmhzXkZA4mwiKEUDPGnZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqqE6B%2FbtsPZjuMzDX%2FCsmhzXkZA4mwiKEUDPGnZk%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;576&quot; height=&quot;355&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;355&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;설치 옵션을 체크해주고 다음 선택 (보통 4개 모두 체크, gradle을 추가하기도 함)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;577&quot; data-origin-height=&quot;354&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5EKNy/btsPZef43xv/wZBMi1GelzNywRjruNTvh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5EKNy/btsPZef43xv/wZBMi1GelzNywRjruNTvh0/img.png&quot; data-alt=&quot;시작메뉴에 바로가기 아이콘 생성하려면 바로 설치, 바로가기 생성 안한다면 체크하고 설치&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5EKNy/btsPZef43xv/wZBMi1GelzNywRjruNTvh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5EKNy%2FbtsPZef43xv%2FwZBMi1GelzNywRjruNTvh0%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;577&quot; height=&quot;354&quot; data-origin-width=&quot;577&quot; data-origin-height=&quot;354&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;575&quot; data-origin-height=&quot;355&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cIcDqM/btsPWuK7LL0/v61VG6yNh69w7IYH6DoLb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cIcDqM/btsPWuK7LL0/v61VG6yNh69w7IYH6DoLb1/img.png&quot; data-alt=&quot;설치 중&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cIcDqM/btsPWuK7LL0/v61VG6yNh69w7IYH6DoLb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcIcDqM%2FbtsPWuK7LL0%2Fv61VG6yNh69w7IYH6DoLb1%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;575&quot; height=&quot;355&quot; data-origin-width=&quot;575&quot; data-origin-height=&quot;355&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;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;575&quot; data-origin-height=&quot;355&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lDtgA/btsPZnRu1Be/KUkp6NofwuBDAVaOVeFy3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lDtgA/btsPZnRu1Be/KUkp6NofwuBDAVaOVeFy3k/img.png&quot; data-alt=&quot;설치 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lDtgA/btsPZnRu1Be/KUkp6NofwuBDAVaOVeFy3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlDtgA%2FbtsPZnRu1Be%2FKUkp6NofwuBDAVaOVeFy3k%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;575&quot; height=&quot;355&quot; data-origin-width=&quot;575&quot; data-origin-height=&quot;355&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;635&quot; data-origin-height=&quot;507&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvp4xu/btsPXZwXwRy/KuDLnbyUYWWo085mlGM1gK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvp4xu/btsPXZwXwRy/KuDLnbyUYWWo085mlGM1gK/img.png&quot; data-alt=&quot;한국어로 설정하거나 영어로 설정 가능&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvp4xu/btsPXZwXwRy/KuDLnbyUYWWo085mlGM1gK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbvp4xu%2FbtsPXZwXwRy%2FKuDLnbyUYWWo085mlGM1gK%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;635&quot; height=&quot;507&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;507&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;575&quot; data-origin-height=&quot;445&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btwMKl/btsPYCIhLbp/m8Ywq2Rw3rZzLXTPhZJVXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btwMKl/btsPYCIhLbp/m8Ywq2Rw3rZzLXTPhZJVXK/img.png&quot; data-alt=&quot;동의하고 계속&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btwMKl/btsPYCIhLbp/m8Ywq2Rw3rZzLXTPhZJVXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtwMKl%2FbtsPYCIhLbp%2Fm8Ywq2Rw3rZzLXTPhZJVXK%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;575&quot; height=&quot;445&quot; data-origin-width=&quot;575&quot; data-origin-height=&quot;445&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;780&quot; data-origin-height=&quot;633&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgIEqA/btsPYzx2MtE/cUdtJYXtjKCVNe18lEsGkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgIEqA/btsPYzx2MtE/cUdtJYXtjKCVNe18lEsGkk/img.png&quot; data-alt=&quot;IntelliJ IDEA 실행 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgIEqA/btsPYzx2MtE/cUdtJYXtjKCVNe18lEsGkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgIEqA%2FbtsPYzx2MtE%2FcUdtJYXtjKCVNe18lEsGkk%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;780&quot; height=&quot;633&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;633&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;IntelliJ IDEA 실행 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Study/Java</category>
      <category>eclipse</category>
      <category>Intellij</category>
      <category>java</category>
      <category>jdk</category>
      <category>Temurin</category>
      <category>Windows</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/202</guid>
      <comments>https://code-angie.tistory.com/202#entry202comment</comments>
      <pubDate>Wed, 20 Aug 2025 06:15:06 +0900</pubDate>
    </item>
    <item>
      <title>[React] GitHub Pages 배포 중 gh-pages 에러 해결하기</title>
      <link>https://code-angie.tistory.com/200</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;gh-pages -d build 명령어를 통해 GitHub Pages로 프로젝트를 배포하던 중,&amp;nbsp;깃허브 계정의 비밀번호를 잘못 입력하여 작업이 중단되었다.&amp;nbsp;이후 다시 gh-pages -d build 명령어를 실행해보았지만 다음과 같은 에러가 발생했다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;fatal:&amp;nbsp;a&amp;nbsp;branch&amp;nbsp;named&amp;nbsp;'gh-pages'&amp;nbsp;already&amp;nbsp;exists&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;시도한 방법&lt;/b&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;gh-pages 브랜치 삭제&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;로컬 및 원격 저장소에서 gh-pages 브랜치를 삭제했지만 오히려 삭제할 브랜치가 없다는 것만 확인하고 동일한 에러가 발생했다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Docker 컨테이너 삭제 및 재빌드&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;프로젝트 환경을 초기화하기 위해 실행 중이던 Docker 컨테이너를 삭제하고 재빌드했지만 문제는 해결되지 않았다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;문제의 원인&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;에러 메시지와 실행 로그를 분석한 결과, node_modules/gh-pages의 내부적으로 사용하는 캐시 파일에 gh-pages 브랜치 관련 기록이 남아 있는 것으로 보였다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;at&amp;nbsp;ChildProcess.&amp;lt;anonymous&amp;gt;&amp;nbsp;(/app/node_modules/gh-pages/lib/git.js:42:16)&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이를 기반으로 node_modules/.cache/gh-pages 디렉터리에 기록이 남아 있어 문제가 발생한 것으로 판단했다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt; 해결 방법&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;node_modules/.cache/gh-pages 디렉터리를 삭제한 후, 다시 gh-pages -d build 명령어를 실행한 결과 문제가 해결되었다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1733489749724&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;rm -rf node_modules/.cache/gh-pages
gh-pages -d build&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 비정상 종료가 발생하면 내부 캐시 파일이 원인이 될 수 있음으로 캐시 삭제를 시도해볼 수 있다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>gh-pages</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/200</guid>
      <comments>https://code-angie.tistory.com/200#entry200comment</comments>
      <pubDate>Fri, 6 Dec 2024 21:57:20 +0900</pubDate>
    </item>
    <item>
      <title>[Django] 테스트 코드를 수행할 때 SimpleUploadedFile 파일 포인터 문제 해결하기</title>
      <link>https://code-angie.tistory.com/199</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;테스트 코드를 작성할 때 BaseTestCase 클래스를 별도로 작성하면 테스트 코드를 더 간편하게 관리할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt; 예를 들어, setUp 메서드를 통해 초기 데이터를 생성하고, 여러 테스트에서 별도의 추가 작성 없이 재사용하는 것이다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;하지만 SimpleUploadedFile 사용한다면 이미지 포스팅 테스트를 작성할 때 다음과 같은 문제가 발생할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;BaseTestCase 클래스에서 setUp 메서드를 통해 이미지와 함께 게시글(Post)을 생성하고, 이를 PostTest 클래스의 테스트 메서드에서 재사용하려고 할 때, 새로운 포스팅 요청이 실패하며 에러가 발생한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1732803151882&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# response.data 
{'image': [ErrorDetail(string='제출한 파일이 비어있습니다.', code='empty')]}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;문제의 원인&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 에러는 SimpleUploadedFile 객체가 &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: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;파일 포인터가 끝에 위치한 상태에서는 이미지 데이터를 다시 읽을 수 없기 때문에 파일이 비어있다고 판단하게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;그렇기 때문에 재요청 시에&amp;nbsp;empty 에러가 발생하는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;해결 방법&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 문제를 해결할 수 있는 방법 세 가지를 소개하려고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;&lt;b&gt;파일 포인터를 초기화(seek(0))&lt;/b&gt; 하여 객체를 재사용.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;&lt;b&gt;새로운 SimpleUploadedFile 객체 생성&lt;/b&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;&lt;b&gt;각 테스트 클래스에서 독립적으로 객체 생성&lt;/b&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;1. 파일 포인터 초기화&lt;/span&gt;&lt;/b&gt;&lt;/h4&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt; SimpleUploadedFile 객체를 재사용하기 위해서 파일 포인터를 맨 처음 위치로 돌려놓는 방법이 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;seek(0) 메서드를 사용하면 초기화가 가능하다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;초기화를 한다면 동일한 객체를 여러번 사용할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1732807100201&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from django.core.files.uploadedfile import SimpleUploadedFile
from django.test import TestCase
from rest_framework.test import APIClient

class BaseTestCase(TestCase):
    def setUp(self):
        self.client = APIClient()
        self.image = SimpleUploadedFile(&quot;test_image.jpg&quot;, b&quot;image_content&quot;, content_type=&quot;image/jpeg&quot;)
        
        # 첫 번째 포스팅 생성
        self.client.post(
            &quot;/posts/create/&quot;,
            {&quot;title&quot;: &quot;First Post&quot;, &quot;content&quot;: &quot;This is the first post.&quot;, &quot;image&quot;: self.image},
            format=&quot;multipart&quot;
        )
        
class PostTest(BaseTestCase):
    def test_create_post(self):
        # 파일 포인터 초기화
        self.image.seek(0)
        
        # 두 번째 포스팅 생성 (이미지 재사용)
        response = self.client.post(
            &quot;/posts/create/&quot;,
            {&quot;title&quot;: &quot;Second Post&quot;, &quot;content&quot;: &quot;This is the second post.&quot;, &quot;image&quot;: self.image},
            format=&quot;multipart&quot;
        )
        self.assertEqual(response.status_code, 201)&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;2. 새로운 SimpleUploadedFile 객체 생성하기&lt;/span&gt;&lt;/b&gt;&lt;/h4&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;이미지를 요청할때마다 새로운 SimpleUploadedFile 객체를 생성하여 사용한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;새롭게 생성함으로써 파일 포인터 문제를 관리할 필요가 없어진다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1732809417381&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from django.core.files.uploadedfile import SimpleUploadedFile
from django.test import TestCase
from rest_framework.test import APIClient

class BaseTestCase(TestCase):
    def setUp(self):
        self.client = APIClient()
        image = SimpleUploadedFile(&quot;test_image.jpg&quot;, b&quot;image_content&quot;, content_type=&quot;image/jpeg&quot;)
        
        # 첫 번째 포스팅 생성
        self.client.post(
            &quot;/posts/create/&quot;,
            {&quot;title&quot;: &quot;First Post&quot;, &quot;content&quot;: &quot;This is the first post.&quot;, &quot;image&quot;: image},
            format=&quot;multipart&quot;
        )
        
class PostTest(BaseTestCase):
    def test_create_post(self):
        # 새 이미지 생성
        new_image = SimpleUploadedFile(&quot;test_image.jpg&quot;, b&quot;image_content&quot;, content_type=&quot;image/jpeg&quot;)
        
        # 두 번째 포스팅 생성 (이미지 재사용)
        response = self.client.post(
            &quot;/posts/create/&quot;,
            {&quot;title&quot;: &quot;Second Post&quot;, &quot;content&quot;: &quot;This is the second post.&quot;, &quot;image&quot;: new_image},
            format=&quot;multipart&quot;
        )
        self.assertEqual(response.status_code, 201)&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;3. 테스트 클래스별로 setUp 메서드 정의&lt;/span&gt;&lt;/b&gt;&lt;/h4&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;클래스마다 필요시에 독립적으로 setUp 메서드를 추가 작성하여 &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;SimpleUploadedFile 객체를 생성한다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333; text-align: left;&quot;&gt;테스트마다 새롭게 객체가 생성됨으로 &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;파일 포인터 문제를 회피할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1732810144025&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from django.core.files.uploadedfile import SimpleUploadedFile
from django.test import TestCase
from rest_framework.test import APIClient

class BaseTestCase(TestCase):
    def setUp(self):
        self.client = APIClient()
        image = SimpleUploadedFile(&quot;test_image.jpg&quot;, b&quot;image_content&quot;, content_type=&quot;image/jpeg&quot;)
        
        # 첫 번째 포스팅 생성
        self.client.post(
            &quot;/posts/create/&quot;,
            {&quot;title&quot;: &quot;First Post&quot;, &quot;content&quot;: &quot;This is the first post.&quot;, &quot;image&quot;: image},
            format=&quot;multipart&quot;
        )
        
class PostTest(BaseTestCase):
    def setUp(self):
        super().setUp()
        self.image = SimpleUploadedFile(&quot;test_image.jpg&quot;, b&quot;image_content&quot;, content_type=&quot;image/jpeg&quot;)
        
    def test_create_post(self):
        # 두 번째 포스팅 생성 (이미지 재사용)
        response = self.client.post(
            &quot;/posts/create/&quot;,
            {&quot;title&quot;: &quot;Second Post&quot;, &quot;content&quot;: &quot;This is the second post.&quot;, &quot;image&quot;: self.image},
            format=&quot;multipart&quot;
        )
        self.assertEqual(response.status_code, 201)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Django</category>
      <category>simpleuploadedfile</category>
      <category>TestCase</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/199</guid>
      <comments>https://code-angie.tistory.com/199#entry199comment</comments>
      <pubDate>Fri, 29 Nov 2024 01:20:09 +0900</pubDate>
    </item>
    <item>
      <title>[Django] 사용자 모델 커스터마이징 하기 (AbstractUser, AbstractBaseUser)</title>
      <link>https://code-angie.tistory.com/198</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Django에서 기본적으로 제공하는 User 모델을 사용할 수 있지만, 프로젝트 요구사항에 따라 사용자 모델을 직접 커스터마이징해야 할 때가 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Django에서는 AbstractUser와 AbstractBaseUser라는 두 가지 추상 클래스를 통해 사용자 모델을 커스터마이징할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt; &lt;b&gt;AbstractUser&lt;/b&gt;는 기본적으로 제공되는 필드를 유지하면서 필요한 필드를 추가할 때 사용 &amp;nbsp;가능하고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;AbstractBaseUser&lt;/b&gt;는 사용자 모델을 완전히 새로 정의할 때 사용 가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이 두 가지 클래스는 구체적으로 어떤 필드와 동작을 제공하는지 살펴보자.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;사전 설정&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;먼저 AbstractUser 나 AbstractBaseUser 클래스를 상속받아 생성한다면 settings.py를 변경해주어야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1732741887862&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# projectname/settings.py
# 사용법: {App 이름}.{Model 이름}

AUTH_USER_MODEL = &quot;user.User&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;AbstractUser&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Django의 기본 User 모델을 확장할 수 있도록 설계된 추상 클래스이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&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: #333333;&quot;&gt;&lt;b&gt;기본 필드&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;username: 기본 인증에 사용되는 사용자 ID&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;first_name: 사용자 이름&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;last_name: 사용자 성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;email: 이메일 주소&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;password: 해시된 비밀번호&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;is_staff: 관리 사이트 접근 가능 여부&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;is_active: 사용자 활성화 상태 여부&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;is_superuser: 슈퍼유저 권한 여부&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;last_login: 마지막 로그인 시간&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;date_joined: 계정 생성 시간&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;기본 코드&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1732736010450&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from django.contrib.auth.models import AbstractUser

class NyUser(AbstractUser):
    username = None             # 기존 필드 제거
    age = models.IntegerField() # 새로운 필드 추가&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&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: #333333;&quot;&gt;2. &lt;b&gt;AbstractBaseUser&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;사용자 모델을 완전히 재정의해야 할 때 사용하는 추상 클래스이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;사용자 모델을 이메일 기반으로 만들거나, ID 시스템을 완전히 재정의하고 싶은 경우 사용한다.&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: #333333;&quot;&gt;&lt;b&gt;기본 필드&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;password: 해시된 비밀번호&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;last_login: 마지막 로그인 시간&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;is_active: 사용자 활성화 상태 여부&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;필수 구현 사항&lt;/b&gt;&lt;/span&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: #333333;&quot;&gt;Django의 인증 시스템과 통합되기 위해 반드시 구현해야 하는 사항이다.&lt;/span&gt;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;USERNAME_FIELD&lt;/span&gt;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;인증에서 고유 식별자인 사용자 ID로 사용할 필드 이름을 말한다. &lt;span style=&quot;text-align: left;&quot;&gt;(username, email)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;로그인, 토큰 발행 등에 사용된다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;REQUIRED_FIELDS&lt;/span&gt;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;superuser 생성 시 필요한 필드 목록을 말한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;빈 리스트로 설정할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;CustomUserManager 클래스&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;create_user(일반 사용자 생성)와 create_superuser(admin 관리 권한이 있는 superuser 생성) 메서드를 포함하는 CustomUserManager 클래스를 설정해야 한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;필드 검증과 초기화 처리하는데 사용되는 메서드들이다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;기본 코드&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1732740442725&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager


class CustomUserManager(BaseUserManager):
    def create_user(self, username, email, password=None, **extra_fields):
        # 일반 사용자 생성
        if not email:
            raise ValueError('Users must have an email address')
        email = self.normalize_email(email)
        user = self.model(username=username, email=email, **extra_fields)
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, username, email, password=None, **extra_fields):
        # superuser 생성
        user = self.create_user(username, email, password, **extra_fields)
        user.is_admin = True
        user.save(using=self._db)
        return user


class MyUser(AbstractBaseUser):
    username = models.CharField(max_length=40, unique=True)
    email = models.EmailField(
        verbose_name='email address',
        max_length=255,
        unique=True,
        )
    age = models.IntegerField()
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)
    ...

    objects = CustomUserManager()

    USERNAME_FIELD = &quot;username&quot;
    REQUIRED_FIELDS = [&quot;age&quot;]

    def __str__(self):
        return self.username

    def has_perm(self, perm, obj=None):
        # 사용자 권한 확인
        return True

    def has_module_perms(self, app_label):
        # 사용자 app_label 앱을 볼 수 있는 권한 확인
        return True

    @property
    def is_staff(self):
        # 직원(staff) 여부 확인
        return self.is_admin&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;출처&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://docs.djangoproject.com/en/5.1/topics/auth/customizing/#substituting-a-custom-user-model&quot;&gt;Django에서 인증 사용자 정의 | Django 문서 | 장고(Django)&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>abstractbaseuser</category>
      <category>AbstractUser</category>
      <category>Django</category>
      <category>model</category>
      <category>user</category>
      <category>사용자 정의 모델</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/198</guid>
      <comments>https://code-angie.tistory.com/198#entry198comment</comments>
      <pubDate>Thu, 28 Nov 2024 06:39:33 +0900</pubDate>
    </item>
    <item>
      <title>[백준 BOJ / Python] 1263번 시간 관리</title>
      <link>https://code-angie.tistory.com/197</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;문제&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;N개의 작업이 주어졌을 때, 각 작업의 마감시간(S)과 소요시간(T)을 고려해 모든 작업을 마감시간 내 완료하면서 가장 늦게 일을 시작할 수 있는 시간을 찾는 문제이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;작업은 동시에 할 수 없으며 일을 시작할 수 있는 시간은 0부터이다.&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&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;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;358&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bexRo3/btsKX2lUkj6/aRjPCaQEfWhaiIRIM4aInK/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bexRo3/btsKX2lUkj6/aRjPCaQEfWhaiIRIM4aInK/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bexRo3/btsKX2lUkj6/aRjPCaQEfWhaiIRIM4aInK/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bexRo3/btsKX2lUkj6/aRjPCaQEfWhaiIRIM4aInK/img.gif&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;550&quot; height=&quot;308&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;358&quot;/&gt;&lt;/span&gt;&lt;/figure&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;/li&gt;
&lt;li&gt;임의로 시작시간을 무한으로 설정한다.&lt;/li&gt;
&lt;li&gt;가장 마감시간이 늦은 작업부터 차례대로 확인한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1049&quot; data-origin-height=&quot;378&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cd7jFi/btsKYzDCahC/A9Uz2fxkfvbjCLNdBq0A0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cd7jFi/btsKYzDCahC/A9Uz2fxkfvbjCLNdBq0A0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cd7jFi/btsKYzDCahC/A9Uz2fxkfvbjCLNdBq0A0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcd7jFi%2FbtsKYzDCahC%2FA9Uz2fxkfvbjCLNdBq0A0K%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; height=&quot;180&quot; data-origin-width=&quot;1049&quot; data-origin-height=&quot;378&quot;/&gt;&lt;/span&gt;&lt;/figure&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;/li&gt;
&lt;li&gt;만약 시작시간보다 다음 작업의 마감시간이 크다면, 시작시간을 기준으로 소요시간을 뺀 값을 다음 시작시간으로 설정한다.&lt;/li&gt;
&lt;li&gt;최종적으로 시작시간이 0보다 크면 해당값을 출력하고, 작다면 -1을 출력한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Python 코드&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1732563402863&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
input = sys.stdin.readline

n = int(input())
arr=[tuple(map(int,input().split())) for _ in range(n)]
arr.sort(key=lambda x: x[1])
ans = float(&quot;inf&quot;)
while arr:
    t,s = arr.pop()
    if ans &amp;gt;= s:
        ans = s-t
    else:
        ans -= t

if ans &amp;lt; 0:
    print(-1)
else:
    print(ans)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;문제출처&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1263&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/1263&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Study/Coding Test</category>
      <category>1263</category>
      <category>시간관리</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/197</guid>
      <comments>https://code-angie.tistory.com/197#entry197comment</comments>
      <pubDate>Wed, 27 Nov 2024 23:59:01 +0900</pubDate>
    </item>
    <item>
      <title>[백준 BOJ / Python] 1148번 단어 만들기</title>
      <link>https://code-angie.tistory.com/196</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;문제&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3x3 퍼즐판이 주어졌을 때, 퍼즐판의 알파벳을 사용하여 만들 수 있는 단어의 수를 알파벳별로 계산하고, 단어 수의 &lt;b&gt;최솟값&lt;/b&gt;과 &lt;b&gt;최댓값&lt;/b&gt;에 해당하는 알파벳을 출력하는 문제이다.&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&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;/li&gt;
&lt;li&gt;먼저 단어 사전의 단어들의 알파벳 빈도 딕셔너리로 변환하여 저장한다. (중복 값이 있을 수 있음을 고려)&amp;nbsp;&lt;/li&gt;
&lt;li&gt;퍼즐 정보를 하나씩 받으면서 퍼즐의 알파벳 빈도 딕셔너리를 생성한다.&lt;/li&gt;
&lt;li&gt;단어 사전의 단어들과 퍼즐을 비교하여 퍼즐을 통해 만들 수 있는 단어인지 확인한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;퍼즐 알파벳의 빈도가 단어 알파벳의 빈도보다 작으면 만들 수 없는 단어이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;만들 수 있는 단어라면, 단어 구성 사용된 알파벳들에 대하여 단어 생성 빈도(puzzle_count)를 1씩 올린다.&lt;/li&gt;
&lt;li&gt;최종적으로 만들 수 있는 단어의 개수가 최소인 알파벳들과 최솟값, 최대인 알파벳들과 최댓값을 출력한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Python 코드&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1732460311007&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
input = sys.stdin.readline

# 단어를 알파벳 빈도 딕셔너리로 변환하여 저장
def add_word(word):
    temp = dict()
    for x in word:
        if x in temp:
            temp[x] += 1
        else:
            temp[x] = 1
    words_dict[word] = temp
    return

# 퍼즐로 단어를 만들 수 있는지 확인
def can_make_word(puzzle, word):
    for x in word:
        if word[x] &amp;gt; puzzle.get(x, 0):
            return False
    return True

# 결과 출력 함수
def print_answer(puzzle_count):
    ans = list(puzzle_count.items())
    ans.sort(key = lambda x: (x[1],x[0]))
    min_, max_ = ans[0][1], ans[-1][1]
    min_alpha, max_alpha = &quot;&quot;,&quot;&quot;
    for x, cnt in ans:
        if cnt == min_:
            min_alpha += x
        if cnt == max_:
            max_alpha += x
    print(min_alpha, min_, max_alpha, max_)

# 단어 입력
words_dict = dict()
while True:
    word = input().strip()
    if word == &quot;-&quot;:
        break
    if word in words_dict:
        continue
    add_word(word)

# 퍼즐 입력
while True:
    puzzle = input().strip()
    if puzzle == &quot;#&quot;:
        break
        
    # 퍼즐의 알파벳 빈도 딕셔너리 생성
    puzzle_dict = dict()
    for x in puzzle:
        if x in puzzle_dict:
            puzzle_dict[x] += 1
        else:
            puzzle_dict[x] = 1

    # 퍼즐에 포함된 단어의 알파벳 개수 계산
    puzzle_count = {t:0 for t in puzzle_dict.keys()}
    for word_dict in words_dict.values():
        if can_make_word(puzzle_dict, word_dict):
            for x in word_dict:
                puzzle_count[x] += 1

    # 결과 출력
    print_answer(puzzle_count)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;문제출처&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1148&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/1148&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Study/Coding Test</category>
      <category>1148</category>
      <category>단어만들기</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/196</guid>
      <comments>https://code-angie.tistory.com/196#entry196comment</comments>
      <pubDate>Sun, 24 Nov 2024 23:58:41 +0900</pubDate>
    </item>
    <item>
      <title>[백준 BOJ / Python] 1327번 소트 게임</title>
      <link>https://code-angie.tistory.com/195</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;문제&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1부터 N까지의 정수로 이루어진 순열을 오름차순으로 정렬할 때, 최소 몇 번의 뒤집기를 해야 하는지 구하는 문제이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;정렬은 특정 위치 &lt;span&gt;&lt;span&gt;ii&lt;/span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;에서 시작하여 오른쪽으로 &lt;span&gt;&lt;span&gt;K&lt;/span&gt;&lt;/span&gt;개의 숫자를 뒤집는 연산을 반복하는 방식으로 이루어진다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어 N이 5, K가 3일 때, (5, 4, 3, 2, 1) 순열이 주어진 경우&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;i=0에서 뒤집으면 (3, 4, 5, 2, 1) 이 된다.&lt;/li&gt;
&lt;li&gt;i=1에서 뒤집으면 (3, 2, 5, 4, 1) 이 된다.&lt;/li&gt;
&lt;li&gt;i=2에서 뒤집으면 (3, 2, 1, 4, 5) 이 된다.&lt;/li&gt;
&lt;li&gt;i=0에서 뒤집으면 (1, 2, 3, 4, 5) 이 되면서 정렬이 완료된다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최소 4번의 뒤집기로 오름차순 순열을 만들 수 있다.&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&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;b&gt;순열 상태를 노드&lt;/b&gt;로 보고, 한 번의 뒤집기로 다른 상태로 이동하는 &lt;b&gt;최단 경로 탐색 문제&lt;/b&gt;로 볼 수 있다.&lt;/li&gt;
&lt;li&gt;그렇기 때문에 BFS를 사용해 정렬된 상태로 도달하는 최소 횟수를 구할 수 있다.&lt;/li&gt;
&lt;li&gt;먼저 큐에 최초로 입력된 순열과 뒤집기 횟수(0)를 저장한다.&lt;/li&gt;
&lt;li&gt;최소 뒤집기 횟수를 구할 수 있는 BFS 알고리즘을 수행한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;현재 순열이 정렬된 순열인지 확인하고, 정렬이 완료되었다면 뒤집은 횟수를 출력한다.&lt;/li&gt;
&lt;li&gt;현재 순열에서 가능한 모든 뒤집기를 시도해 새로운 순열을 생성한다. (0 &amp;le; i &amp;le; N-K)&lt;/li&gt;
&lt;li&gt;만약 새로운 순열이 이전에 만들었던/방문했던 순열이 아니라면 큐에 추가하고 visited에 추가해 방문 표시를 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Python 코드&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1732311977957&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from collections import deque
import sys
input = sys.stdin.readline
n,k = map(int,input().split())
seq = tuple(map(int,input().split()))

q = deque([(seq, 0)])
visited = set()
while q:
    cur, d = q.popleft()

    if cur == tuple(range(1,n+1)):
        print(d)
        break

    for i in range(n-k+1):
        next_seq = cur[:i]+cur[i:i+k][::-1]+cur[i+k:]
        if next_seq not in visited:
            visited.add(next_seq)
            q.append((next_seq, d+1))
else:
    print(-1)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;문제출처&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1327&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/1327&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Study/Coding Test</category>
      <category>1327</category>
      <category>BFS</category>
      <category>python</category>
      <category>소트 게임</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/195</guid>
      <comments>https://code-angie.tistory.com/195#entry195comment</comments>
      <pubDate>Sat, 23 Nov 2024 06:47:17 +0900</pubDate>
    </item>
    <item>
      <title>[PyCharm] 자주 사용하는 단축키 모음</title>
      <link>https://code-angie.tistory.com/192</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Python으로 개발을 한다면 PyCharm은 매우 유용한 IDE 이다. 다양한 기능과 편의성 덕에 많은 개발자들이 사용한다.&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;h3 data-ke-size=&quot;size23&quot;&gt;1. 파일 탐색 및 편집&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;① 프로젝트 뷰 열기&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Alt + 1 &lt;/b&gt;(Windows/Linux), &lt;b&gt;Command + 1&lt;/b&gt; (macOS)&lt;br /&gt;프로젝트 뷰를 빠르게 열고 닫을 수 있어 필요할 때 프로젝트 구조를 빠르게 확인하거나 창을 닫아 코드를 넓게 확인할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;254&quot; data-origin-height=&quot;238&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lmGbu/btsKSnwO3K6/lRsrUfMTheR2SPL7NnRIt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lmGbu/btsKSnwO3K6/lRsrUfMTheR2SPL7NnRIt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lmGbu/btsKSnwO3K6/lRsrUfMTheR2SPL7NnRIt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlmGbu%2FbtsKSnwO3K6%2FlRsrUfMTheR2SPL7NnRIt1%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;254&quot; height=&quot;238&quot; data-origin-width=&quot;254&quot; data-origin-height=&quot;238&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;② 파일 열기&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Ctrl + Shift + N&lt;/b&gt; (Windows/Linux), &lt;b&gt;Command + Shift + O&lt;/b&gt; (macOS)&lt;br /&gt;열고 싶은 파일의 이름 일부만 알고 있다면, 이 단축키로 검색해 파일을 열 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;151&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bymU48/btsKSErDeNf/iLKX1jLRQpTCTT5xmme0K0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bymU48/btsKSErDeNf/iLKX1jLRQpTCTT5xmme0K0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bymU48/btsKSErDeNf/iLKX1jLRQpTCTT5xmme0K0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbymU48%2FbtsKSErDeNf%2FiLKX1jLRQpTCTT5xmme0K0%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;655&quot; height=&quot;151&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;151&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;③ 최근 파일 목록 보기&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Ctrl + E&lt;/b&gt; (Windows/Linux), &lt;b&gt;Command + E&lt;/b&gt; (macOS)&lt;br /&gt;최근 작업한 파일들을 순차적으로 보여주며, 선택하여 파일을 열 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;208&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdtRN3/btsKSC1Efb7/LN8MbvmZ6I8O3tNpWni8s0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdtRN3/btsKSC1Efb7/LN8MbvmZ6I8O3tNpWni8s0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdtRN3/btsKSC1Efb7/LN8MbvmZ6I8O3tNpWni8s0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdtRN3%2FbtsKSC1Efb7%2FLN8MbvmZ6I8O3tNpWni8s0%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;494&quot; height=&quot;208&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;208&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;④ 새로운 파일 혹은 디렉토리 생성&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Alt + Insert (Windows/Linux), Command + N (macOS)&lt;br /&gt;파일을 생성하려는 디렉토리에서 이 단축키를 누르면 아래 이미지와 같이 생성하려는 목록이 나온다. &lt;br /&gt;원하는 파일 타입을 선택한 뒤 파일 이름을 입력하면 파일이 생성된다.&lt;br /&gt;마찬가지로 경로를 선택하면 새로운 디렉토리를 생성할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;270&quot; data-origin-height=&quot;356&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bO3uEv/btsKUEDnh77/daH2DGdR4LyzZOG3FBO6tK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bO3uEv/btsKUEDnh77/daH2DGdR4LyzZOG3FBO6tK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bO3uEv/btsKUEDnh77/daH2DGdR4LyzZOG3FBO6tK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbO3uEv%2FbtsKUEDnh77%2FdaH2DGdR4LyzZOG3FBO6tK%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;270&quot; height=&quot;356&quot; data-origin-width=&quot;270&quot; data-origin-height=&quot;356&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 코드 편집&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;① 자동 완성&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt; Ctrl + Space &lt;/b&gt;(Windows/Linux), &lt;b&gt;Command + Space &lt;/b&gt;(macOS)&lt;br /&gt;코드 작성 시 자동으로 제안되는 완성 목록을 불러온다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;478&quot; data-origin-height=&quot;125&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZE8v3/btsKTAP1ckf/OY9k5ll6sJwaPSDuIbXz6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZE8v3/btsKTAP1ckf/OY9k5ll6sJwaPSDuIbXz6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZE8v3/btsKTAP1ckf/OY9k5ll6sJwaPSDuIbXz6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZE8v3%2FbtsKTAP1ckf%2FOY9k5ll6sJwaPSDuIbXz6k%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;478&quot; height=&quot;125&quot; data-origin-width=&quot;478&quot; data-origin-height=&quot;125&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;② 줄 복사&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt; Ctrl + D&lt;/b&gt; (Windows/Linux), &lt;b&gt;Command + D&lt;/b&gt; (macOS)&lt;br /&gt;현재 줄을 복사해서 바로 아래에 붙여넣는다. 반복적인 작업을 하는 경우 유용하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;176&quot; data-origin-height=&quot;38&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dGXjGR/btsKSRkweL5/OWCnKlvEJyQFI6ecCqnpNk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dGXjGR/btsKSRkweL5/OWCnKlvEJyQFI6ecCqnpNk/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dGXjGR/btsKSRkweL5/OWCnKlvEJyQFI6ecCqnpNk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/dGXjGR/btsKSRkweL5/OWCnKlvEJyQFI6ecCqnpNk/img.gif&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;176&quot; height=&quot;38&quot; data-origin-width=&quot;176&quot; data-origin-height=&quot;38&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;③ 줄 삭제&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt; Ctrl + Y&lt;/b&gt; (Windows/Linux), &lt;b&gt;Command + Delete&lt;/b&gt; (macOS)&lt;br /&gt;현재 줄을 빠르게 삭제 가능하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;174&quot; data-origin-height=&quot;52&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AiXPG/btsKT6noARg/RHkjxtknEk5SkA46AeDU71/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AiXPG/btsKT6noARg/RHkjxtknEk5SkA46AeDU71/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AiXPG/btsKT6noARg/RHkjxtknEk5SkA46AeDU71/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/AiXPG/btsKT6noARg/RHkjxtknEk5SkA46AeDU71/img.gif&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;174&quot; height=&quot;52&quot; data-origin-width=&quot;174&quot; data-origin-height=&quot;52&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;④ 줄 이동&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt; Alt + Shift + Up/Down&lt;/b&gt; (Windows/Linux), &lt;b&gt;Option + Shift + Up/Down&lt;/b&gt; (macOS) &lt;br /&gt;코드 줄을 위아래로 간단하게 이동 가능하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;518&quot; data-origin-height=&quot;50&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cz7rbg/btsKSIOOF9w/TN8pclbkixckQ4X47A0EK0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cz7rbg/btsKSIOOF9w/TN8pclbkixckQ4X47A0EK0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cz7rbg/btsKSIOOF9w/TN8pclbkixckQ4X47A0EK0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/cz7rbg/btsKSIOOF9w/TN8pclbkixckQ4X47A0EK0/img.gif&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;518&quot; height=&quot;50&quot; data-origin-width=&quot;518&quot; data-origin-height=&quot;50&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 코드 리팩토링&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;① 리팩토링(변수/함수 이름 변경 시)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt; Shift + F6&lt;/b&gt;&lt;br /&gt;변수명이나 함수명을 리팩토링할 때 사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;94&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lkMGF/btsKT9dep8N/JabSV7cLoe0xgCwo7WVpPk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lkMGF/btsKT9dep8N/JabSV7cLoe0xgCwo7WVpPk/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lkMGF/btsKT9dep8N/JabSV7cLoe0xgCwo7WVpPk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/lkMGF/btsKT9dep8N/JabSV7cLoe0xgCwo7WVpPk/img.gif&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;494&quot; height=&quot;94&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;94&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;② 자동 정렬&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt; Ctrl + Alt + L&lt;/b&gt; (Windows/Linux), &lt;b&gt;Command + Option + L&lt;/b&gt; (macOS)&lt;br /&gt;코드의 들여쓰기를 자동으로 정리하고 포맷팅을 맞춰준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nTLDh/btsKUfkkAtO/0OV1W9yq0FHRR7QZDbBHk1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nTLDh/btsKUfkkAtO/0OV1W9yq0FHRR7QZDbBHk1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nTLDh/btsKUfkkAtO/0OV1W9yq0FHRR7QZDbBHk1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/nTLDh/btsKUfkkAtO/0OV1W9yq0FHRR7QZDbBHk1/img.gif&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;778&quot; height=&quot;200&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Study/Ect</category>
      <category>Pycharm</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/192</guid>
      <comments>https://code-angie.tistory.com/192#entry192comment</comments>
      <pubDate>Fri, 22 Nov 2024 17:46:12 +0900</pubDate>
    </item>
    <item>
      <title>[백준 BOJ / Python] 1174번 줄어드는 수</title>
      <link>https://code-angie.tistory.com/191</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;문제&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;정수를 십진수로 표현할 때, 각 자리수가 왼쪽에서 오른쪽으로 감소하는 &lt;b&gt;줄어드는 수&lt;/b&gt; 중 n번째로 작은 줄어드는 수를 구하는 문제이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어 54321나 654는 줄어드는 수이며, 544나 324은 줄어드는 수가 아니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&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;BFS로 n번째 작은 수까지의 모든 경우의 수를 찾아 정답을 도출 할 수 있다.&lt;/li&gt;
&lt;li&gt;BFS를 사용하는 이유는 작은 수부터 순차적으로 줄어드는 수를 생성하므로, 추가적인 정렬 없이도 오름차순으로 n번째 줄어드는 수를 찾을 수 있기 때문이다.&lt;/li&gt;
&lt;li&gt;먼저 한 자리수 (0~9)를 큐에 넣는다.&lt;/li&gt;
&lt;li&gt;큐에서 줄어드는 수를 꺼내어 해당 숫자가 n번째 줄어드는 수라면 탐색을 멈추고 결과를 반환한다.&lt;/li&gt;
&lt;li&gt;아니라면, 1의 자리보다 작은 숫자를 뒤에 추가해 새로운 줄어드는 수를 생성한다.&lt;/li&gt;
&lt;li&gt;만약 n번째 줄어드는 수가 없다면 -1을 출력한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Python 코드&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1732125245675&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from collections import deque
import sys
input = sys.stdin.readline
n = int(input())

q = deque(list(range(10)))
idx = 0
while q:
    x = q.popleft()
    idx += 1
    if idx == n:
        print(x)
        break

    # 1의 자리수보다 작은 숫자만 뒤에 더함
    for nx in range(x % 10):
        q.append(x * 10 + nx)
else:
    print(-1)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;문제출처&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1174&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/1174&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Study/Coding Test</category>
      <category>1174</category>
      <category>python</category>
      <category>백준</category>
      <category>오블완</category>
      <category>줄어드는 수</category>
      <category>티스토리챌린지</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/191</guid>
      <comments>https://code-angie.tistory.com/191#entry191comment</comments>
      <pubDate>Thu, 21 Nov 2024 03:14:37 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스 / Python] 거스름돈</title>
      <link>https://code-angie.tistory.com/190</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;문제&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: start;&quot;&gt;주어진 금액을 만들기 위해 동전 종류에 따라 거스름돈을 주는 방법의 수를 구하는 문제이다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&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;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt;동적 프로그래밍(DP)을 사용해 풀 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt; &lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt;특정 금액 n을 만들기 위한 방법의 수를 누적해서 계산한다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt; &lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt;이때 작은 동전(금액)부터 시작해 큰 동전에 대해 가능한 경우의 수를 차례로 계산한다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt; &lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt;dp[0]은 항상 아무 동전도 쓰이지 않는 방법 한 가지만 존재함으로 dp[0]=1로 지정한다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt; &lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt;현재 금액 x를 만들기 위한 방법의 수는 x - coin을 만들 수 있는 방법의 수에 현재 동전 coin을 추가한 것이다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;622&quot; data-origin-height=&quot;74&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wl3tH/btsKRFh7tUo/c8ehy1a7kYIz1NcK4EiFZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wl3tH/btsKRFh7tUo/c8ehy1a7kYIz1NcK4EiFZ1/img.png&quot; data-alt=&quot;동전 1로 거슬러 주는 방&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wl3tH/btsKRFh7tUo/c8ehy1a7kYIz1NcK4EiFZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwl3tH%2FbtsKRFh7tUo%2Fc8ehy1a7kYIz1NcK4EiFZ1%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;622&quot; height=&quot;74&quot; data-origin-width=&quot;622&quot; data-origin-height=&quot;74&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;동전 1로 거슬러 주는 방&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;622&quot; data-origin-height=&quot;216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXWvoO/btsKPfr8OO4/7n9tftnyOzwn7FSGd7u8NK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXWvoO/btsKPfr8OO4/7n9tftnyOzwn7FSGd7u8NK/img.png&quot; data-alt=&quot;동전 1,2,5로 거슬러 주는 방법&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXWvoO/btsKPfr8OO4/7n9tftnyOzwn7FSGd7u8NK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXWvoO%2FbtsKPfr8OO4%2F7n9tftnyOzwn7FSGd7u8NK%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;622&quot; height=&quot;216&quot; data-origin-width=&quot;622&quot; data-origin-height=&quot;216&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;동전 1,2,5로 거슬러 주는 방법&lt;/figcaption&gt;
&lt;/figure&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;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt; &lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt;이를 토대로 점화식을 구성하면 dp[x] = dp[x] + dp[x-coin] 이 된다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt; &lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: left;&quot;&gt;마지막 정답을 도출할 때는 숫자가 매우 커질 것을 방지해 1000000007로 나눈 나머지를 반환한다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Python 코드&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1732108884033&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(n, money):
    dp = [0]*(n+1)
    dp[0] = 1

    for coin in money:
        for x in range(coin, n+1):
            dp[x] += dp[x-coin]
            dp[x] %= 1000000007

    return dp[-1]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;문제출처&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: start;&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12907&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/12907&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Study/Coding Test</category>
      <category>거스름돈</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/190</guid>
      <comments>https://code-angie.tistory.com/190#entry190comment</comments>
      <pubDate>Wed, 20 Nov 2024 22:22:00 +0900</pubDate>
    </item>
    <item>
      <title>[백준 BOJ / Python] 1103번 게임</title>
      <link>https://code-angie.tistory.com/189</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;문제&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;게임 보드 위의 숫자에 따라 동전을 이동시킬 때, 동전을 움직이는 횟수가 최대가 되도록 하는 문제이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;보드 위의 숫자는 1부터 9까지 있으며, 해당 칸에서 다음 칸으로 이동할 때 표기된 숫자만큼 한 번에 이동해야 한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;동전은 상하좌우로 이동할 수 있고, H(구멍) 칸이나 보드 바깥으로 이동되면 게임이 종료된다.&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&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;이 문제에서는 깊이 우선 탐색(DFS)과 메모이제이션, 백트래킹을 사용해 풀 수 있다.&lt;/li&gt;
&lt;li&gt;재귀적으로 DFS를 사용해서 동전이 이동할 수 있는 모든 경로를 탐색한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;메모이제이션&lt;/b&gt; &lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DFS 탐색을 하면서 특정 칸에 대한 경로 탐색이 끝나면, 그 칸에서 최대 이동 횟수를 계산한 상태이다.&lt;/li&gt;
&lt;li&gt;따라서 중복 탐색을 방지하기 위해, 계산된 값을 메모이제이션을 통해 저장한다.&lt;/li&gt;
&lt;li&gt;탐색 도중 이미 계산된 값( dp[x][y] )이 있다면, 즉시 그 값을 반환하면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt; &lt;b&gt;무한 루프 방지&lt;/b&gt;&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;탐색 중에 이미 방문한 칸을 다시 방문하게 되면 루프가 발생한 것이다.&lt;/li&gt;
&lt;li&gt;이 경우 -1을 출력하고 프로그램을 종료한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt; &lt;b&gt;DFS&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt; 탐색 과정&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다음 칸으로 이동하기 전, 현재 칸에 방문 표시를 한다.&lt;/li&gt;
&lt;li&gt;현재 칸에서 board[x][y]에 적힌 숫자만큼 상하좌우로 이동한다.&lt;/li&gt;
&lt;li&gt;이동한 위치가 보드를 벗어나거나 구멍('H')에 빠지면 그 경로는 더 이상 탐색하지 않는다.&lt;/li&gt;
&lt;li&gt;만약 이동할 수 있다면, 다음 칸으로 이동한 후 최대 이동 횟수를 계산하고, 그 값에 1을 더해 현재 칸의 최대 이동 횟수를 업데이트한다.&lt;/li&gt;
&lt;li&gt;백트래킹을 위해 탐색이 끝난 후에는 방문 표시를 해제하여, 다른 경로도 탐색할 수 있게 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Python 코드&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1731952318223&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline

n,m = map(int, input().split())
board = [list(input().strip()) for _ in range(n)]

dp = [[0]*m for _ in range(n)]
visited = [[0]*m for _ in range(n)]

def in_range(x,y):
    return 0&amp;lt;=x&amp;lt;n and 0&amp;lt;=y&amp;lt;m

def dfs(x,y):
    if dp[x][y]:      # 이미 계산된 칸이면 바로 반환
        return dp[x][y]

    if visited[x][y]: # 무한 루프 감지
        print(-1)
        exit()

    visited[x][y] = 1 # 현재 칸 방문 표시
    max_move = 1
    k = int(board[x][y]) # 이동해야 하는 거리
    for dx,dy in [(0, 1), (0, -1), (1, 0), (-1, 0)]:
        nx,ny = x+dx*k, y+dy*k
        if not in_range(nx,ny): # 보드 범위 밖
            continue
        if board[nx][ny] == &quot;H&quot;: # 구멍
            continue
        max_move = max(max_move, dfs(nx,ny)+1) # 이동 횟수 업데이트

    visited[x][y] = 0 # 백트래킹: 현재 칸 방문 해제
    dp[x][y] = max_move # 현재 칸까지의 최대 이동 횟수
    return dp[x][y]

print(dfs(0,0))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;문제출처&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1103&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/1103&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Study/Coding Test</category>
      <category>1103</category>
      <category>python</category>
      <category>게임</category>
      <category>백준</category>
      <category>백트래킹</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/189</guid>
      <comments>https://code-angie.tistory.com/189#entry189comment</comments>
      <pubDate>Tue, 19 Nov 2024 04:54:59 +0900</pubDate>
    </item>
    <item>
      <title>[Django] TDD 개발 과정</title>
      <link>https://code-angie.tistory.com/188</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;테스트 드리븐 개발(TDD)은 요구사항을 명확히 하고 안정적인 코드를 작성하는 개발 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제일 먼저 예상되는 동작에 대한 테스트 코드를 작성하고, 구체적으로 기능을 구현하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장고에서는 테스트 드리븐 개발(TDD)을 쉽게 할 수 있도록 지원하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적인 장고의 TDD 개발 과정에 대해 뷰 테스트를 예를 들어 설명하려 한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 테스트 계획 및 작성&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;요구사항을 정리하여 개발해야하는 기능을 계획한다.&lt;/li&gt;
&lt;li&gt;요구사항에 맞는 테스트 코드를 작성한다.
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;장고에서는 TestCase 클래스를 상속받아 사용자 정의 테스트 코드를 작성할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;아래 코드는 도서 데이터를 가져오는 API를 테스트하는 예제이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1731867981355&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# api/test.py
from django.test import TestCase
from rest_framework.test import APIClient
from rest_framework import status
from .models import Book

class BookViewTest(TestCase):
    def setUp(self):
        self.client = APIClient() # API 클라이언트를 불러오기
        book_data = {
            &quot;title&quot;: &quot;test_title&quot;,
            &quot;introduction&quot;: &quot;this is introduction&quot;,
            &quot;author&quot;: &quot;test_author&quot;,
        }
        self.book = Book.objects.create(**book_data) # 임의의 책 데이터 생성

    def test_get_book_list(self):
        response = self.client.get('/api/book/') # GET 요청으로 데이터 리스트 가져오기
        self.assertEqual(response.status_code, status.HTTP_200_OK) # 응답 코드가 200인지 확인&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 테스트 실행&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;테스트가 실패하는지 확인한다. TDD 원칙에 따라 처음에는 테스트가 실패하는 것이 정상이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1731868396984&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python manage.py test&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 기능 구현&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;테스트를 통과하기 위해 필요한 기능을 구현한다. 여기서는 Book모델에 대한 시리얼라이저와 뷰, URL을 작성한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1731868576240&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# api/serializers.py
from rest_framework import serializers
from .models import Book

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = [&quot;id&quot;,&quot;title&quot;,&quot;introduction&quot;,&quot;author&quot;]
        
        
# api/views.py
from rest_framework import viewsets
from .serializers import BookSerializer
from .models import Book

class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer


# api/urls.py
from django.urls import path
from rest_framework import routers
from .views import BookViewSet

router = routers.SimpleRouter()
router.register(&quot;book&quot;,BookViewSet)

urlpatterns = router.urls


# mybook/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('api.urls')),
]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 테스트 재실행&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;테스트를 다시 실행하여 잘 통과하는지 확인한다.&lt;/li&gt;
&lt;li&gt;기능 코드가 정상적으로 동작하면 테스트가 성공할 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1731869843865&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python manage.py test&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 리팩토링&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;코드의 중복을 제거하거나 더 나은 구조로 리팩터링 하는 과정을 거친다.&lt;/li&gt;
&lt;li&gt;리팩토링을 한 이후에도 테스트를 통과하는지 확인해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 반복&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다음 기능을 개발하기 위해 다시 테스트를 작성하는 것부터 과정을 반복한다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Django</category>
      <category>TDD</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/188</guid>
      <comments>https://code-angie.tistory.com/188#entry188comment</comments>
      <pubDate>Mon, 18 Nov 2024 03:59:17 +0900</pubDate>
    </item>
    <item>
      <title>[백준 BOJ / Python] 1113번 수영장 만들기</title>
      <link>https://code-angie.tistory.com/187</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: start;&quot;&gt;주어진 2차원 배열에서 각 칸에 고일 수 있는 물의 양을 계산하는 문제이다. 각 칸의 물 높이는 주변에 있는 벽(높이가 더 큰 칸들)에 의해 제한되며, 물은 낮은 칸을 채워 나가면서 주위 벽에 의해 막히는 곳에만 고일 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&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;/li&gt;
&lt;li&gt;먼저, 외곽에 있는 칸들을 힙에 추가하고 높이가 낮은 칸부터 탐색을 시작한다.&lt;/li&gt;
&lt;li&gt;탐색하면서 주변에 더 낮은 높이의 칸이 있다면, 현재 칸의 높이만큼 물을 채우고 채운 물의 양을 답에 더한다.&lt;/li&gt;
&lt;li&gt;물 높이와 상관없이 방문하지 않은 칸이라면 방문 처리 후, 현재 높이와 좌표를 힙에 추가하여 계속해서 주변을 탐색한다.&lt;/li&gt;
&lt;li&gt;이 과정을 통해 최종적으로 고일 수 있는 물의 양을 계산한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;Python 코드&lt;/h2&gt;
&lt;pre id=&quot;code_1731778551506&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import sys
input = sys.stdin.readline
import heapq

n, m = map(int,input().split())
pool = [list(map(int,list(input().strip()))) for _ in range(n)]
visited = [[0] * m for _ in range(n)]

def in_range(x,y):
    return 0&amp;lt;=x&amp;lt;n and 0&amp;lt;=y&amp;lt;m

def solution():
    min_heap = []
    answer = 0

    # 외곽만 먼저 추가
    for i in range(n):
        for j in range(m):
            if 1&amp;lt;=i&amp;lt;n-1 and 1&amp;lt;=j&amp;lt;m-1:
                continue
            heapq.heappush(min_heap, (pool[i][j],i,j))
            visited[i][j] = 1

    while min_heap:
        # 외곽의 낮은 칸부터 탐색
        h,x,y = heapq.heappop(min_heap)

        for dx,dy in [(0,1),(0,-1),(1,0),(-1,0)]:
            nx,ny = x+dx, y+dy

            if not in_range(nx,ny):
                continue
            if visited[nx][ny]:
                continue

            # 현재 칸보다 낮은 칸을 발견하면 물을 채움
            if h &amp;gt; pool[nx][ny]:
                answer += h-pool[nx][ny]
                pool[nx][ny] = h

            heapq.heappush(min_heap,(pool[nx][ny],nx,ny))
            visited[nx][ny] = 1

    print(answer)

solution()&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;문제출처&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: start;&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1113&quot;&gt;https://www.acmicpc.net/problem/1113&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Study/Coding Test</category>
      <category>1113</category>
      <category>python</category>
      <category>수영장만들기</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/187</guid>
      <comments>https://code-angie.tistory.com/187#entry187comment</comments>
      <pubDate>Sun, 17 Nov 2024 02:36:14 +0900</pubDate>
    </item>
    <item>
      <title>[백준 BOJ / Python] 22352번 항체 인식</title>
      <link>https://code-angie.tistory.com/185</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;문제&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;주어진 격자 데이터의 전후를 비교하여 주입된 백신이 &lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;CPCU-1202 백신인지 판단하는 문제이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;CPCU-1202 백신을 놓으면, 백신이 주입된 조직에서 항체를 생성하고 같은 영역의 조직에 항체가 퍼진다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;항체는 조직을 변형시켜 동일한 색상이거나 다른 색상이 될 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&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;전체 조직의 영역들 중 색상이 바뀐 영역이 1개이하여야 한다.&lt;/li&gt;
&lt;li&gt;따라서 조직을 탐색하면서 동일한 영역이 변경된 것인지를 판단하고, &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;색상이 변경된 영역의 개수를 세어야 한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;BFS나 DFS를 통해 동일한 색상으로 이루어진 인접 영역을 탐색하며 해당 영역이 일관된 색상으로 변경되었는지 확인한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;364&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d9WKyF/btsKMHmVfY1/Nfb66GOK3YkBynAuAayO31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d9WKyF/btsKMHmVfY1/Nfb66GOK3YkBynAuAayO31/img.png&quot; data-alt=&quot;항체 생성 영역이 다른 경우&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d9WKyF/btsKMHmVfY1/Nfb66GOK3YkBynAuAayO31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd9WKyF%2FbtsKMHmVfY1%2FNfb66GOK3YkBynAuAayO31%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;174&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;364&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;항체 생성 영역이 다른 경우&lt;/figcaption&gt;
&lt;/figure&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;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;CPCU-1202 백신이 아님으로 NO를 출력하고,&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;365&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/em9eXw/btsKK0VMkiW/rH9zW0kMKAm95dHTw5ld9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/em9eXw/btsKK0VMkiW/rH9zW0kMKAm95dHTw5ld9K/img.png&quot; data-alt=&quot;항체 생성 영역이 2개 이상인 경우&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/em9eXw/btsKK0VMkiW/rH9zW0kMKAm95dHTw5ld9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fem9eXw%2FbtsKK0VMkiW%2FrH9zW0kMKAm95dHTw5ld9K%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;173&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;365&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;항체 생성 영역이 2개 이상인 경우&lt;/figcaption&gt;
&lt;/figure&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;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;색상이 변경된 영역의 개수가 2개이상이어도 NO를 출력하며,&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;824&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Idxwg/btsKMPFaQWs/kt6NHejq7tIw5FvefHdyw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Idxwg/btsKMPFaQWs/kt6NHejq7tIw5FvefHdyw1/img.png&quot; data-alt=&quot;올바른 CPCU-1202 백신 반응인 경우&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Idxwg/btsKMPFaQWs/kt6NHejq7tIw5FvefHdyw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIdxwg%2FbtsKMPFaQWs%2Fkt6NHejq7tIw5FvefHdyw1%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;382&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;824&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;올바른 CPCU-1202 백신 반응인 경우&lt;/figcaption&gt;
&lt;/figure&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;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;그 외의 경우는 &lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;CPCU-1202 백신임으로 YES를 출력한다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Python 코드&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1731687890767&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
input = sys.stdin.readline

n,m = map(int,input().split())
arr1 = [list(map(int,input().split())) for _ in range(n)]
arr2 = [list(map(int,input().split())) for _ in range(n)]
visited = [[0]*m for _ in range(n)]

def in_range(x,y):
    return 0&amp;lt;=x&amp;lt;n and 0&amp;lt;=y&amp;lt;m

def check_area(i,j):
    origin_color = arr1[i][j]  # 기존 조직 색상
    changed_color = arr2[i][j]   # 변경된 조직 색상
    stack = [(i,j)]
    visited[i][j] = 1

    while stack:
        x, y = stack.pop()

        for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]:
            nx, ny = x+dx, y+dy

            if not in_range(nx,ny):
                continue
            if visited[nx][ny]:
                continue
            if arr1[nx][ny] == origin_color:
                if arr2[nx][ny] == changed_color:
                    visited[nx][ny] = 1
                    stack.append((nx,ny))
                else: 
                    # 같은 값으로 업데이트 되어야만 CPCU-1202 백신
                    print(&quot;NO&quot;) 
                    exit()
    return origin_color == changed_color

cnt = 0
for i in range(n):
    for j in range(m):
        if not visited[i][j]:
            if not check_area(i,j):
                cnt += 1 # 변경된 영역

# 단 1개의 영역만 변해야함
if cnt &amp;lt;= 1:
    print(&quot;YES&quot;)
else:
    print(&quot;NO&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;문제출처&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #374151; text-align: start;&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/22352&quot;&gt;https://www.acmicpc.net/problem/22352&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Study/Coding Test</category>
      <category>22352번</category>
      <category>python</category>
      <category>백준</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <category>항체인식</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/185</guid>
      <comments>https://code-angie.tistory.com/185#entry185comment</comments>
      <pubDate>Sat, 16 Nov 2024 01:36:41 +0900</pubDate>
    </item>
    <item>
      <title>[백준 BOJ / Python] 1743번 음식물 피하기</title>
      <link>https://code-angie.tistory.com/184</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;문제&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;통로에 음식물 쓰레기가 떨어져 있을 때, 인접한 쓰레기들끼리 하나의 덩어리로 보고 그중 가장 큰 덩어리의 크기를 구하는 문제이다. 인접한 음식물 쓰레기는 상하좌우로 붙어있는 경우를 말한다.&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&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;/li&gt;
&lt;li&gt;BFS나 DFS를 활용해 연결 여부를 탐색하며 덩어리의 크기를 계산하면 된다.&lt;/li&gt;
&lt;li&gt;먼저 음식물 쓰레기의 영역을 입력받는다.&lt;/li&gt;
&lt;li&gt;이때, 쓰레기가 없는 상태는 1, 쓰레기가 있는 상태는 0으로 표시한다. &lt;br /&gt;(visited를 사용하지 않고 쓰레기가 있는 곳의 방문 여부를 쉽게 체크할 수 있다.)&lt;/li&gt;
&lt;li&gt;인접 칸을 탐색했을 때, 다음칸으로 이동 가능하면 쓰레기 영역 크기를 늘리고 방문 표시를 해준다.&lt;/li&gt;
&lt;li&gt;max를 사용해 가장 큰 쓰레기 크기를 갱신한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Python 코드&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1731351708485&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
from collections import deque
input = sys.stdin.readline

n, m, k = map(int, input().split())
arr = [[1] * m for _ in range(n)]
for _ in range(k):
    x, y = map(int, input().split())
    arr[x - 1][y - 1] = 0  # 쓰레기가 있는 위치를 0으로 표시

def in_range(x, y):
    return 0 &amp;lt;= x &amp;lt; n and 0 &amp;lt;= y &amp;lt; m

# BFS를 이용해 연결된 쓰레기 덩어리의 크기를 구함
def count_area(i, j):
    cnt = 1
    q = deque([(i, j)])
    arr[i][j] = 1  # 방문 표시

    while q:
        x, y = q.popleft()

        # 상하좌우 탐색
        for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]:
            nx, ny = x + dx, y + dy

            if not in_range(nx, ny):  # 범위를 벗어나면 패스
                continue
            if arr[nx][ny]:  # 쓰레기가 없으면 패스
                continue

            cnt += 1 # 영역 크기 증가
            arr[nx][ny] = 1  # 방문 표시
            q.append((nx, ny))

    return cnt

# 최대 쓰레기 덩어리 크기 계산
max_ = 0
for i in range(n):
    for j in range(m):
        if not arr[i][j]:  # 쓰레기가 있는 경우
            max_ = max(count_area(i, j), max_)

print(max_)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;문제출처&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1743&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/1743&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Study/Coding Test</category>
      <category>1743</category>
      <category>python</category>
      <category>백준</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/184</guid>
      <comments>https://code-angie.tistory.com/184#entry184comment</comments>
      <pubDate>Tue, 12 Nov 2024 04:07:52 +0900</pubDate>
    </item>
    <item>
      <title>[Python / 알고리즘] Flood Fill 알고리즘</title>
      <link>https://code-angie.tistory.com/183</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Flood Fill 알고리즘&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Flood Fill 알고리즘은 다차원 배열에서 특정 영역을 탐색하고 색을 채우기 위해 사용되는 알고리즘이다.&lt;/li&gt;
&lt;li&gt;이 알고리즘은 주어진 시작점에서 인접한 같은 색의 영역을 탐색하며 색을 채운다.&lt;/li&gt;
&lt;li&gt;탐색 과정에서 DFS나 BFS를 사용하여 인접 영역을 방문한다.&lt;/li&gt;
&lt;li&gt;주로 픽셀 기반의 이미지 처리나 그래프 탐색 문제를 해결하는 데 활용된다.&lt;/li&gt;
&lt;li&gt;시간복잡도: 배열의 행 수가 n, 열 수가 m 일때, O(n * m)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Flood Fill 알고리즘 구현&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;먼저 시작 위치와 목표 색을 입력받고, 시작 위치의 기존 색을 확인한다.&lt;/li&gt;
&lt;li&gt;만약 시작 위치의 색과 목표 색이 동일하다면, 동작을 종료한다.&lt;/li&gt;
&lt;li&gt;시작 위치와 목표 색과 다르다면 목표 색으로 변경하고 상하좌우 인접한 영역을 탐색한다.&lt;/li&gt;
&lt;li&gt;인접 영역의 색이 기존 색과 동일할 때, 해당 위치로 이동하여 목표 색으로 변경하는 과정을 반복한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1731351448032&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def flood_fill(x, y, target_color):
    original_color = matrix[x][y]
    
    # 기존 색과 목표 색이 동일하면 종료
    if original_color == target_color:
        return

    # 시작 위치의 색을 목표 색으로 변경
    matrix[x][y] = target_color
    stack = [(x, y)]

    while stack:
        cur_x, cur_y = stack.pop()
        
        for dx, dy in [(0, 1), (0, -1), (1, 0), (-1, 0)]:
            nx, ny = cur_x + dx, cur_y + dy
            
            # 범위 내에 있고, 동일한 색상인지 확인
            if nx &amp;lt; 0 or nx &amp;gt;= n or ny &amp;lt; 0 or ny &amp;gt;= m:
                continue
            if matrix[nx][ny] != original_color:
                continue
            
            # 색상 변경
            matrix[nx][ny] = target_color
            
            # 상하좌우 인접 영역을 스택에 추가
            stack.append((nx, ny))

# 예제 행렬 및 크기 설정
matrix = [
    [1, 1, 1, 0],
    [1, 1, 0, 0],
    [1, 0, 1, 1],
    [0, 0, 1, 1]
]
n, m = 4, 4

flood_fill(0, 0, 2)  # (0, 0) 위치에서 시작해 색을 2로 변경

# 결과 출력
for row in matrix:
    print(row)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Study/Algorithm</category>
      <category>FloodFill</category>
      <category>python</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/183</guid>
      <comments>https://code-angie.tistory.com/183#entry183comment</comments>
      <pubDate>Sun, 10 Nov 2024 21:20:59 +0900</pubDate>
    </item>
    <item>
      <title>[Heroku] 헤로쿠 계정 생성 및 CLI 설치 with Windows</title>
      <link>https://code-angie.tistory.com/181</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. Heroku 계정 생성&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Heroku 웹사이트에 접속해 무료 계정을 생성한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1730028240517&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;Cloud Application Platform | Heroku&quot; data-og-description=&quot;Heroku is a platform as a service (PaaS) that enables developers to build, run, and operate applications entirely in the cloud.&quot; data-og-host=&quot;www.heroku.com&quot; data-og-source-url=&quot;https://www.heroku.com/&quot; data-og-url=&quot;https://www.heroku.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bqv7FQ/hyXptiAaIo/iwpANtjJqtrlfujOQMWLc1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.heroku.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.heroku.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bqv7FQ/hyXptiAaIo/iwpANtjJqtrlfujOQMWLc1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&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;Cloud Application Platform | Heroku&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Heroku is a platform as a service (PaaS) that enables developers to build, run, and operate applications entirely in the cloud.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.heroku.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;웹사이트에 들어가면 &quot;Sign Up&quot; 버튼을 클릭하여 계정 생성 페이지로 이동한다.&lt;/li&gt;
&lt;li&gt;아래 페이지에서 이름, 이메일, 역할, 국가, 주 언어를 입력하고 &quot;CREATE YOUR ACCOUNT&quot;를 클릭한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;873&quot; data-origin-height=&quot;585&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EFO2V/btsKl4pBiUj/g1EJ2fxrHEYqgA6Lfhb37K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EFO2V/btsKl4pBiUj/g1EJ2fxrHEYqgA6Lfhb37K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EFO2V/btsKl4pBiUj/g1EJ2fxrHEYqgA6Lfhb37K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEFO2V%2FbtsKl4pBiUj%2Fg1EJ2fxrHEYqgA6Lfhb37K%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;600&quot; height=&quot;402&quot; data-origin-width=&quot;873&quot; data-origin-height=&quot;585&quot;/&gt;&lt;/span&gt;&lt;/figure&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;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_blob&quot; data-origin-width=&quot;1296&quot; data-origin-height=&quot;924&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxlYW2/btsKkrl4K0G/NMl47Z0kjOZiP493t48qY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxlYW2/btsKkrl4K0G/NMl47Z0kjOZiP493t48qY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxlYW2/btsKkrl4K0G/NMl47Z0kjOZiP493t48qY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxlYW2%2FbtsKkrl4K0G%2FNMl47Z0kjOZiP493t48qY1%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;450&quot; height=&quot;321&quot; data-filename=&quot;edited_blob&quot; data-origin-width=&quot;1296&quot; data-origin-height=&quot;924&quot;/&gt;&lt;/span&gt;&lt;/figure&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;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;454&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/I8mKs/btsKl4QFkQ2/jXK2Kn9iTyuhorQOLOQOzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/I8mKs/btsKl4QFkQ2/jXK2Kn9iTyuhorQOLOQOzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/I8mKs/btsKl4QFkQ2/jXK2Kn9iTyuhorQOLOQOzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI8mKs%2FbtsKl4QFkQ2%2FjXK2Kn9iTyuhorQOLOQOzk%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;457&quot; height=&quot;454&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;454&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;확인 방법 중 원하는 방식을 선택하면 되고, 3번째 옵션인 보안 키는 QR 코드를 통해 스마트폰과 연동하여 등록할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dvxfr0/btsKlWL17MZ/uVPH3mcme7Z2QkQ3ZIts2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dvxfr0/btsKlWL17MZ/uVPH3mcme7Z2QkQ3ZIts2K/img.png&quot; data-origin-width=&quot;498&quot; data-origin-height=&quot;512&quot; data-is-animation=&quot;false&quot; data-filename=&quot;blob&quot; width=&quot;450&quot; height=&quot;463&quot; style=&quot;width: 29.5956%; margin-right: 10px;&quot; data-widthpercent=&quot;30.3&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dvxfr0/btsKlWL17MZ/uVPH3mcme7Z2QkQ3ZIts2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdvxfr0%2FbtsKlWL17MZ%2FuVPH3mcme7Z2QkQ3ZIts2K%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;498&quot; height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPauZt/btsKmuO1A9w/6f5mQbsHbBmwXFdkYsNvYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPauZt/btsKmuO1A9w/6f5mQbsHbBmwXFdkYsNvYK/img.png&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;436&quot; data-is-animation=&quot;false&quot; data-filename=&quot;blob&quot; width=&quot;450&quot; height=&quot;399&quot; style=&quot;width: 34.3358%; margin-right: 10px;&quot; data-widthpercent=&quot;35.15&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPauZt/btsKmuO1A9w/6f5mQbsHbBmwXFdkYsNvYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPauZt%2FbtsKmuO1A9w%2F6f5mQbsHbBmwXFdkYsNvYK%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;492&quot; height=&quot;436&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/R53CE/btsKkYYdVii/M8pI7KNSr2iNfu95vqIgCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/R53CE/btsKkYYdVii/M8pI7KNSr2iNfu95vqIgCK/img.png&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;413&quot; data-is-animation=&quot;false&quot; data-filename=&quot;blob&quot; style=&quot;width: 33.743%;&quot; data-widthpercent=&quot;34.55&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/R53CE/btsKkYYdVii/M8pI7KNSr2iNfu95vqIgCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR53CE%2FbtsKkYYdVii%2FM8pI7KNSr2iNfu95vqIgCK%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;458&quot; height=&quot;413&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&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;2. Heroku CLI 설치&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Heroku의 개발자 센터에서 Heroku CLI를 설치한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1730030199160&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;Getting Started on Heroku with Python | Heroku Dev Center&quot; data-og-description=&quot;Complete this tutorial to deploy a sample Python Django app to Heroku. Install the Heroku Command Line Interface (CLI). You can use the CLI to manage and scale your applications, provision add-ons, view your logs, and run your application locally. After in&quot; data-og-host=&quot;devcenter.heroku.com&quot; data-og-source-url=&quot;https://devcenter.heroku.com/articles/getting-started-with-python#set-up&quot; data-og-url=&quot;https://devcenter.heroku.com/articles/getting-started-with-python#set-up&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bCoFDq/hyXpC7EZlC/5UuXiiASBzDbofU1kk3Klk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/cjliRn/hyXlSEkPsb/V3jWQP1ObHGEJun5UgH9q0/img.png?width=767&amp;amp;height=205&amp;amp;face=0_0_767_205&quot;&gt;&lt;a href=&quot;https://devcenter.heroku.com/articles/getting-started-with-python#set-up&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://devcenter.heroku.com/articles/getting-started-with-python#set-up&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bCoFDq/hyXpC7EZlC/5UuXiiASBzDbofU1kk3Klk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/cjliRn/hyXlSEkPsb/V3jWQP1ObHGEJun5UgH9q0/img.png?width=767&amp;amp;height=205&amp;amp;face=0_0_767_205');&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;Getting Started on Heroku with Python | Heroku Dev Center&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Complete this tutorial to deploy a sample Python Django app to Heroku. Install the Heroku Command Line Interface (CLI). You can use the CLI to manage and scale your applications, provision add-ons, view your logs, and run your application locally. After in&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;devcenter.heroku.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사전에 Git이 우선적으로 설치되어 있어야 Heroku CLI 설치가 가능하다.&lt;/li&gt;
&lt;li&gt;Windows 11 사용자라면 Windows 64-bit Installer를 다운로드하여 설치한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;339&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkUkih/btsKmI7s5mB/VDb4GYjjqik4mZE7ONMAL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkUkih/btsKmI7s5mB/VDb4GYjjqik4mZE7ONMAL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkUkih/btsKmI7s5mB/VDb4GYjjqik4mZE7ONMAL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkUkih%2FbtsKmI7s5mB%2FVDb4GYjjqik4mZE7ONMAL0%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;747&quot; height=&quot;339&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;339&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WtkSV/btsKlwGZCnP/KkidvRWGFvUYTOlzwaoTHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WtkSV/btsKlwGZCnP/KkidvRWGFvUYTOlzwaoTHK/img.png&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;380&quot; data-filename=&quot;edited_스크린샷 2024-10-27 205826.png&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;50.08&quot; style=&quot;width: 49.4981%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WtkSV/btsKlwGZCnP/KkidvRWGFvUYTOlzwaoTHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWtkSV%2FbtsKlwGZCnP%2FKkidvRWGFvUYTOlzwaoTHK%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;492&quot; height=&quot;380&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dnjsUC/btsKkg6dPRz/24CvIU3c7I35O8itvgJwC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dnjsUC/btsKkg6dPRz/24CvIU3c7I35O8itvgJwC0/img.png&quot; data-origin-width=&quot;493&quot; data-origin-height=&quot;382&quot; data-filename=&quot;edited_스크린샷 2024-10-27 205834.png&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.3391%;&quot; data-widthpercent=&quot;49.92&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dnjsUC/btsKkg6dPRz/24CvIU3c7I35O8itvgJwC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdnjsUC%2FbtsKkg6dPRz%2F24CvIU3c7I35O8itvgJwC0%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;493&quot; height=&quot;382&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;설치가 완료되면 &quot;Close&quot; 버튼을 클릭한다.&lt;/li&gt;
&lt;li&gt;이후 PowerShell이나 CMD 창에서 Heroku 명령어를 사용할 수 있다.&lt;/li&gt;
&lt;li&gt;Heroku CLI에 로그인하려면 쉘에서 heroku login을 입력한다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1730033909866&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;heroku login&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아무 키나 누르면 로그인 웹 브라우저에 로그인 창이 열린다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;408&quot; data-origin-height=&quot;196&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0tkC7/btsKmiVzF3R/DJMrj36AdawWb2pj06Wt70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0tkC7/btsKmiVzF3R/DJMrj36AdawWb2pj06Wt70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0tkC7/btsKmiVzF3R/DJMrj36AdawWb2pj06Wt70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0tkC7%2FbtsKmiVzF3R%2FDJMrj36AdawWb2pj06Wt70%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;408&quot; height=&quot;196&quot; data-origin-width=&quot;408&quot; data-origin-height=&quot;196&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;웹에서 Heroku 아이디와 비밀번호로 로그인을 완료하면, 쉘에서 아래 이미지와 같이 &quot;Logging in ... done&quot;이라는 메시지와 함께 로그인한 아이디가 표시된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;134&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CocU6/btsKmmjhc7c/oJRdXtx8gjxCqXlealTKDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CocU6/btsKmmjhc7c/oJRdXtx8gjxCqXlealTKDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CocU6/btsKmmjhc7c/oJRdXtx8gjxCqXlealTKDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCocU6%2FbtsKmmjhc7c%2FoJRdXtx8gjxCqXlealTKDk%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;682&quot; height=&quot;134&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;134&quot;/&gt;&lt;/span&gt;&lt;/figure&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;/li&gt;
&lt;li&gt;만약 로그아웃을 원할 경우, heroku logout 명령어를 통해 직접 로그아웃을 해주어야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1730034021922&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;heroku logout&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Study/Ect</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/181</guid>
      <comments>https://code-angie.tistory.com/181#entry181comment</comments>
      <pubDate>Sun, 27 Oct 2024 21:10:15 +0900</pubDate>
    </item>
    <item>
      <title>[Docker] docker-compose down 시 데이터 손실 방지</title>
      <link>https://code-angie.tistory.com/180</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;docker-compose down 명령어는 실행중인 모든 컨테이너를 중지하고 삭제한다. 이러한 과정에서 데이터 손실이 발생할 수 있는데, 이를 방지하는 두 가지 방법을 소개하려고 한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. docker-compose stop 이용&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;docker-compose stop 명령어는 컨테이너를 일시정지하는 것과 같다.&lt;/li&gt;
&lt;li&gt;이 명령어는 컨테이너를 삭제하지 않고 중지 상태로 유지하므로 언제든지 다시 시작할 수 있다.&lt;/li&gt;
&lt;li&gt;또한 서비스를 정상적으로 종료하고 데이터를 저장하는 과정을 거치기에 데이터 손실이 발생하지 않는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. docker-compose.yml 파일에 볼륨 지정 설정&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;docker-compose.yml 파일에서 MySQL 데이터베이스나 기타 데이터를 저장할 서비스에 볼륨을 설정하면 데이터 손실을 막을 수 있다.&lt;/li&gt;
&lt;li&gt;아래와 같이 yml 파일을 수정하여 볼륨을 설정할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;  services:
    db:
      image: mysql:latest
      environment:
        MYSQL_ROOT_PASSWORD: example
      volumes:
        - db_data:/var/lib/mysql  # 볼륨 설정

  volumes:
    db_data:  # 외부에 저장될 볼륨 정의, 별도의 경로 설정 필요 없음&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;또는, 호스트 경로를 직접 지정하여 데이터 저장을 할 수도 있다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;  services:
    db:
      image: mysql:latest
      environment:
        MYSQL_ROOT_PASSWORD: example
      volumes:
            - /my/local/path/db_data:/var/lib/mysql  # 호스트 경로를 직접 지정&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단기적으로 데이터 보호가 필요하다면 docker-compose stop이 유리하고, 장기적으로 데이터를 안전하게 보존하려면 볼륨 설정이 더 효율적이다.&lt;/p&gt;</description>
      <category>Study/Docker</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/180</guid>
      <comments>https://code-angie.tistory.com/180#entry180comment</comments>
      <pubDate>Sun, 27 Oct 2024 03:46:09 +0900</pubDate>
    </item>
    <item>
      <title>[PS] 프로젝트를 종료하고 PowerShell에서 프로젝트 디렉토리 삭제하는 방법</title>
      <link>https://code-angie.tistory.com/179</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트 개발을 완료하고 더 이상 필요하지 않은 경우, 프로젝트를 종료하고 PowerShell을 통해 프로젝트를 삭제할 수 있다.&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. IDE 종료&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, 작업을 마친 후 IDE에서 프로젝트를 종료한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PyCharm인 경우 File &amp;gt; Close Project를 선택하여 종료한다.&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. PowerShell 실행&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Windows 검색창에 &quot;PowerShell&quot;을 입력하고, 관리자 권한으로 PowerShell을 실행한다.&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. 프로젝트 디렉토리로 이동&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삭제할 프로젝트가 위치한 디렉토리로 이동한다.&lt;/p&gt;
&lt;pre id=&quot;code_1729964584147&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd C:\Users\&amp;lt;YourUsername&amp;gt;\&amp;lt;ProjectsName&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 프로젝트 폴더 삭제&lt;/h4&gt;
&lt;pre id=&quot;code_1729964667194&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Remove-Item -Recurse -Force .\&amp;lt;ProjectName&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;-Recurse는 하위 디렉토리와 파일을 포함하여 삭제한다.&lt;/li&gt;
&lt;li&gt;-Force는 사용자의 확인 없이 삭제를 진행한다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Study/Ect</category>
      <category>powershell</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/179</guid>
      <comments>https://code-angie.tistory.com/179#entry179comment</comments>
      <pubDate>Sun, 27 Oct 2024 02:46:26 +0900</pubDate>
    </item>
    <item>
      <title>[Git] GitHub Repository에서 .gitignore에 포함된 파일 제거하기</title>
      <link>https://code-angie.tistory.com/178</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;개발을 하다 보면 .gitignore파일에 추가했지만 이미 Git에 푸시된 파일을 삭제해야 할 때가 있다.&lt;br /&gt;이럴 때 해당 파일(example.log)을 GitHub Repository에서 제거하는 방법은 다음과 같다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1. 파일 삭제&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;먼저, Git에서 example.log 파일을 삭제해야 한다.&lt;br /&gt;이때&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;--cached&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;옵션을 사용하면 워킹 디렉터리에서는 삭제되지 않고, Git의 스테이징 영역에서만 없어진다.&lt;/p&gt;
&lt;pre style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot;&gt;&lt;code&gt;git rm --cached example.log&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2. .gitignore 파일 업데이트&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이제 example.log 파일이 .gitignore에 포함되어 있는지 확인하고 없다면 추가한다.&lt;br /&gt;파일을 열어 직접 example.log를 추가하거나&lt;br /&gt;bash에서 echo &quot;example.log&quot; &amp;gt;&amp;gt; .gitignore를 사용할 수 있다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;3. 변경 사항 커밋&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;변경 사항을 커밋한다.&lt;/p&gt;
&lt;pre style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot;&gt;&lt;code&gt;git add .gitignore
git commit -m &quot;fix: example.log를 삭제하고 .gitignore 수정&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;4. GitHub Repository에 푸시&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;변경 사항을 Repository에 푸시한다.&lt;/p&gt;
&lt;pre style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot;&gt;&lt;code&gt;git push origin &amp;lt;브랜치명&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;5. GitHub에서 확인&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;GitHub에서 확인하면 더 이상 example.log 파일이 보이지 않아야 한다.&lt;/p&gt;</description>
      <category>Study/Ect</category>
      <category>GIT</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/178</guid>
      <comments>https://code-angie.tistory.com/178#entry178comment</comments>
      <pubDate>Sat, 26 Oct 2024 03:04:00 +0900</pubDate>
    </item>
    <item>
      <title>[Git] 브랜치와 커밋 메시지에서 사용하는 prefix</title>
      <link>https://code-angie.tistory.com/177</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;브랜치와 커밋 메시지에서 사용할 수 있는 다양한 prefix가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 prefix는 특정한 변경 유형을 나타내고, 팀이나 프로젝트에 따라 다를 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 많이 사용되는 prefix는 다음과 같다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. Branch prefix&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브랜치는 주로 작업의 유형을 나타내는 이름으로 구성된다.&lt;/p&gt;
&lt;table style=&quot;height: 325px;&quot; width=&quot;749&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;프리픽스&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;형식&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Feature&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;feature/&amp;lt;이름&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;새로운 기능 개발&lt;/td&gt;
&lt;td&gt;&lt;code&gt;feature/user-authentication&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Bugfix&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;bugfix/&amp;lt;이름&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;버그 수정&lt;/td&gt;
&lt;td&gt;&lt;code&gt;bugfix/fix-login-error&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Hotfix&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;hotfix/&amp;lt;이름&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;긴급 버그 수정&lt;/td&gt;
&lt;td&gt;&lt;code&gt;hotfix/urgent-security-fix&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Release&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;release/&amp;lt;버전&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;배포 준비 완료&lt;/td&gt;
&lt;td&gt;&lt;code&gt;release/v1.0.0&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Chore&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;chore/&amp;lt;이름&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;잡무나 유지보수 작업&lt;/td&gt;
&lt;td&gt;&lt;code&gt;chore/update-dependencies&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Docs&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docs/&amp;lt;이름&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;문서 관련 작업&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docs/update-readme&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Style&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;style/&amp;lt;이름&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;코드 스타일 변경&lt;/td&gt;
&lt;td&gt;&lt;code&gt;style/improve-code-formatting&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Refactor&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;refactor/&amp;lt;이름&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;코드 구조 개선&lt;/td&gt;
&lt;td&gt;&lt;code&gt;refactor/optimize-query-performance&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. Commit message prefix&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;커밋 메시지 제목은 변경 사항의 유형을 나타내는데 prefix가 사용된다.&lt;/p&gt;
&lt;table style=&quot;height: 325px; width: 745px;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px; width: 99px;&quot;&gt;&lt;b&gt;프리픽스&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 169px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 320px;&quot;&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 99px;&quot;&gt;&lt;b&gt;feat&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 18px; width: 169px;&quot;&gt;새로운 기능 추가&lt;/td&gt;
&lt;td style=&quot;height: 18px; width: 320px;&quot;&gt;&lt;code&gt;feat: 사용자 로그인 기능 추가&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 99px;&quot;&gt;&lt;b&gt;fix&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 18px; width: 169px;&quot;&gt;버그 수정&lt;/td&gt;
&lt;td style=&quot;height: 18px; width: 320px;&quot;&gt;&lt;code&gt;fix: 로그인 예외 처리 버그 수정&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 99px;&quot;&gt;&lt;b&gt;hotfix&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 18px; width: 169px;&quot;&gt;긴급 버그 수정&lt;/td&gt;
&lt;td style=&quot;height: 18px; width: 320px;&quot;&gt;&lt;code&gt;hotfix: 긴급 보안 패치&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 99px;&quot;&gt;&lt;b&gt;release&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 18px; width: 169px;&quot;&gt;배포 준비 완료&lt;/td&gt;
&lt;td style=&quot;height: 18px; width: 320px;&quot;&gt;&lt;code&gt;release: 버전 1.0.0 배포&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 99px;&quot;&gt;&lt;b&gt;chore&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 18px; width: 169px;&quot;&gt;잡무나 유지보수 작업&lt;/td&gt;
&lt;td style=&quot;height: 18px; width: 320px;&quot;&gt;&lt;code&gt;chore: 라이브러리 업데이트&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 99px;&quot;&gt;&lt;b&gt;docs&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 18px; width: 169px;&quot;&gt;문서 수정&lt;/td&gt;
&lt;td style=&quot;height: 18px; width: 320px;&quot;&gt;&lt;code&gt;docs: README 업데이트&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 99px;&quot;&gt;&lt;b&gt;style&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 18px; width: 169px;&quot;&gt;코드 스타일 수정&lt;/td&gt;
&lt;td style=&quot;height: 18px; width: 320px;&quot;&gt;&lt;code&gt;style: 코드 포맷팅 수정&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 99px;&quot;&gt;&lt;b&gt;refactor&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 18px; width: 169px;&quot;&gt;코드 구조 개선&lt;/td&gt;
&lt;td style=&quot;height: 18px; width: 320px;&quot;&gt;&lt;code&gt;refactor: 쿼리 최적화&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Study/Ect</category>
      <category>branch</category>
      <category>commit message</category>
      <category>prefix</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/177</guid>
      <comments>https://code-angie.tistory.com/177#entry177comment</comments>
      <pubDate>Sat, 26 Oct 2024 02:42:32 +0900</pubDate>
    </item>
    <item>
      <title>[Git] 브랜치로 프로젝트 관리하기</title>
      <link>https://code-angie.tistory.com/176</link>
      <description>&lt;h2&gt;브랜치(branch)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Git에서 브랜치는 프로젝트 관리를 체계적으로 돕는 핵심 기능이다.&lt;/li&gt;
&lt;li&gt;브랜치는 독립된 작업 공간을 제공하여 새로운 기능 개발, 버그 수정 등 여러 작업을 동시에 진행할 수 있게 한다. &lt;/li&gt;
&lt;li&gt;다시 말해, 브랜치를 사용하면 기본(main) 코드에 영향을 주지 않고 개발하거나 테스트할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;기본 브랜치 관리 Workflow&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;브랜치 생성&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;main 브랜치에서 새로운 기능 또는 작업을 시작하려면, 새 브랜치를 생성하여 독립적으로 작업한다.&lt;/li&gt;
&lt;li&gt;새로운 기능을 추가할 때는 feature/기능이름 형식으로 브랜치를 생성한다.&lt;pre&gt;&lt;code&gt;git checkout -b feature/기능이름&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;작업 후 커밋(Commit)&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;작업 후 변경 사항을 저장할 때 커밋한다.&lt;pre&gt;&lt;code&gt;git add .
git commit -m &amp;quot;#1: 새 기능 추가&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;브랜치 병합(Merge)&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;브랜치에서 작업이 완료되면 main 브랜치로 병합한다.&lt;/li&gt;
&lt;li&gt;먼저 main으로 이동하고 병합할 브랜치를 지정한다.&lt;pre&gt;&lt;code&gt;git checkout main
git merge feature/새기능&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;브랜치 삭제&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;병합이 완료되면 필요없는 브랜치를 삭제해 정리할 수 있다.&lt;pre&gt;&lt;code&gt;git branch -d feature/기능이름&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Study/Ect</category>
      <category>branch</category>
      <category>GIT</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/176</guid>
      <comments>https://code-angie.tistory.com/176#entry176comment</comments>
      <pubDate>Sat, 26 Oct 2024 00:22:53 +0900</pubDate>
    </item>
    <item>
      <title>[Docker] 실행 중인 컨테이너에 패키지 설치하기</title>
      <link>https://code-angie.tistory.com/175</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Docker 컨테이너가 실행 중일 때 패키지를 추가 설치하려고 한다면 다음과 같이 진행하면 된다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1. docker exec 명령어로 컨테이너 접근&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;bash 쉘에 접근한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1729854282352&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# 백그라운드에서 실행
docker-compose up -d  

# app 컨테이너 쉘에 접근
docker-compose exec app bash&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(참고) &lt;a href=&quot;https://code-angie.tistory.com/174&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Docker] 실행 중인 컨테이너 쉘(shell / 콘솔)에 접근하기&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2. 패키지 설치&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컨테이너 쉘에 접근 후, 필요한 패키지를 설치한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1729854550054&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install &amp;lt;package_name&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;350&quot; data-origin-height=&quot;23&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buZ2cN/btsKlj8eXwN/KkpO5KNR7wFJfDoWIp7KXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buZ2cN/btsKlj8eXwN/KkpO5KNR7wFJfDoWIp7KXk/img.png&quot; data-alt=&quot;패키지 설치 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buZ2cN/btsKlj8eXwN/KkpO5KNR7wFJfDoWIp7KXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuZ2cN%2FbtsKlj8eXwN%2FKkpO5KNR7wFJfDoWIp7KXk%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;23&quot; data-origin-width=&quot;350&quot; data-origin-height=&quot;23&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;h3 data-ke-size=&quot;size23&quot;&gt;3. &lt;b&gt;작업 완료 후&lt;/b&gt; 변경 사항 유지하기&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컨테이너에 직접 패키지를 설치하면 해당 컨테이너가 종료될 때 변경 사항이 사라진다.&lt;/li&gt;
&lt;li&gt;만약 영구적으로 유지하려면 두 가지 방법이 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) Dockerfile을 사용한 이미지 업데이트&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;가장 좋은 방법으로 Dockerfile을 업데이트하여 필요 패키지를 명시적으로 추가하는 방법이다.&lt;/li&gt;
&lt;li&gt;컨테이너 쉘에서 현재 환경의 패키지 목록을 requirements.txt에 반영한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1729856983111&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip freeze &amp;gt; requirements.txt&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;만약 Dockerfile에 requirements.txt 설치 명령어가 없다면 추가한다. (필요 시)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1729857196405&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;RUN pip install --no-cache-dir -r requirements.txt&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;이미지를 재빌드하고 컨테이너를 실행한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1729857213417&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker-compose up --build&lt;/code&gt;&lt;/pre&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) docker commit을 이용한 새로운 이미지 저장&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;docker commit 명령어를 통해 현재 컨테이너 상태를 이미지로 저장하는 방법이다.&lt;/li&gt;
&lt;li&gt;exit을 통해 쉘을 종료하고 컨테이너를 커밋한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1729857387952&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker commit [OPTIONS] &amp;lt;container_id&amp;gt; &amp;lt;repository:tag&amp;gt;

# 예시
docker commit -m &quot;Updated image with new packages&quot; -a &quot;yourname&quot; &amp;lt;container_id&amp;gt; myapp:latest&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;이후 새로운 컨테이너를 실행한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1729858904403&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run myapp:latest&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;혹은 docker-compose.yaml 파일이 아래와 같이 되어 있다면, 재빌드하고 컨테이너를 실행한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1729859008027&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# docker-compose.yaml 일부
services:
  app:
    image: myapp:latest  # 커밋한 이미지를 사용&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1729859040485&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker-compose up --build&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(추가) Docker Hub 에 이미지 푸시&lt;/p&gt;
&lt;pre id=&quot;code_1729864772060&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker tag myapp:latest &amp;lt;your_dockerhub_username&amp;gt;/myapp:latest
docker push &amp;lt;your_dockerhub_username&amp;gt;/myapp:latest&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Study/Docker</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/175</guid>
      <comments>https://code-angie.tistory.com/175#entry175comment</comments>
      <pubDate>Fri, 25 Oct 2024 23:03:33 +0900</pubDate>
    </item>
    <item>
      <title>[Docker] 실행 중인 컨테이너 쉘(shell / 콘솔)에 접근하기</title>
      <link>https://code-angie.tistory.com/174</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Docker 컨테이너가 실행 중일 때 패키지를 추가 설치하거나 디버깅 등 컨테이너에서 직접 작업을 해야할 때가 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이럴 때는 컨테이너의 쉘에 직접 접근하여 명령하는 방법을 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;1. 실행 중인 Docker 컨테이너 확인&lt;/span&gt;&lt;/h3&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: #333333;&quot;&gt;먼저 Docker에서 실행 중인 컨테이너 목록을 통해 접근하고 싶은 컨테이너 ID를 확인한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;아래 명령어는 현재 실행 중인 모든 컨테이너의 정보를 볼 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1729852723456&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker ps&lt;/code&gt;&lt;/pre&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: #333333;&quot;&gt;-a 옵션을 달면 정지된 컨테이너를 포함한 모든 컨테이너를 확인할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;85&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dqGM6I/btsKkn4nDOF/QxeoauEHhHTyKzjErvnqTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dqGM6I/btsKkn4nDOF/QxeoauEHhHTyKzjErvnqTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dqGM6I/btsKkn4nDOF/QxeoauEHhHTyKzjErvnqTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdqGM6I%2FbtsKkn4nDOF%2FQxeoauEHhHTyKzjErvnqTk%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;1169&quot; height=&quot;85&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;85&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2. docker exec 명령어로 컨테이너 접근&lt;/span&gt;&lt;/h3&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: #333333;&quot;&gt;docker exec 명령어를 통해 실행 중인 컨테이너의 쉘에 직접 접근할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이 명령어를 사용하면 새 프로세스를 시작하여 컨테이너 내부에서 명령어를 실행한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;기본 명령어 형식&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1729853106422&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker exec -it &amp;lt;container_id_or_name&amp;gt; &amp;lt;shell&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;-i: 상호작용(interactive) 모드를 활성화하여 입력을 받을 수 있게 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;-t: 가상 터미널을 활성화합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;container_id_or_name&amp;gt;: 접근하고자 하는 컨테이너의 ID 또는 이름을 입력합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;shell&amp;gt;: 실행할 쉘 유형을 지정합니다. 일반적으로 /bin/bash나 /bin/sh가 사용됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;1) bash 쉘 접근&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: #333333;&quot;&gt;컨테이너가 bash를 지원하는 경우 사용 가능하다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1729853295180&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker exec -it &amp;lt;container_id_or_name&amp;gt; /bin/bash&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2) sh 쉘 접근&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: #333333;&quot;&gt;sh만 지원하는 경우는 다음과 같이 사용 가능하다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1729853374509&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker exec -it &amp;lt;container_id_or_name&amp;gt; /bin/sh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Qb9BH/btsKjuXMxmy/tRAwIGgCJCZJj115Z9mqg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Qb9BH/btsKjuXMxmy/tRAwIGgCJCZJj115Z9mqg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Qb9BH/btsKjuXMxmy/tRAwIGgCJCZJj115Z9mqg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQb9BH%2FbtsKjuXMxmy%2FtRAwIGgCJCZJj115Z9mqg1%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;680&quot; height=&quot;150&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;150&quot;/&gt;&lt;/span&gt;&lt;/figure&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: #333333;&quot;&gt;컨테이너 내부에 진입하면 일반적인 리눅스 쉘과 같은 환경에서 명령어를 사용할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt; 여기서 필요한 파일을 수정하거나, 로그를 확인하거나, 환경 설정을 변경할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3) docker-compose exec 명령어로 bash 접근&lt;/h4&gt;
&lt;pre id=&quot;code_1729858481921&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker-compose exec &amp;lt;yaml 파일 내 서비스 이름&amp;gt; bash

# app 컨테이너에 접근
docker-compose exec app bash
docker-compose exec app sh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;3. 컨테이너 쉘 종료&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;작업을 완료했다면, exit 명령어로 쉘을 종료하고 빠져나올 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1729853940174&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;exit&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;244&quot; data-origin-height=&quot;51&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/35fkg/btsKla4xy4c/oi1KFNpnkj4kkEVEJksj30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/35fkg/btsKla4xy4c/oi1KFNpnkj4kkEVEJksj30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/35fkg/btsKla4xy4c/oi1KFNpnkj4kkEVEJksj30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F35fkg%2FbtsKla4xy4c%2Foi1KFNpnkj4kkEVEJksj30%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;244&quot; height=&quot;51&quot; data-origin-width=&quot;244&quot; data-origin-height=&quot;51&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Study/Docker</category>
      <category>docker</category>
      <category>exec</category>
      <category>Shell</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/174</guid>
      <comments>https://code-angie.tistory.com/174#entry174comment</comments>
      <pubDate>Fri, 25 Oct 2024 20:04:11 +0900</pubDate>
    </item>
    <item>
      <title>[Docker] Docker Compose 서비스 종료 및 리소스 삭제(down)</title>
      <link>https://code-angie.tistory.com/173</link>
      <description>&lt;h2&gt;1. 실행 중인 Docker Compose 서비스 종료&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;터미널을 새롭게 열었다면 프로젝트 디렉토리로 이동한다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd /path/to/your/project&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Docker Compose 서비스를 종료한다.  &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker-compose down&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;- 이 명령어는 모든 컨테이너를 종료하고, 네트워크와 볼륨을 삭제한다.&lt;br&gt;- 하지만 기본적인 소스 코드나 데이터는 삭제되지 않고 유지된다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;Docker Desktop을 종료한다.&lt;br&gt;- 시스템 트레이에서 Docker 아이콘을 우클릭하고, &amp;quot;Quit Docker Desktop&amp;quot;을 선택하여 Docker Desktop을 종료한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;2. 실행 중인 컨테이너 상태 확인 (선택 사항)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;서비스 종료 후에도 컨테이너가 남아 있는지 확인하려면 아래 명령어를 실행할 수 있다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;종료된 모든 컨테이너를 포함해 현재 상태의 컨테이너 목록을 보여준다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker ps -a&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;3. 모든 관련 리소스 삭제&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;모든 관련 리소스(이미지, 볼륨, 네트워크)를 삭제하려면 --rmi, --volumes, --remove-orphans 옵션을 추가하여 사용할 수 있다.&lt;pre&gt;&lt;code&gt;docker-compose down --rmi all --volumes --remove-orphans&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;--rmi all: 서비스와 연결된 모든 이미지 삭제&lt;/li&gt;
&lt;li&gt;--volumes: 서비스와 연결된 모든 볼륨 삭제&lt;/li&gt;
&lt;li&gt;--remove-orphans: 현재 Compose 파일에 정의되지 않은 다른 컨테이너 삭제&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;4. 특정 서비스의 컨테이너 삭제&lt;/h2&gt;
&lt;p&gt;- 이미지를 삭제하려면 아래의 명령어를 사용한다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker-compose rm &amp;lt;service_name&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;5. 모든 중지된 컨테이너 삭제&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;docker container prune&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;6. 사용하지 않는 이미지와 볼륨 삭제&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;# 사용되지 않는 모든 이미지 삭제
docker image prune -a 
# 사용되지 않는 모든 볼륨 삭제
docker volume prune&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Study/Docker</category>
      <category>docker-compose</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/173</guid>
      <comments>https://code-angie.tistory.com/173#entry173comment</comments>
      <pubDate>Fri, 25 Oct 2024 18:46:19 +0900</pubDate>
    </item>
    <item>
      <title>Docker 실행하면서 마주한 에러 모음</title>
      <link>https://code-angie.tistory.com/172</link>
      <description>&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;level=warning msg=&quot;\\docker-compose.yaml: the attribute 'version' is obsolete, it will be ignored, please remove it to avoid potential confusion&quot;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;에러 사항까지는 아니지만 docker-compose.yaml 파일에서 더 이상 version을 사용하지 않아 지워도 된다는 것이다. 도커 컴포즈 버전을 뜻하는 version: &quot;3.8&quot;을 지우고 작성해도 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;level=warning msg=&quot;Found orphan containers ([djangoproject-app-run-1545af8640b djangoproject-app-run-e5d180e421]) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실수로 장고 프로젝트가 실행되게 하는 명령어를 지우고 동작이 안되는 이유를 몰라서&amp;nbsp;&lt;br /&gt;app-1 exited with code 0 을 계속 마주했었다.&lt;/li&gt;
&lt;li&gt;app-1 exited with code 0 는 종료 코드이며 성공적으로 실행되어 오류 없이 종료된 것을 의미한다.&lt;/li&gt;
&lt;li&gt;하지만 이 코드를 이해 못하고 계속 docker-compose run을 재실행하다 보니 여러 개의 컨테이너가 생겼다.&lt;/li&gt;
&lt;li&gt;이때 발생한 경고 메시지이며 docker-compose run을 하지 않고, docker-compose up --remove-orphans 명령어를 통해 간단히 정리하거나 직접 지워 해결할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;CommandError: /app/manage.py already exists. Overlaying a project into an existing directory won't replace conflicting files.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위의 에러와 연결되어 마주한 에러이며, 이전에 실행했던 컨테이너를 종료하고 다시 실행할 때 발생한 에러이다.&lt;/li&gt;
&lt;li&gt;충돌되는 파일을 삭제 후 다시 명령어를 실행하거나
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;rm&amp;nbsp;-rf&amp;nbsp;app/&amp;nbsp;&amp;nbsp;#&amp;nbsp;기존&amp;nbsp;프로젝트&amp;nbsp;폴더를&amp;nbsp;삭제&lt;/li&gt;
&lt;li&gt;docker-compose&amp;nbsp;run&amp;nbsp;--rm&amp;nbsp;app&amp;nbsp;django-admin&amp;nbsp;startproject&amp;nbsp;app&amp;nbsp;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;바로 생성된 프로젝트를 사용하기만 하면 된다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;docker-compose&amp;nbsp;up&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2,3번 에러는 결국 컨테이너 종료 이유를 발견 못하고, 프로젝트가 생성되었는데 계속 생성하려 해서 발생한 에러이다. 그리고 생성과 사용의 차이를 이해하지 못했어서 발생한 문제였다.&lt;/li&gt;
&lt;li&gt;Error&amp;nbsp;response&amp;nbsp;from&amp;nbsp;daemon:&amp;nbsp;invalid&amp;nbsp;volume&amp;nbsp;specification:&amp;nbsp;'/run/desktop/mnt/host/c/Users/Angie/PycharmProje &lt;br /&gt;cts/pystagram:app:rw':&amp;nbsp;invalid&amp;nbsp;mount&amp;nbsp;config&amp;nbsp;for&amp;nbsp;type&amp;nbsp;&quot;bind&quot;:&amp;nbsp;invalid&amp;nbsp;mount&amp;nbsp;path:&amp;nbsp;'app'&amp;nbsp;mount&amp;nbsp;path&amp;nbsp;must&amp;nbsp;be&amp;nbsp;absolute &lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;docker-compose run --rm django-service django-admin&amp;nbsp;&amp;nbsp;startproject config . 명령어 실행 시 위와 같은 에러가 발생했다.&lt;/li&gt;
&lt;li&gt;확인해 보니 docker-compose.yml에서 volumes: 에서 경로를 .:app이라고 작성했기 때문에 에러가 발생한 것이다.&lt;/li&gt;
&lt;li&gt;build 할 때는 문제가 없지만 실행할 때 경로를 제대로 찾지 못하는 문제가 발생한 것이다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;docker-compose.yml의 volumes경로는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;.:/app &lt;/span&gt;와 같이 슬래시를 추가해주어야 한다.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[frontend internal] load build context&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CACHED&amp;nbsp;[frontend&amp;nbsp;2/5]&amp;nbsp;WORKDIR&amp;nbsp;/app&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0.0s&amp;nbsp; &lt;br /&gt;------ &lt;br /&gt;&amp;nbsp;&amp;gt;&amp;nbsp;[frontend&amp;nbsp;internal]&amp;nbsp;load&amp;nbsp;build&amp;nbsp;context: &lt;br /&gt;------ &lt;br /&gt;failed to solve: archive/tar: unknown file mode ?rwxr-xr-x&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/78523506/docker-error-failed-to-solve-archive-tar-unknown-file-mode-rwxr-xr-x&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://stackoverflow.com/questions/78523506/docker-error-failed-to-solve-archive-tar-unknown-file-mode-rwxr-xr-x&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;node_modules 디렉토리와 package-lock.json를 삭제하고 다시 시도하면 된다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;node_modules 디렉토리 안에는 copy가 되지 않는 파일들이 포함되어 있어 옮기는 과정에서 에러가 발생한 것이다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 두 가지는 이후에 npm install와&lt;span style=&quot;background-color: #ffffff; color: #0c0d0e; text-align: left;&quot;&gt;&amp;nbsp;&lt;/span&gt;npm run build 명령어를 통해 재생성 가능하고, permissions 문제도 해결될 것이다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>Study/Docker</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/172</guid>
      <comments>https://code-angie.tistory.com/172#entry172comment</comments>
      <pubDate>Fri, 25 Oct 2024 03:33:11 +0900</pubDate>
    </item>
    <item>
      <title>[Docker] Docker Compose로 Django 프로젝트 환경 구성</title>
      <link>https://code-angie.tistory.com/171</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Docker를 이용해 동일한 환경에서 Django 프로젝트를 실습하고자 하는 경우, Docker Compose를 사용하면 쉽게 개발, 테스트, 배포 환경을 구성할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;PyCharm을 이용해 Django 프로젝트를 Docker Compose로 설정하는 방법을 단계별로 살펴보자.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;1. Docker Desktop 설치&lt;/span&gt;&lt;/h3&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: #333333;&quot;&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://www.docker.com/products/docker-desktop/&quot;&gt;Docker Desktop&lt;/a&gt;을 설치한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Windows 설치 방법은 이전 글인 &lt;a style=&quot;color: #333333;&quot; href=&quot;https://code-angie.tistory.com/169&quot;&gt;[Docker] 도커 데스크탑 설치 (Docker Desktop in Windows)&lt;/a&gt;를 참고할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2. 프로젝트 생성&lt;/span&gt;&lt;/h3&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: #333333;&quot;&gt;먼저 도커에서 실행할 &lt;b&gt;Django 프로젝트&lt;/b&gt; 디렉토리가 필요하다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;빈 디렉토리거나 기존에 작업 중인 프로젝트여도 상관없다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;여기서는 djangoProject라는 빈 디렉토리를 사용하려고 한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;203&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eg7YI3/btsKinRkZjE/PKPG9XBYFcoX6jYFI4VPC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eg7YI3/btsKinRkZjE/PKPG9XBYFcoX6jYFI4VPC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eg7YI3/btsKinRkZjE/PKPG9XBYFcoX6jYFI4VPC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Feg7YI3%2FbtsKinRkZjE%2FPKPG9XBYFcoX6jYFI4VPC0%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;655&quot; height=&quot;203&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;203&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2. Docker Compose를 실행하기 위한 파일 생성&lt;/span&gt;&lt;/h3&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: #333333;&quot;&gt;requirements.txt&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Dockerfile&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;docker-compose.yaml&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;716&quot; data-origin-height=&quot;179&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lXuC0/btsKimLG4lW/UhKZX149K2uSSUL8l4Ek1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lXuC0/btsKimLG4lW/UhKZX149K2uSSUL8l4Ek1K/img.png&quot; data-alt=&quot;파일 생성 완료 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lXuC0/btsKimLG4lW/UhKZX149K2uSSUL8l4Ek1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlXuC0%2FbtsKimLG4lW%2FUhKZX149K2uSSUL8l4Ek1K%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;716&quot; height=&quot;179&quot; data-origin-width=&quot;716&quot; data-origin-height=&quot;179&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;파일 생성 완료 모습&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;1) requirements.txt&lt;/b&gt;&lt;/span&gt;&lt;/h4&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: #333333;&quot;&gt;requirements.txt 파일에 프로젝트에 필요한 패키지를 명시한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Django 프로젝트를 구성할 때는 기본적으로 &lt;b&gt;Django&lt;/b&gt; 패키지를 추가한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;Django&amp;gt;=4.0,&amp;lt;5.0&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;2) Dockerfile&lt;/b&gt;&lt;/span&gt;&lt;/h4&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: #333333;&quot;&gt;Dockerfile은 Docker 컨테이너 이미지가 빌드(build)될 때 거치는 단계들을 정의한 파일이다. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이 파일을 통해 Django 프로젝트 환경을 설정할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# 1. python 3.11 버전을 사용한 기본 이미지
FROM python:3.11

# 2. 환경 변수 설정: Python 출력 버퍼링을 비활성화
ENV PYTHONUNBUFFERED 1

# 3. 작업 디렉토리 설정
WORKDIR /app

# 4. 의존성 파일을 복사하고 설치
COPY requirements.txt .
RUN pip install --upgrade pip &amp;amp;&amp;amp; \
    pip install -r requirements.txt

# 현재 디렉토리의 모든 프로젝트 파일을 이미지 내의 작업 디렉토리로 복사
COPY . .

# 8000번 포트 개방
EXPOSE 8000&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모든 프로젝트 파일을 복사하기 전, 의존성 파일을 개별적으로 복사하고 설치하는 이유는 의존성이 변경되지 않는 한 이 단계까지의 캐시를 활용하여 더 빠르게 빌드할 수 있기 때문이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;3) docker-compose.yaml&lt;/b&gt;&lt;/span&gt;&lt;/h4&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: #333333;&quot;&gt;docker-compose.yaml 파일을 통해 여러 서비스를 하나의 파일로 정의할 수 있다. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;여기서는 Django 애플리케이션과 MySQL 데이터베이스를 구성한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;services:
  # Django 애플리케이션 서비스의 이름
  app:
    # 현재 디렉토리에 있는 Dockerfile을 기반으로 이미지 빌드 즉, 빌드할 Dockerfile이 있는 위치를 알려줌
    build: .
    # 컨테이너가 시작될 때 실행할 명령어를 설정
    command: &amp;gt;
      sh -c &quot;python manage.py runserver 0.0.0.0:8000&quot; 
    # 로컬 디렉토리를 컨테이너 내의 /app 디렉토리로 마운트
    volumes:
      - .:/app
    # 호스트의 8000번 포트를 컨테이너의 8000번 포트와 연결
    ports:
      - &quot;8000:8000&quot;
    # 아래에 정의된 db 서비스가 시작된 후 이 서비스를 시작
    depends_on:
      - db

  # MySQL 서비스의 이름
  db:
    # MySQL 8.0 이미지를 사용해 컨테이너 생성
    image: mysql:8.0
    # 컨테이너가 종료되면 자동으로 재시작하도록 설정
    restart: always
    # 데이터베이스 환경 변수 설정
    environment:
      MYSQL_ROOT_PASSWORD: rootpw
      MYSQL_DATABASE: mydb
      MYSQL_USER: myuser
      MYSQL_PASSWORD: mypw
    # 포트 연결
    ports:
      - &quot;3306:3306&quot;&lt;/code&gt;&lt;/pre&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: #333333;&quot;&gt;Note:&amp;nbsp;Django는 기본적으로 SQLite를 사용한다. 하지만 이 예시에는&amp;nbsp;&lt;b&gt;MySQL&lt;/b&gt;을 사용해 데이터베이스를 설정했으며, 이처럼 별도의 데이터베이스가 필요한 경우 db 서비스 구성을 조정하여 다른 데이터베이스 시스템도 사용할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;종료시 데이터 손실을 방지하려면 db 서비스에 volumes를 설정해주어야 한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1729866532864&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;services:
  db:
    ...
    volumes:
      - db_data:/var/lib/mysql  # MySQL 데이터가 저장될 볼륨 설정

volumes:
  db_data:  # MySQL 데이터를 저장할 외부 볼륨&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;3. 이미지 빌드&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Docker Compose 파일에 정의된 서비스 이미지를 빌드한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1729792863282&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker-compose build&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. Django 프로젝트 생성&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Docker Compose를 사용해 컨테이너를 실행하고 Django 프로젝트를 생성한다.&lt;/li&gt;
&lt;li&gt;아래 명령어의 결과로&amp;nbsp;app 폴더 안에 Django 프로젝트 디렉토리(app, manage.py, db.sqlite3)를 생성한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1729792989673&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker-compose run --rm &amp;lt;서비스명&amp;gt; django-admin startproject &amp;lt;프로젝트 폴더명&amp;gt; &amp;lt;프로젝트 생성위치&amp;gt;
docker-compose run --rm app django-admin startproject config .&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위 명령어는 docker-compose.yml 파일에 정의된 app 서비스의 새로운 컨테이너를 생성하고,&lt;/li&gt;
&lt;li&gt;현재 디렉터리(.)에 config라는 폴더를 생성하여 Django 프로젝트의 기본 파일 구조를 설정한 뒤,&lt;/li&gt;
&lt;li&gt;작업이 완료된 후 컨테이너를 자동으로 제거하겠다는 의미이다.&lt;/li&gt;
&lt;li&gt;--rm 옵션은 명령어 실행이 완료되었을 때, 컨테이너를 자동으로 삭제하는 옵션이다.&lt;br /&gt;불필요한 컨테이너가 시스템에 남지 않기에 클린한 환경을 유지할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;241&quot; data-origin-height=&quot;248&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wTEFM/btsKinjthWS/6yFAqPqkiknZJBgVF2xxZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wTEFM/btsKinjthWS/6yFAqPqkiknZJBgVF2xxZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wTEFM/btsKinjthWS/6yFAqPqkiknZJBgVF2xxZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwTEFM%2FbtsKinjthWS%2F6yFAqPqkiknZJBgVF2xxZk%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;241&quot; height=&quot;248&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;241&quot; data-origin-height=&quot;248&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;5. Docker 컨테이너 실행 및 Django 확인&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Django 프로젝트를 Docker 컨테이너로 실행한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1729793155433&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker-compose up&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;-d 옵션을 통해 백그라운드 실행을 할 수 있다.&lt;/li&gt;
&lt;li&gt;--remove-orphans 옵션을 사용해 더이상 사용되지 않는 컨테이너를 정리할 수 있다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;511&quot; data-origin-height=&quot;66&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kAofz/btsKiUt7FXD/8DSCkxwpn6ppKZIsoDsiHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kAofz/btsKiUt7FXD/8DSCkxwpn6ppKZIsoDsiHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kAofz/btsKiUt7FXD/8DSCkxwpn6ppKZIsoDsiHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkAofz%2FbtsKiUt7FXD%2F8DSCkxwpn6ppKZIsoDsiHK%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;511&quot; height=&quot;66&quot; data-origin-width=&quot;511&quot; data-origin-height=&quot;66&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;6. 브라우저에서 Django 확인&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;브라우저에서 &lt;a href=&quot;http://localhost:8000&quot;&gt;&lt;span&gt;http&lt;/span&gt;&lt;span&gt;://localhost&lt;/span&gt;&lt;span&gt;:8000&lt;/span&gt;&lt;/a&gt;으로 접속하면 Django 프로젝트가 실행 중인 것을 확인할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2Ums7/btsKibDzg6O/90G2rwvrka4ga4ck5cTMZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2Ums7/btsKibDzg6O/90G2rwvrka4ga4ck5cTMZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2Ums7/btsKibDzg6O/90G2rwvrka4ga4ck5cTMZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2Ums7%2FbtsKibDzg6O%2F90G2rwvrka4ga4ck5cTMZ1%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;860&quot; height=&quot;512&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Study/Docker</category>
      <category>Django</category>
      <category>docker</category>
      <category>docker desktop</category>
      <category>docker-compose</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/171</guid>
      <comments>https://code-angie.tistory.com/171#entry171comment</comments>
      <pubDate>Fri, 25 Oct 2024 03:09:44 +0900</pubDate>
    </item>
    <item>
      <title>[Docker] PyCharm에 Docker 플러그인 설치</title>
      <link>https://code-angie.tistory.com/170</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;PyCharm에서 Docker 플러그인을 설치하는 과정은 다음과 같이 매우 간단하다.&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. &lt;b&gt;설정 창 열기&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;먼저 PyCharm의 설정 창을 연다.&lt;/li&gt;
&lt;li&gt;메뉴에서 파일(File) &amp;gt; 설정(Settings)로 이동하면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. &lt;b&gt;Docker 플러그인 검색 및 설치&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;설정 창에서 플러그인(Plugins) 항목을 선택한 후, 검색창에 &quot;Docker&quot;를 입력한다.&lt;/li&gt;
&lt;li&gt;상단에 표시되는 Docker 플러그인을 선택한 뒤, 설치 버튼을 선택한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;723&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0YFHp/btsKhJ8lzUP/Fj1Dj3BVx90hkC4AKGoXNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0YFHp/btsKhJ8lzUP/Fj1Dj3BVx90hkC4AKGoXNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0YFHp/btsKhJ8lzUP/Fj1Dj3BVx90hkC4AKGoXNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0YFHp%2FbtsKhJ8lzUP%2FFj1Dj3BVx90hkC4AKGoXNK%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;973&quot; height=&quot;723&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;723&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. &lt;b&gt;설치 완료 후 적용&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;플러그인 설치가 완료되면 하단의 적용(Apply) 버튼을 눌러 변경 사항을 저장한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. &lt;b&gt;Docker 탭 확인&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;적용이 완료되면, 아래 이미지와 같이 빌드(Build), 실행(Run), 배포(Deployment) 하위에 Docker 옵션이 추가된 것을 확인할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;411&quot; data-origin-height=&quot;548&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUJaon/btsKjsjwhgb/smkYB7h7EKDT41Kp5xYa2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUJaon/btsKjsjwhgb/smkYB7h7EKDT41Kp5xYa2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUJaon/btsKjsjwhgb/smkYB7h7EKDT41Kp5xYa2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUJaon%2FbtsKjsjwhgb%2FsmkYB7h7EKDT41Kp5xYa2k%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;411&quot; height=&quot;548&quot; data-origin-width=&quot;411&quot; data-origin-height=&quot;548&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Study/Docker</category>
      <category>docker</category>
      <category>plugin</category>
      <category>Pycharm</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/170</guid>
      <comments>https://code-angie.tistory.com/170#entry170comment</comments>
      <pubDate>Thu, 24 Oct 2024 06:36:02 +0900</pubDate>
    </item>
    <item>
      <title>[Docker] 도커 데스크탑 설치 (Docker Desktop in Windows)</title>
      <link>https://code-angie.tistory.com/169</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt; Docker Desktop을 Windows에서 설치하기 위해서는 몇 가지 시스템 요구사항을 확인하고, WSL2(Windows Subsystem for Linux 2)를 활성화해야 한다. 순서대로 Docker Desktop을 설치해보자.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;1. 시스템 요구사항 확인&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;1) 운영체제 확인&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Windows 10 64-bit 이상인지 확인한다. (Pro, Enterprise, Education)&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Docker Desktop은 Hyper-V 기능을 사용하기 때문에 해당 기능을 지원하는 버전인지 확인이 필요하다.&lt;br /&gt;만약 Hyper-V 사용 가능 환경이라면 &lt;u&gt;바로 Docker Desktop을 설치&lt;/u&gt;할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt; &lt;b&gt;확인 방법&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;윈도우 검색창에 &quot;PC 이름 보기&quot;를 검색하여 운영체제 버전과 시스템 정보를 확인한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2) WSL2 활성화&lt;b&gt;&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&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: #333333;&quot;&gt; Home 버전에서 Docker를 사용하려면 WSL 2가 필수로 필요하다. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;WSL 2는 윈도우에서 리눅스를 사용할 수 있도록 도와주는 기능이다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&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: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;① 관리자 권한으로 PowerShell 실행한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;② 아래 명령어를 입력하여 WSL 2와 Virtual Machine Platform 기능을 활성화한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1729714696393&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;③ 컴퓨터를 재부팅한다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3) 리눅스 환경 설치&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;WSL2를 활성화 되었음으로 이제 윈도우 위에 리눅스를 설치할 수 있게 되었다.&lt;/li&gt;
&lt;li&gt;다음 명령어를 통해 설치 가능한 배포판 목록을 확인한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1729715699397&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;wsl.exe --list --online&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;470&quot; data-origin-height=&quot;228&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFHNoY/btsKgcbFUwQ/2D0mUXhbKEuLOfD9jf5nt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFHNoY/btsKgcbFUwQ/2D0mUXhbKEuLOfD9jf5nt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFHNoY/btsKgcbFUwQ/2D0mUXhbKEuLOfD9jf5nt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFHNoY%2FbtsKgcbFUwQ%2F2D0mUXhbKEuLOfD9jf5nt1%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;470&quot; height=&quot;228&quot; data-origin-width=&quot;470&quot; data-origin-height=&quot;228&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;배포판 목록 중 선택해 설치한다. 여기서는 Ubuntu-22.04를 설치했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1729715892278&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// Ubuntu 설치
wsl.exe --install Ubuntu-22.04

// Ubuntu 자동 실행
// UNIX username 입력
// New password 입력
// password 한번 더 입력
// exit 명령어로 빠져 나오기&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;설치가 완료되면 Ubuntu가 자동으로 실해되고, 사용자 이름과 비밀번호를 설정하는 과정이 진행된다.&lt;/li&gt;
&lt;li&gt;설정을 완료한 후 exit 명령어로 리눅스 서버에서 빠져 나온다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4) WSL 에 설치된 배포판과 버전 정보 확인&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아래 명령어로 WSL 및 설치된 리눅스 배포판의 버전 정보를 확인할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1729716282503&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// WSL 정보 확인
wsl -v
// 설치된 배포판과 버전 확인
wsl -l -v&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. Docker Desktop on Windows 설치&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: #333333;&quot;&gt;이제 Docker Desktop를 설치하는 단계이다.&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;① Docker Desktop 설치 페이지로 이동해 설치 파일을 다운로드 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;https://docs.docker.com/desktop/install/windows-install/&quot;&gt;https://docs.docker.com/desktop/install/windows-install/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1729781142904&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;Windows&quot; data-og-description=&quot;Get started with Docker for Windows. This guide covers system requirements, where to download, and instructions on how to install and update.&quot; data-og-host=&quot;docs.docker.com&quot; data-og-source-url=&quot;https://docs.docker.com/desktop/install/windows-install/&quot; data-og-url=&quot;https://docs.docker.com/desktop/install/windows-install/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b1VsJm/hyXprkkvMP/oeRHI2ZukyuTskXCczvlik/img.jpg?width=2400&amp;amp;height=1260&amp;amp;face=0_0_2400_1260&quot;&gt;&lt;a href=&quot;https://docs.docker.com/desktop/install/windows-install/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.docker.com/desktop/install/windows-install/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b1VsJm/hyXprkkvMP/oeRHI2ZukyuTskXCczvlik/img.jpg?width=2400&amp;amp;height=1260&amp;amp;face=0_0_2400_1260');&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;Windows&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Get started with Docker for Windows. This guide covers system requirements, where to download, and instructions on how to install and update.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.docker.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;931&quot; data-origin-height=&quot;803&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdjW2d/btsKh8z0m6H/tRz2NVF028YAzYGky3Z3t1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdjW2d/btsKh8z0m6H/tRz2NVF028YAzYGky3Z3t1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdjW2d/btsKh8z0m6H/tRz2NVF028YAzYGky3Z3t1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdjW2d%2FbtsKh8z0m6H%2FtRz2NVF028YAzYGky3Z3t1%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;931&quot; height=&quot;803&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;931&quot; data-origin-height=&quot;803&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;② 설치 파일을 실행하고, 설치가 완료되면 &lt;b&gt;&quot;Close and Restart&quot;&lt;/b&gt; 버튼을 눌러 컴퓨터를 재부팅한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;③ 재부팅 후 처음 Docker Desktop을 실행하면 &lt;b&gt;Docker Subscription Service Agreement&lt;/b&gt; 창이 나타난다. &lt;b&gt;&quot;Accept&quot;&lt;/b&gt; 버튼을 클릭한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;④ Docker에 로그인한 후, 짧은 설문을 완료하면 설치가 완료된다.&lt;/p&gt;</description>
      <category>Study/Docker</category>
      <category>docker desktop</category>
      <category>Windows</category>
      <author>코딩하는 앤지</author>
      <guid isPermaLink="true">https://code-angie.tistory.com/169</guid>
      <comments>https://code-angie.tistory.com/169#entry169comment</comments>
      <pubDate>Thu, 24 Oct 2024 04:56:31 +0900</pubDate>
    </item>
  </channel>
</rss>