<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>발자취</title>
    <link>https://haelyn.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Tue, 23 Jun 2026 06:26:31 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>해린</managingEditor>
    <image>
      <title>발자취</title>
      <url>https://tistory1.daumcdn.net/tistory/4657986/attach/3c2d292e2cef4e0283e76b296cf13d9f</url>
      <link>https://haelyn.tistory.com</link>
    </image>
    <item>
      <title>[github] 로컬 &amp;rarr; 원격 저장소(git)로 업로드하기 - Add, Commit, Push, Pull Request</title>
      <link>https://haelyn.tistory.com/278</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1731421318268&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[github] Fork, Branch 생성, 로컬 저장소 연결&quot; data-og-description=&quot;1. Fork 하기Fork란?깃허브에 업로드되어 있는 오픈 소스를 복사해오는 것&amp;nbsp;fork하고자하는 오픈소스 프로젝트의 우측 상단에 있는 Fork 버튼을 누른다.회색으로 가려진 부분은 프로젝트명이다.&amp;nbsp;레&quot; data-og-host=&quot;haelyn.tistory.com&quot; data-og-source-url=&quot;https://haelyn.tistory.com/277&quot; data-og-url=&quot;https://haelyn.tistory.com/277&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/oRW2j/hyXwrTpVvl/oaYvKqXkKgPE1nPg4Qwm60/img.png?width=800&amp;amp;height=35&amp;amp;face=0_0_800_35,https://scrap.kakaocdn.net/dn/idt8F/hyXwtDJbQn/KC9O24ltt80krsiA3dLyOk/img.png?width=800&amp;amp;height=35&amp;amp;face=0_0_800_35,https://scrap.kakaocdn.net/dn/eKdXk/hyXwjHUw2c/eh43U6nQlevGGXLIA1WpN0/img.png?width=2512&amp;amp;height=942&amp;amp;face=0_0_2512_942&quot;&gt;&lt;a href=&quot;https://haelyn.tistory.com/277&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://haelyn.tistory.com/277&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/oRW2j/hyXwrTpVvl/oaYvKqXkKgPE1nPg4Qwm60/img.png?width=800&amp;amp;height=35&amp;amp;face=0_0_800_35,https://scrap.kakaocdn.net/dn/idt8F/hyXwtDJbQn/KC9O24ltt80krsiA3dLyOk/img.png?width=800&amp;amp;height=35&amp;amp;face=0_0_800_35,https://scrap.kakaocdn.net/dn/eKdXk/hyXwjHUw2c/eh43U6nQlevGGXLIA1WpN0/img.png?width=2512&amp;amp;height=942&amp;amp;face=0_0_2512_942');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[github] Fork, Branch 생성, 로컬 저장소 연결&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. Fork 하기Fork란?깃허브에 업로드되어 있는 오픈 소스를 복사해오는 것&amp;nbsp;fork하고자하는 오픈소스 프로젝트의 우측 상단에 있는 Fork 버튼을 누른다.회색으로 가려진 부분은 프로젝트명이다.&amp;nbsp;레&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;haelyn.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 게시글에서 이어지는 글입니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. add, commit, push&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1.1 add&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로컬 저장소와 연결한 코드를 무사히 수정했다면 add, commit, push 세 과정을 거쳐야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;add란?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;staging Area&lt;span style=&quot;background-color: #ffffff; color: #5c5c5c; text-align: left;&quot;&gt;로 옮기는 행위.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;stagin Area&lt;span style=&quot;background-color: #ffffff; color: #5c5c5c; text-align: left;&quot;&gt;는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;commit&lt;span style=&quot;background-color: #ffffff; color: #5c5c5c; text-align: left;&quot;&gt;을 하기 전, 임시 저장된 상태이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1731421830188&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git add .&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;옮길 폴더에서 cmd를 열어 위 명령어를 입력하면 add가 되고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1731421858528&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git status&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;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;add 명령어를 통해 staging area에 옮겨진 파일들을 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1260&quot; data-origin-height=&quot;468&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JvmIb/btsKHqyLLt5/LjWAMkwavB42NowyS9ow80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JvmIb/btsKHqyLLt5/LjWAMkwavB42NowyS9ow80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JvmIb/btsKHqyLLt5/LjWAMkwavB42NowyS9ow80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJvmIb%2FbtsKHqyLLt5%2FLjWAMkwavB42NowyS9ow80%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;1260&quot; height=&quot;468&quot; data-origin-width=&quot;1260&quot; data-origin-height=&quot;468&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;1.2 commit&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;commit이란?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;staging area에 있는 변경 사항들을 로컬 저장소에 확정 저장하는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1731422319459&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git commit -m &quot;commit 메시지&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;위 명령어를 통해 commit을 진행할 수 있다.&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;1.3 push&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;push란?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;commit된 변경 사항들을 원격 저장소에 올리는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1731423555462&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git push origin 브랜치명&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;위와 같이 입력하면 commit된 내용을 원격 저장소에 반영한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약,&lt;/p&gt;
&lt;pre id=&quot;code_1731423606318&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git branch&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;명령어를 입력했을 때, push하는 브랜치명이 존재하지 않는다면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1731423654689&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git checkout 브랜치명&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;961&quot; data-origin-height=&quot;258&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boqvk5/btsKGHuorr3/K0JsNR41o4ToV28YvaVtKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boqvk5/btsKGHuorr3/K0JsNR41o4ToV28YvaVtKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boqvk5/btsKGHuorr3/K0JsNR41o4ToV28YvaVtKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fboqvk5%2FbtsKGHuorr3%2FK0JsNR41o4ToV28YvaVtKK%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;961&quot; height=&quot;258&quot; data-origin-width=&quot;961&quot; data-origin-height=&quot;258&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1336&quot; data-origin-height=&quot;420&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mb4ww/btsKF7mQARv/ZZoy3JOSKkIu2VwJc5dwqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mb4ww/btsKF7mQARv/ZZoy3JOSKkIu2VwJc5dwqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mb4ww/btsKF7mQARv/ZZoy3JOSKkIu2VwJc5dwqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmb4ww%2FbtsKF7mQARv%2FZZoy3JOSKkIu2VwJc5dwqk%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;1336&quot; height=&quot;420&quot; data-origin-width=&quot;1336&quot; data-origin-height=&quot;420&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;push한 branch를 실제로 확인해보면 commit 메시지와 push한 시간이 기록된 것을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. Pull Request (PR)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Pull Request란?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 사람의 저장소에 변경 사항을 반영하기 위해 변경 사항을 검토하고 병합할 수 있도록 요청하는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1357&quot; data-origin-height=&quot;126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b948xo/btsKGBadqrM/QJ47TqQjbG7MXOB7G8k5Jk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b948xo/btsKGBadqrM/QJ47TqQjbG7MXOB7G8k5Jk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b948xo/btsKGBadqrM/QJ47TqQjbG7MXOB7G8k5Jk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb948xo%2FbtsKGBadqrM%2FQJ47TqQjbG7MXOB7G8k5Jk%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;1357&quot; height=&quot;126&quot; data-origin-width=&quot;1357&quot; data-origin-height=&quot;126&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;push를 마친 뒤 나의 깃허브 페이지를 보면 상단에 위와 같이 'Compare &amp;amp; pull request' 버튼이 생겨있다.&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;1354&quot; data-origin-height=&quot;781&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eHlGMd/btsKGI1ei9P/gWpHGNahQpTkku514MllV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eHlGMd/btsKGI1ei9P/gWpHGNahQpTkku514MllV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eHlGMd/btsKGI1ei9P/gWpHGNahQpTkku514MllV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeHlGMd%2FbtsKGI1ei9P%2FgWpHGNahQpTkku514MllV0%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;1354&quot; height=&quot;781&quot; data-origin-width=&quot;1354&quot; data-origin-height=&quot;781&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내용을 입력한 뒤, 'Create pull request' 버튼을 누르면 PR이 된다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 뒤에 원본 저장소 관리자가 변경 사항을 확인하고 Merge하면 완전히 병합되는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고한 게시글&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1731424393089&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;git 초보를 위한 풀리퀘스트(pull request) 방법 &amp;middot; 초보몽키의 개발공부로그&quot; data-og-description=&quot;개발을 하다 보면 코드를 여러 개로 복사해야 하는 일이 자주 생긴다. 코드를 통째로 복사하고 나서 원래 코드와는 상관없이 독립적으로 개발을 진행할 수 있는데, 이렇게 독립적으로 개발하는 &quot; data-og-host=&quot;wayhome25.github.io&quot; data-og-source-url=&quot;https://wayhome25.github.io/git/2017/07/08/git-first-pull-request-story/&quot; data-og-url=&quot;https://wayhome25.github.io/git/2017/07/08/git-first-pull-request-story/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/wHkmn/hyXwgqQztN/kck4I4XSKdpIymHq85Skqk/img.png?width=2008&amp;amp;height=901&amp;amp;face=0_0_2008_901,https://scrap.kakaocdn.net/dn/tHfvs/hyXwkUlcBK/q60Q5SDpq6M3rYiGb2bTl1/img.png?width=2006&amp;amp;height=718&amp;amp;face=0_0_2006_718,https://scrap.kakaocdn.net/dn/UA834/hyXwnjdyJ6/GRSTFuwU8KbXSxzH5WoTt1/img.png?width=2016&amp;amp;height=656&amp;amp;face=0_0_2016_656&quot;&gt;&lt;a href=&quot;https://wayhome25.github.io/git/2017/07/08/git-first-pull-request-story/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://wayhome25.github.io/git/2017/07/08/git-first-pull-request-story/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/wHkmn/hyXwgqQztN/kck4I4XSKdpIymHq85Skqk/img.png?width=2008&amp;amp;height=901&amp;amp;face=0_0_2008_901,https://scrap.kakaocdn.net/dn/tHfvs/hyXwkUlcBK/q60Q5SDpq6M3rYiGb2bTl1/img.png?width=2006&amp;amp;height=718&amp;amp;face=0_0_2006_718,https://scrap.kakaocdn.net/dn/UA834/hyXwnjdyJ6/GRSTFuwU8KbXSxzH5WoTt1/img.png?width=2016&amp;amp;height=656&amp;amp;face=0_0_2016_656');&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;git 초보를 위한 풀리퀘스트(pull request) 방법 &amp;middot; 초보몽키의 개발공부로그&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;개발을 하다 보면 코드를 여러 개로 복사해야 하는 일이 자주 생긴다. 코드를 통째로 복사하고 나서 원래 코드와는 상관없이 독립적으로 개발을 진행할 수 있는데, 이렇게 독립적으로 개발하는&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;wayhome25.github.io&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;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;002&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/002.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/002.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;읽어주셔서 감사합니다&lt;/p&gt;</description>
      <category>이런저런 꿀팁/github</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>해린</author>
      <guid isPermaLink="true">https://haelyn.tistory.com/278</guid>
      <comments>https://haelyn.tistory.com/278#entry278comment</comments>
      <pubDate>Tue, 12 Nov 2024 23:52:09 +0900</pubDate>
    </item>
    <item>
      <title>[github] 원격 저장소(git) &amp;rarr; 로컬 - Fork, Branch 생성, 로컬 저장소 연결</title>
      <link>https://haelyn.tistory.com/277</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. Fork 하기&lt;/b&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;Fork란?&lt;/b&gt;&lt;br /&gt;깃허브에 업로드되어 있는 오픈 소스를 복사해오는 것&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1843&quot; data-origin-height=&quot;82&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0VWo4/btsKD0ABj72/zrcvmSUt2kbkkGNu3AJiMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0VWo4/btsKD0ABj72/zrcvmSUt2kbkkGNu3AJiMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0VWo4/btsKD0ABj72/zrcvmSUt2kbkkGNu3AJiMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0VWo4%2FbtsKD0ABj72%2FzrcvmSUt2kbkkGNu3AJiMk%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;1843&quot; height=&quot;82&quot; data-origin-width=&quot;1843&quot; data-origin-height=&quot;82&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;fork하고자하는 오픈소스 프로젝트의 우측 상단에 있는 Fork 버튼을 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회색으로 가려진 부분은 프로젝트명이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2512&quot; data-origin-height=&quot;942&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGS3bj/btsKDqUbVMt/XxX1W1d11Cq8NJAjmuOBN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGS3bj/btsKDqUbVMt/XxX1W1d11Cq8NJAjmuOBN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGS3bj/btsKDqUbVMt/XxX1W1d11Cq8NJAjmuOBN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGS3bj%2FbtsKDqUbVMt%2FXxX1W1d11Cq8NJAjmuOBN1%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;2512&quot; height=&quot;942&quot; data-origin-width=&quot;2512&quot; data-origin-height=&quot;942&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레포지토리 이름과 설명을 적어준 뒤 Create fork 버튼을 누르면, 해당 프로젝트가 나의 깃허브 레포지토리에 복사되어 추가된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. Branch 생성&lt;/b&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;branch를 생성하는 이유?&lt;/b&gt;&lt;br /&gt;프로젝트 협업에서 개인이 독립된 공간에서 작업을 진행할 수 있게 하기 위함.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;451&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YeAgA/btsKEsQWm8M/MxQElJ9JPlMy0JQ7TYkyT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YeAgA/btsKEsQWm8M/MxQElJ9JPlMy0JQ7TYkyT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YeAgA/btsKEsQWm8M/MxQElJ9JPlMy0JQ7TYkyT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYeAgA%2FbtsKEsQWm8M%2FMxQElJ9JPlMy0JQ7TYkyT0%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;433&quot; height=&quot;397&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;451&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나의 깃허브 속 Fork한 프로젝트에서 main 버튼을 누른 뒤, View all branches 버튼을 누른다.&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;1972&quot; data-origin-height=&quot;87&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x46nA/btsKEvz9wlT/A7breu6uVVFHpolrSk23xk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x46nA/btsKEvz9wlT/A7breu6uVVFHpolrSk23xk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x46nA/btsKEvz9wlT/A7breu6uVVFHpolrSk23xk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx46nA%2FbtsKEvz9wlT%2FA7breu6uVVFHpolrSk23xk%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;1972&quot; height=&quot;87&quot; data-origin-width=&quot;1972&quot; data-origin-height=&quot;87&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;New branch 버튼을 눌러 브랜치 이름을 지정한 뒤 생성해주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 로컬 저장소 폴더와 원격 저장소(github) 연결하기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 로컬에 새로운 폴더를 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 뒤, 해당 폴더가 존재하는 경로에서 cmd를 연 뒤, 아래의 명령어를 차례로 입력한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1731258832128&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git init&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1731258866212&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git remote add origin &quot;해당 git의 http 주소&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;*해당 git의 http 주소는 github 페이지 &amp;gt; Code 버튼 클릭하여 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1731258992579&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git pull origin &quot;브랜치명&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1731424354383&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[github] 로컬 &amp;rarr; 원격 저장소(git)로 업로드하기 - Add, Commit, Push, Pull Request&quot; data-og-description=&quot;[github] Fork, Branch 생성, 로컬 저장소 연결1. Fork 하기Fork란?깃허브에 업로드되어 있는 오픈 소스를 복사해오는 것&amp;nbsp;fork하고자하는 오픈소스 프로젝트의 우측 상단에 있는 Fork 버튼을 누른다.회색으&quot; data-og-host=&quot;haelyn.tistory.com&quot; data-og-source-url=&quot;https://haelyn.tistory.com/278&quot; data-og-url=&quot;https://haelyn.tistory.com/278&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/CePhk/hyXwvnZYnb/KLleISB4M47eEnNeqvgSrK/img.png?width=800&amp;amp;height=297&amp;amp;face=0_0_800_297,https://scrap.kakaocdn.net/dn/rPgrp/hyXwpH5Fve/bq1P9qUJ8Vh8F7H5RcjT4k/img.png?width=800&amp;amp;height=297&amp;amp;face=0_0_800_297,https://scrap.kakaocdn.net/dn/buUE2Z/hyXwuvQ3kX/YkvvjltlQAFxAII16AswD0/img.png?width=1354&amp;amp;height=781&amp;amp;face=0_0_1354_781&quot;&gt;&lt;a href=&quot;https://haelyn.tistory.com/278&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://haelyn.tistory.com/278&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/CePhk/hyXwvnZYnb/KLleISB4M47eEnNeqvgSrK/img.png?width=800&amp;amp;height=297&amp;amp;face=0_0_800_297,https://scrap.kakaocdn.net/dn/rPgrp/hyXwpH5Fve/bq1P9qUJ8Vh8F7H5RcjT4k/img.png?width=800&amp;amp;height=297&amp;amp;face=0_0_800_297,https://scrap.kakaocdn.net/dn/buUE2Z/hyXwuvQ3kX/YkvvjltlQAFxAII16AswD0/img.png?width=1354&amp;amp;height=781&amp;amp;face=0_0_1354_781');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[github] 로컬 &amp;rarr; 원격 저장소(git)로 업로드하기 - Add, Commit, Push, Pull Request&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[github] Fork, Branch 생성, 로컬 저장소 연결1. Fork 하기Fork란?깃허브에 업로드되어 있는 오픈 소스를 복사해오는 것&amp;nbsp;fork하고자하는 오픈소스 프로젝트의 우측 상단에 있는 Fork 버튼을 누른다.회색으&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;haelyn.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 과정은 이 게시글에서 확인할 수 있다.&lt;/p&gt;</description>
      <category>이런저런 꿀팁/github</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>해린</author>
      <guid isPermaLink="true">https://haelyn.tistory.com/277</guid>
      <comments>https://haelyn.tistory.com/277#entry277comment</comments>
      <pubDate>Mon, 11 Nov 2024 02:18:09 +0900</pubDate>
    </item>
    <item>
      <title>[클라우드 보안] #12. AWS Step Functions</title>
      <link>https://haelyn.tistory.com/276</link>
      <description>&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;본 게시글은 aws 공식 사이트의 문서를 필자가 이해하기 쉽게 정리한 글입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;#01. AWS&amp;nbsp;Step&amp;nbsp;Functions&lt;/b&gt;&lt;/h3&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1.&lt;span&gt;&lt;span&gt;&lt;span&gt; AWS&amp;nbsp;Step&amp;nbsp;Functions&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;란?&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;125&quot; data-origin-height=&quot;125&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/okKml/btsKlu26dSx/C4AnoEFG6bvQhRAX9OA3i1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/okKml/btsKlu26dSx/C4AnoEFG6bvQhRAX9OA3i1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/okKml/btsKlu26dSx/C4AnoEFG6bvQhRAX9OA3i1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FokKml%2FbtsKlu26dSx%2FC4AnoEFG6bvQhRAX9OA3i1%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;125&quot; height=&quot;125&quot; data-origin-width=&quot;125&quot; data-origin-height=&quot;125&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS Step Functions는 워크플로우(State Machine)를 통해 분산 애플리케이션, 프로세스 자동화, 마이크로서비스 오케스트레이션, 데이터 및 머신러닝 파이프라인을 구축하는 서비스이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2.&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; 주요 개념&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/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;워크플로우 (State Machine)&lt;/b&gt;: Step Functions의 워크플로우는 이벤트 구동 방식의 단계(State)들로 구성됨. 각 단계는 다른 AWS 서비스 호출, 외부 API 호출, 특정 작업 수행 등 다양한 역할을 할 수 있음.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;표준(Standard) vs Express 워크플로우&lt;/b&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;는 한 번만 실행되며, 최대 1년까지 실행 가능한 긴 작업에 적합함. 상태 기록과 디버깅이 용이함.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Express 워크플로우&lt;/b&gt;는 짧은 작업을 매우 빠르게 반복 처리해야 하는 경우에 적합함. 예를 들어 &lt;b&gt;실시간 데이터 처리&lt;/b&gt;나 &lt;b&gt;IoT 데이터 수집&lt;/b&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-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;Step Functions는 다양한 AWS 서비스와 통합된다. Lambda, Glue, SQS 등의 서비스와 통합되어 애플리케이션의 &lt;b&gt;로직과 흐름&lt;/b&gt;을 시각적으로 관리할 수 있다. Step Functions는 서비스 간 &lt;b&gt;Request Response&lt;/b&gt;(요청-응답), &lt;b&gt;Run a Job&lt;/b&gt;(.sync) 그리고 &lt;b&gt;Wait for Callback&lt;/b&gt;(.waitForTaskToken) 패턴을 지원해 유연하게 작업을 오케스트레이션할 수 있다.&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;4. 주된 사용 사례&lt;/b&gt;&lt;/h4&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;/li&gt;
&lt;li&gt;&lt;b&gt;조건부 작업 처리&lt;/b&gt;: 입력된 데이터에 따라 작업 경로를 동적으로 결정.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;오류 처리와 재시도&lt;/b&gt;: 작업 실패 시 자동으로 재시도하거나 대체 작업을 실행.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사람의 개입이 필요한 단계&lt;/b&gt;: 특정 작업에 사람의 승인이 필요할 때 대기 상태를 설정.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 병렬 처리&lt;/b&gt;: 병렬 단계 또는 Map 상태를 사용해 대규모 데이터를 동시에 처리.&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;Step Functions는 시각화 도구를 제공해, 실행 중인 워크플로우의 상태를 한눈에 파악할 수 있음. 이를 통해 &lt;b&gt;개발자가 적은 코드로 애플리케이션을 쉽게 관리하고 업데이트&lt;/b&gt;할 수 있다.&lt;/p&gt;</description>
      <category>스터디/클라우드 보안</category>
      <author>해린</author>
      <guid isPermaLink="true">https://haelyn.tistory.com/276</guid>
      <comments>https://haelyn.tistory.com/276#entry276comment</comments>
      <pubDate>Sat, 26 Oct 2024 18:48:44 +0900</pubDate>
    </item>
    <item>
      <title>[클라우드 보안] #11. AWS Systems Manager</title>
      <link>https://haelyn.tistory.com/275</link>
      <description>&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;본 게시글은 aws 공식 사이트의 문서를 필자가 이해하기 쉽게 정리한 글입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;#01. AWS&amp;nbsp;Systems&amp;nbsp;Manager&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1.&lt;span&gt;&lt;span&gt; AWS&amp;nbsp;Systems&amp;nbsp;Manager&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;란?&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;125&quot; data-origin-height=&quot;125&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUva02/btsKlzwD5aL/HVZ0IvTrKM9NXkxoGCh4GK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUva02/btsKlzwD5aL/HVZ0IvTrKM9NXkxoGCh4GK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUva02/btsKlzwD5aL/HVZ0IvTrKM9NXkxoGCh4GK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUva02%2FbtsKlzwD5aL%2FHVZ0IvTrKM9NXkxoGCh4GK%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;125&quot; height=&quot;125&quot; data-origin-width=&quot;125&quot; data-origin-height=&quot;125&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;AWS Systems Manager는 AWS 애플리케이션 및 리소스의 운영 허브. 하이브리드 및 멀티 클라우드 환경에서 보안성 높은 엔드투엔드 관리 솔루션을 제공함.&lt;/li&gt;
&lt;li&gt;DevOps 및 IT 관리자들이 대규모 운영 작업을 효율적으로 수행할 수 있도록 지원.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 작동 방식&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;접근 (Access Systems Manager)&lt;/b&gt;: 다양한 방식으로 Systems Manager에 접근하여 관리할 수 있음.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기능 선택 (Choose a Systems Manager capability)&lt;/b&gt;: 원하는 작업을 수행할 수 있는 Systems Manager 기능을 선택. 일부 기능은 IT 관리자와 DevOps 담당자가 애플리케이션 및 리소스를 관리하는 데 도움을 줌.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;검증 및 처리 (Verification and processing)&lt;/b&gt;: Systems Manager는 IAM 권한을 확인하고, 필요한 경우 SSM Agent가 설치된 관리 노드에서 작업을 수행하거나 다른 AWS 서비스와 통신해 작업을 실행.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;보고 (Reporting)&lt;/b&gt;: Systems Manager와 SSM Agent는 작업 수행 후 상태를 보고함. 필요한 경우, 다른 AWS 서비스로 상태 정보를 전송할 수 있음.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;운영 관리 기능 (Operations management capabilities)&lt;/b&gt;: Explorer, OpsCenter, Incident Manager와 같은 기능을 통해 운영 데이터를 집계하고, 문제 해결을 위한 자동화된 대응 솔루션을 제공.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. 주요 기능&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;어플리케이션 관리&lt;/b&gt;: Application Manager, AppConfig, Parameter Store 등을 통해 애플리케이션 단위로 리소스를 관리하고 문제를 해결.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;변경 관리&lt;/b&gt;: Change Manager, Automation, Change Calendar로 운영 변경을 요청, 승인, 보고.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;노드 관리&lt;/b&gt;: Compliance, Fleet Manager, Inventory 등을 통해 온프레미스 및 클라우드 노드의 패치와 설정 상태를 관리.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;운영 관리&lt;/b&gt;: Incident Manager, Explorer, OpsCenter 등을 통해 인시던트를 탐지하고 대응.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Quick Setup&lt;/b&gt;: 자주 사용하는 AWS 서비스와 기능을 베스트 프랙티스에 맞게 손쉽게 구성. 여러 계정과 리전을 한 번에 설정할 수 있어 시간을 절약할 수 있음.&lt;/li&gt;
&lt;li&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;b&gt;SSM 문서&lt;/b&gt;: Systems Manager 작업을 정의하는 문서로 JSON 또는 YAML 형식으로 표현됨. 다양한 사전 설정된 문서를 활용해 빠르게 작업을 수행할 수 있음.&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-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4. 접근 방법&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;Systems Manager 콘솔, CLI, PowerShell, SDK를 통해 시스템 작업을 실행할 수 있으며, 시스템별 다양한 운영 환경에 맞는 접근 방식이 가능.
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;Systems Manager 콘솔: &lt;/b&gt;브라우저 기반 인터페이스로, Systems Manager를 쉽게 접근하고 사용할 수 있음.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;AWS IoT Greengrass V2 콘솔: &lt;/b&gt;AWS IoT Greengrass에 구성된 엣지 디바이스를 관리할 수 있음.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;AWS 커맨드라인 도구: &lt;/b&gt;AWS CLI 및 AWS Tools for Windows PowerShell을 사용해 명령어 기반으로 Systems Manager 작업을 수행할 수 있음. CLI는 Linux, macOS, Windows에서 지원되며 스크립트를 작성하여 자동화하는 데 유용.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;AWS SDK: &lt;/b&gt;Java, Python, Ruby, .NET, iOS, Android 등 다양한 언어와 플랫폼을 위한 라이브러리 및 샘플 코드로, 프로그래밍을 통해 Systems Manager에 접근할 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>스터디/클라우드 보안</category>
      <author>해린</author>
      <guid isPermaLink="true">https://haelyn.tistory.com/275</guid>
      <comments>https://haelyn.tistory.com/275#entry275comment</comments>
      <pubDate>Sat, 26 Oct 2024 18:36:27 +0900</pubDate>
    </item>
    <item>
      <title>[클라우드 보안] #10. AWS Config</title>
      <link>https://haelyn.tistory.com/274</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;본 게시글은 aws 공식 사이트의 문서를 필자가 이해하기 쉽게 정리한 글입니다.&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;b&gt;#01. AWS&amp;nbsp;Config&lt;/b&gt;&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1.&lt;span&gt; AWS&amp;nbsp;Config&lt;/span&gt;&lt;/b&gt;&lt;b&gt;란?&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;125&quot; data-origin-height=&quot;125&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Kt31v/btsJEDUTmIR/Okm556hLGwkRRLIyEQcKI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Kt31v/btsJEDUTmIR/Okm556hLGwkRRLIyEQcKI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Kt31v/btsJEDUTmIR/Okm556hLGwkRRLIyEQcKI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKt31v%2FbtsJEDUTmIR%2FOkm556hLGwkRRLIyEQcKI0%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;125&quot; height=&quot;125&quot; data-origin-width=&quot;125&quot; data-origin-height=&quot;125&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div&gt;
&lt;div data-message-id=&quot;ec147851-0bdc-49a5-88f1-dc1ede1c5e31&quot; data-message-author-role=&quot;assistant&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;AWS 리소스의 설정과 변경을 자동으로 기록하고, 컴플라이언스 및 보안 상태를 실시간으로 모니터링&lt;/b&gt;하는 &lt;b&gt;구성 관리 도구&lt;/b&gt;이다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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;b&gt;2.&lt;span&gt;&lt;span&gt; 주요 기능&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&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;/li&gt;
&lt;li&gt;&lt;b&gt; 컴플라이언스 관리 및 감사&lt;/b&gt;: 컴플라이언스 상태를 모니터링하여 규정을 준수하지 않는 리소스를 탐지하고, 규정 위반 사항을 추적 및 감사할 수 있게 한다. 이를 통해 내부 정책 및 외부 규정 준수를 위한 감사 보고서를 작성할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;구성 변경 관리&lt;/b&gt;: 여러 AWS 리소스 간의 구성 변경이 다른 리소스에 미치는 영향을 분석할 수 있다. 리소스의 마지막 정상 상태를 조회하여 문제를 해결하고, 과거에 발생한 변경 사항을 추적해 문제의 원인을 파악할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;보안 분석&lt;/b&gt;: IAM 권한 설정, EC2 보안 그룹 규칙 등 리소스의 보안 설정을 시각적으로 분석하여 잠재적인 보안 약점을 파악할 수 있다. 이를 통해 특정 시점에 어떤 권한이 설정되었는지, 특정 포트가 열려 있었는지를 확인할 수 있다.&lt;/li&gt;
&lt;/ol&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;b&gt;3.&lt;span&gt;&lt;span&gt;&lt;span&gt; 활용&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&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;/li&gt;
&lt;li&gt;규정 준수와 관련된 감사 보고서 생성&lt;/li&gt;
&lt;li&gt;보안 약점 탐지 및 권한 관리 분석&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>스터디/클라우드 보안</category>
      <author>해린</author>
      <guid isPermaLink="true">https://haelyn.tistory.com/274</guid>
      <comments>https://haelyn.tistory.com/274#entry274comment</comments>
      <pubDate>Thu, 19 Sep 2024 15:30:57 +0900</pubDate>
    </item>
    <item>
      <title>[클라우드 보안] #09. Amazon Inspector</title>
      <link>https://haelyn.tistory.com/273</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;본 게시글은 aws 공식 사이트의 문서를 필자가 이해하기 쉽게 정리한 글입니다.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;#01. Amazon Inspector&lt;/b&gt;&lt;/h3&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. &lt;/b&gt;&lt;b&gt;Amazon Inspector란?&lt;/b&gt;&lt;/h4&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;125&quot; data-origin-height=&quot;125&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d0bfGD/btsJEkgZHRS/oVnEfkIjv9VK5mJuFYIz00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d0bfGD/btsJEkgZHRS/oVnEfkIjv9VK5mJuFYIz00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d0bfGD/btsJEkgZHRS/oVnEfkIjv9VK5mJuFYIz00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd0bfGD%2FbtsJEkgZHRS%2FoVnEfkIjv9VK5mJuFYIz00%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;125&quot; height=&quot;125&quot; data-origin-width=&quot;125&quot; data-origin-height=&quot;125&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;취약점을 자동으로 탐지하고 보안 위험을 실시간으로 평가&lt;/b&gt;하는 &lt;b&gt;자동화된 보안 진단 도구&lt;/b&gt;이다.&lt;br&gt;Amazon EC2 인스턴스, Amazon ECR에 저장된 컨테이너 이미지, 그리고 Lambda 함수에서 취약점을 자동으로 감지하는 기능이 있으며, 운영 체제, 네트워크, 애플리케이션의 &lt;b&gt;보안 위험&lt;/b&gt;을 평가하고, &lt;b&gt;CVE&lt;/b&gt;와 같은 표준 데이터베이스와 비교하여 결과를 제공한다&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2.&lt;/b&gt;&lt;b&gt; 주요&amp;nbsp;&lt;/b&gt;&lt;b&gt;기능&lt;/b&gt;&lt;/h4&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;: 여러 AWS 계정이 있는 경우, AWS Organizations를 통해 중앙 관리가 가능하며, 조직의 모든 계정에 대해 Amazon Inspector를 한 번의 클릭으로 활성화할 수 있다.&lt;/li&gt;&lt;li&gt;&lt;b&gt;자동 스캔&lt;/b&gt;: 환경 내 자원에 대한 지속적인 스캔이 이루어지며, 소프트웨어 패치 설치나 새로운 취약점(CVE) 발표 시 자동으로 재스캔을 진행한다.&lt;/li&gt;&lt;li&gt;&lt;b&gt;위험 점수 제공&lt;/b&gt;: 각 환경에 맞게 조정된 위험 점수를 제공하여, 취약점의 심각도를 효과적으로 평가하고 우선적으로 처리할 수 있도록 도와준다. 이 점수는 CVSS 형식을 따른다.&lt;/li&gt;&lt;li&gt;&lt;b&gt;대시보드 관리&lt;/b&gt;: 중요한 취약점 및 자원을 한눈에 볼 수 있는 대시보드를 제공하여, 보안 상태를 쉽게 모니터링할 수 있다.&lt;/li&gt;&lt;li&gt;&lt;b&gt;다른 AWS 서비스와 통합&lt;/b&gt;: Amazon EventBridge 및 AWS Security Hub와의 연동을 통해 보안 워크플로우에 실시간으로 취약점 데이터를 전달하고 처리할 수 있다.&lt;/li&gt;&lt;/ol&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;이러한 Amazon Inspector는 AWS Managerment Console, CLI, SDK, REST API를 통해 액세스할 수 있으며, 여러 AWS 리전에서 사용할 수 있다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>스터디/클라우드 보안</category>
      <author>해린</author>
      <guid isPermaLink="true">https://haelyn.tistory.com/273</guid>
      <comments>https://haelyn.tistory.com/273#entry273comment</comments>
      <pubDate>Thu, 19 Sep 2024 15:20:54 +0900</pubDate>
    </item>
    <item>
      <title>[백준 / C++] Day91. 파일 합치기 (11066)</title>
      <link>https://haelyn.tistory.com/272</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;2024. 09. 02 - 코딩테스트 스터디 Day91&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;01. 문제&lt;/b&gt;&lt;/h4&gt;&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt; 
 &lt;div id=&quot;problem_description&quot;&gt;
  &amp;nbsp;
 &lt;/div&gt; 
&lt;/div&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;소설가인 김대전은 소설을 여러 장(chapter)으로 나누어 쓰는데, 각 장은 각각 다른 파일에 저장하곤 한다. 소설의 모든 장을 쓰고 나서는 각 장이 쓰여진 파일을 합쳐서 최종적으로 소설의 완성본이 들어있는 한 개의 파일을 만든다. 이 과정에서 두 개의 파일을 합쳐서 하나의 임시파일을 만들고, 이 임시파일이나 원래의 파일을 계속 두 개씩 합쳐서 소설의 여러 장들이 연속이 되도록 파일을 합쳐나가고, 최종적으로는 하나의 파일로 합친다. 두 개의 파일을 합칠 때 필요한 비용(시간 등)이 두 파일 크기의 합이라고 가정할 때, 최종적인 한 개의 파일을 완성하는데 필요한 비용의 총 합을 계산하시오.&lt;br&gt;예를 들어, C1, C2, C3, C4가 연속적인 네 개의 장을 수록하고 있는 파일이고, 파일 크기가 각각 40, 30, 30, 50 이라고 하자. 이 파일들을 합치는 과정에서, 먼저 C2와 C3를 합쳐서 임시파일 X1을 만든다. 이때 비용 60이 필요하다. 그 다음으로 C1과 X1을 합쳐 임시파일 X2를 만들면 비용 100이 필요하다. 최종적으로 X2와 C4를 합쳐 최종파일을 만들면 비용 150이 필요하다. 따라서, 최종의 한 파일을 만드는데 필요한 비용의 합은 60+100+150=310 이다. 다른 방법으로 파일을 합치면 비용을 줄일 수 있다. 먼저 C1과 C2를 합쳐 임시파일 Y1을 만들고, C3와 C4를 합쳐 임시파일 Y2를 만들고, 최종적으로 Y1과 Y2를 합쳐 최종파일을 만들 수 있다. 이때 필요한 총 비용은 70+80+150=300 이다.&lt;br&gt;소설의 각 장들이 수록되어 있는 파일의 크기가 주어졌을 때, 이 파일들을 하나의 파일로 합칠 때 필요한 최소비용을 계산하는 프로그램을 작성하시오.&lt;br&gt;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;02. 입력&lt;/b&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T개의 테스트 데이터로 이루어져 있는데, T는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 두 개의 행으로 주어지는데, 첫 행에는 소설을 구성하는 장의 수를 나타내는 양의 정수 K (3 ≤ K ≤ 500)가 주어진다. 두 번째 행에는 1장부터 K장까지 수록한 파일의 크기를 나타내는 양의 정수 K개가 주어진다. 파일의 크기는 10,000을 초과하지 않는다.&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;03. 출력&lt;/b&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;프로그램은 표준 출력에 출력한다. 각 테스트 데이터마다 정확히 한 행에 출력하는데, 모든 장을 합치는데 필요한 최소비용을 출력한다.&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;04-1. 예제 입력 1&lt;/b&gt;&lt;/h4&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;2
4
40 30 30 50
15
1 21 3 4 5 35 5 4 3 5 98 21 14 17 32&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;04-2. 예제 출력 1&lt;/b&gt;&lt;/h4&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;300
864&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&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;5. 풀이&lt;/b&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;b&gt;및 답&lt;/b&gt;&amp;nbsp;&lt;/h4&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;algorithm&amp;gt;
#define INF 1000000000
using namespace std;

int sum[501], file[501], dp[501][501];

int main() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int T; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cin &amp;gt;&amp;gt; T;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while (T--) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int t; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cin &amp;gt;&amp;gt; t;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (int i = 1; i &amp;lt;= t; i++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cin &amp;gt;&amp;gt; file[i];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sum[i] = sum[i - 1] + file[i];
&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;for (int i = 1; i &amp;lt;= t; i++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (int j = 1; j + i &amp;lt;= t; j++) {
&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;dp[j][i + j] = INF;
&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;for (int k = j; k &amp;lt; i + j; k++) {
&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;dp[j][i + j] = min(dp[j][i + j], dp[j][k] + dp[k + 1][i + j] + sum[i + j] - sum[j - 1]);
&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;cout &amp;lt;&amp;lt; dp[1][t] &amp;lt;&amp;lt; &quot;\n&quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return 0;
}&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;각 파일의 크기를 입력받고, sum[i]에 1부터 i까지의 파일 크기의 누적 합에 저장한다.&lt;br&gt;&amp;nbsp;&lt;br&gt;dp[j][i+j]는 파일 j에서 i+j까지 합치는데 드는 최소 비용을 저장하는 공간이고, 초기에는 INF로 설정되어 있다.&lt;br&gt;파일 구간을 j에서 i+j까지 두 부분으로 나누고, 두 부분의 최소 비용을 합산해 전체 최소 비용을 계산한다.&lt;br&gt;sum[i+j] - sum[j-i]은 i+j까지의 파일을 모두 합친 결과의 크기이다.&lt;br&gt;&amp;nbsp;&lt;br&gt;1번 파일부터 t번 파일까지 합치는데 드는 최소 비용이 저장된 dp[1][t]를 출력하고 종료한다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1708&quot; data-origin-height=&quot;109&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PXGWw/btsJnMkl4yL/jIcfA5C5fFpMTHdYnnil0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PXGWw/btsJnMkl4yL/jIcfA5C5fFpMTHdYnnil0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PXGWw/btsJnMkl4yL/jIcfA5C5fFpMTHdYnnil0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPXGWw%2FbtsJnMkl4yL%2FjIcfA5C5fFpMTHdYnnil0K%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;1708&quot; height=&quot;109&quot; data-origin-width=&quot;1708&quot; data-origin-height=&quot;109&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정답!&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;figure data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;014&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/014.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/014.gif&quot; width=&quot;150&quot;&gt;&lt;/figure&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: center;&quot;&gt;코딩 테스트 스터디 끝!&lt;br&gt;앞으로도 꾸준히 코테 문제를 풀 생각이다 ㅎㅎ&lt;/p&gt;</description>
      <category>코딩테스트/Daily Coding  (C, C++)</category>
      <author>해린</author>
      <guid isPermaLink="true">https://haelyn.tistory.com/272</guid>
      <comments>https://haelyn.tistory.com/272#entry272comment</comments>
      <pubDate>Sun, 1 Sep 2024 22:20:15 +0900</pubDate>
    </item>
    <item>
      <title>[백준 / C++] Day90. 2xn 타일링</title>
      <link>https://haelyn.tistory.com/271</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;2024. 09. 01 - 코딩테스트 스터디 Day90&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;01. 문제&lt;/b&gt;&lt;/h4&gt;&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt; 
 &lt;div id=&quot;problem_description&quot;&gt; 
  &lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.&lt;/p&gt; 
  &lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.&lt;/p&gt; 
  &lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;513&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zHDf4/btsJnv24R6o/x9zLnpc5Pa7BWKs7hQYuRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zHDf4/btsJnv24R6o/x9zLnpc5Pa7BWKs7hQYuRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zHDf4/btsJnv24R6o/x9zLnpc5Pa7BWKs7hQYuRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzHDf4%2FbtsJnv24R6o%2Fx9zLnpc5Pa7BWKs7hQYuRK%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;688&quot; height=&quot;276&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;513&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

 &lt;/div&gt; 
&lt;/div&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;02. 입력&lt;/b&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;03. 출&lt;/b&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;04-1. 예제 입력 1&lt;/b&gt;&lt;/h4&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;2&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;04-2. 예제 출력 1&lt;/b&gt;&lt;/h4&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;2&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&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;05-1. 예제 입력 2&lt;/b&gt;&lt;/h4&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;9&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;05-2. 예제 출력 2&lt;/b&gt;&lt;/h4&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;55&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&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;6. 풀이&lt;/b&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;b&gt;및 답&lt;/b&gt;&amp;nbsp;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;n에 따른 &lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;2×n 크기의 직사각형을 채우는 방법의 수는 아래와 같다&lt;/span&gt;&lt;/span&gt;&lt;br&gt;n = 1 → dp[1] = 1&lt;br&gt;n = 2 → dp[2] = 2&lt;br&gt;n = 3 → dp[3] = 3&lt;br&gt;n = 4 → dp[4] = 5&lt;br&gt;n = 5 → dp[5] = 8&lt;br&gt;&amp;nbsp;&lt;br&gt;위 결과를 통해 아래와 같은 점화식을 구할 수 있다&lt;br&gt;&lt;b&gt;dp[i] = dp[i - 1] + dp[i - 2]&lt;/b&gt;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;

using namespace std;

int main() {
	int dp[100001];
	int n;
	cin &amp;gt;&amp;gt; n;

	dp[1] = 1;
	dp[2] = 2;

	for (int i = 3; i &amp;lt;= n; i++) {
		dp[i] = (dp[i - 1] + dp[i - 2]) % 10007;
	}

	cout &amp;lt;&amp;lt; dp[n];

	return 0;
}&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;위 점화식을 가지고 코드를 작성해보았다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1713&quot; data-origin-height=&quot;109&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OtZ8g/btsJl89acpI/knofO8isOppc0CQeuI4NY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OtZ8g/btsJl89acpI/knofO8isOppc0CQeuI4NY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OtZ8g/btsJl89acpI/knofO8isOppc0CQeuI4NY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOtZ8g%2FbtsJl89acpI%2FknofO8isOppc0CQeuI4NY0%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;1713&quot; height=&quot;109&quot; data-origin-width=&quot;1713&quot; data-origin-height=&quot;109&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정답!&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;figure data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;047&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/047.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/047.gif&quot; width=&quot;150&quot;&gt;&lt;/figure&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩테스트/Daily Coding  (C, C++)</category>
      <author>해린</author>
      <guid isPermaLink="true">https://haelyn.tistory.com/271</guid>
      <comments>https://haelyn.tistory.com/271#entry271comment</comments>
      <pubDate>Sun, 1 Sep 2024 22:04:42 +0900</pubDate>
    </item>
    <item>
      <title>[백준 / C++] Day89. 가장 긴 감소하는 부분 수열</title>
      <link>https://haelyn.tistory.com/270</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;2024. 08. 31 - 코딩테스트 스터디 Day89&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;01. 문제&lt;/b&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;수열 A가 주어졌을 때, 가장 긴 감소하는&amp;nbsp;부분&amp;nbsp;수열을 구하는 프로그램을 작성하시오.&lt;br&gt;예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분&amp;nbsp;수열은&amp;nbsp;A = {10,&amp;nbsp;&lt;b&gt;30&lt;/b&gt;, 10,&amp;nbsp;&lt;b&gt;20&lt;/b&gt;, 20,&amp;nbsp;&lt;b&gt;10&lt;/b&gt;}&amp;nbsp; 이고, 길이는 3이다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;02. 입력&lt;/b&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000)이 주어진다.&lt;br&gt;둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai&amp;nbsp;≤ 1,000)&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;03. 출&lt;/b&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;첫째 줄에 수열 A의 가장 긴 감소하는 부분 수열의 길이를 출력한다.&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;04-1. 예제 입력 1&lt;/b&gt;&lt;/h4&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;6
10 30 10 20 20 10&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;04-2. 예제 출력 1&lt;/b&gt;&lt;/h4&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;3&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&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;4. 풀이&lt;/b&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;b&gt;및 답&lt;/b&gt;&amp;nbsp;&lt;/h4&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;algorithm&amp;gt;

using namespace std;

int main() {
	int N;
	cin &amp;gt;&amp;gt; N;

	int A[1000];
	int dp[1000];

	for (int i = 0; i &amp;lt; N; i++) {
		cin &amp;gt;&amp;gt; A[i];
		dp[i] = 1;
	}

	for (int i = 1; i &amp;lt; N; i++) {
		for (int j = 0; j &amp;lt; i; j++) {
			if (A[i] &amp;lt; A[j]) {
				dp[i] = max(dp[i], dp[j] + 1);
			}
		}
	}

	int result = dp[0];
	for (int i = 1; i &amp;lt; N; i++) {
		result = max(result, dp[i]);
	}

	cout &amp;lt;&amp;lt; result;

	return 0;
}&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;dp 배열을 선언하고 각 요소를 1로 초기화한다. dp에는 배열 A의 i번째 요소를 마지막으로 포함하는 감소하는 부분 수열의 최대 길이를 담는다.&lt;br&gt;&amp;nbsp;&lt;br&gt;중첩 반복문을 사용하여 감소하는 부분 수열의 최대 길이를 찾도록 한다.&lt;br&gt;A[i]보다 그 왼쪽에 있는 수가 더 크다면 dp[i]와 dp[j]+1를 비교하여 dp[i]에 넣는다.&lt;br&gt;&amp;nbsp;&lt;br&gt;예를 들어,&amp;nbsp;&lt;/p&gt;&lt;pre id=&quot;sample-input-1&quot; class=&quot;basic&quot; style=&quot;background-color: #f7f7f9; color: #333333; text-align: start;&quot;&gt;&lt;code&gt;6
10 30 10 20 20 10&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;위와 같이 입력 값이 들어왔고, 현재 i가 2인 상태라면&lt;br&gt;A[i] = A[2] = 10이고,&lt;br&gt;A[i]보다 왼쪽에 있는 숫자 중 A[i] 값보다 큰 수 30가 A[1]에 존재하기 때문에,&lt;br&gt;dp[2] = 1과 dp[1] + 1 = 2를 비교하여 더 큰 수인 2를 dp[2]에 넣는다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;→ 감소하는 부분 수열(30, 10)을 찾았기 때문에 A의 2번째 요소를 를 마지막으로 포함하는 감소하는 부분 수열의 길이(dp[2])를 갱신한 것이다.&lt;/b&gt;&lt;br&gt;&amp;nbsp;&lt;br&gt;마지막으로 dp 배열에서 가장 큰 값을 찾아 출력한다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1711&quot; data-origin-height=&quot;106&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czhqiv/btsJnIntS6B/G5EUxvRotLCtzKNbWzNYj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czhqiv/btsJnIntS6B/G5EUxvRotLCtzKNbWzNYj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czhqiv/btsJnIntS6B/G5EUxvRotLCtzKNbWzNYj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fczhqiv%2FbtsJnIntS6B%2FG5EUxvRotLCtzKNbWzNYj1%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;1711&quot; height=&quot;106&quot; data-origin-width=&quot;1711&quot; data-origin-height=&quot;106&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정답!&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;figure data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;047&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/047.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/047.gif&quot; width=&quot;150&quot;&gt;&lt;/figure&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩테스트/Daily Coding  (C, C++)</category>
      <author>해린</author>
      <guid isPermaLink="true">https://haelyn.tistory.com/270</guid>
      <comments>https://haelyn.tistory.com/270#entry270comment</comments>
      <pubDate>Sat, 31 Aug 2024 23:00:57 +0900</pubDate>
    </item>
    <item>
      <title>[백준 / C++] Day88. 퇴사 2</title>
      <link>https://haelyn.tistory.com/269</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;2024. 08. 30 - 코딩테스트 스터디 Day88&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;01. 문제&lt;/b&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;상담원으로 일하고 있는 백준이는 퇴사를 하려고 한다.&lt;br&gt;오늘부터 N+1일째 되는 날 퇴사를 하기 위해서, 남은 N일 동안 최대한 많은 상담을 하려고 한다.&lt;br&gt;백준이는 비서에게 최대한 많은 상담을 잡으라고 부탁을 했고, 비서는 하루에 하나씩 서로 다른 사람의 상담을 잡아놓았다.&lt;br&gt;각각의 상담은 상담을 완료하는 데 걸리는 기간 Ti와 상담을 했을 때 받을 수 있는 금액 Pi로 이루어져 있다.&lt;br&gt;N = 7인 경우에 다음과 같은 상담 일정표를 보자.&lt;br&gt;&amp;nbsp;1일2일3일4일5일6일7일TiPi&lt;/p&gt;&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 6.39535%;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 12.907%;&quot;&gt;&lt;b&gt;1일&lt;/b&gt;&lt;/td&gt;&lt;td style=&quot;width: 12.907%;&quot;&gt;&lt;b&gt;2일&lt;/b&gt;&lt;/td&gt;&lt;td style=&quot;width: 12.907%;&quot;&gt;&lt;b&gt;3일&lt;/b&gt;&lt;/td&gt;&lt;td style=&quot;width: 12.907%;&quot;&gt;&lt;b&gt;4일&lt;/b&gt;&lt;/td&gt;&lt;td style=&quot;width: 12.907%;&quot;&gt;&lt;b&gt;5일&lt;/b&gt;&lt;/td&gt;&lt;td style=&quot;width: 12.907%;&quot;&gt;&lt;b&gt;6일&lt;/b&gt;&lt;/td&gt;&lt;td style=&quot;width: 16.1628%;&quot;&gt;&lt;b&gt;7일&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 6.39535%;&quot;&gt;&lt;b&gt; &lt;/b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;T&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;i &lt;/b&gt;&lt;/td&gt;&lt;td style=&quot;width: 12.907%;&quot;&gt;3&lt;/td&gt;&lt;td style=&quot;width: 12.907%;&quot;&gt;5&lt;/td&gt;&lt;td style=&quot;width: 12.907%;&quot;&gt;1&lt;/td&gt;&lt;td style=&quot;width: 12.907%;&quot;&gt;1&lt;/td&gt;&lt;td style=&quot;width: 12.907%;&quot;&gt;2&lt;/td&gt;&lt;td style=&quot;width: 12.907%;&quot;&gt;4&lt;/td&gt;&lt;td style=&quot;width: 16.1628%;&quot;&gt;2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 6.39535%;&quot;&gt;&lt;b&gt; &lt;/b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;P&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;i &lt;/b&gt;&lt;/td&gt;&lt;td style=&quot;width: 12.907%;&quot;&gt;10&lt;/td&gt;&lt;td style=&quot;width: 12.907%;&quot;&gt;20&lt;/td&gt;&lt;td style=&quot;width: 12.907%;&quot;&gt;10&lt;/td&gt;&lt;td style=&quot;width: 12.907%;&quot;&gt;20&lt;/td&gt;&lt;td style=&quot;width: 12.907%;&quot;&gt;15&lt;/td&gt;&lt;td style=&quot;width: 12.907%;&quot;&gt;40&lt;/td&gt;&lt;td style=&quot;width: 16.1628%;&quot;&gt;200&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;1일에 잡혀있는 상담은 총 3일이 걸리며, 상담했을 때 받을 수 있는 금액은 10이다. 5일에 잡혀있는 상담은 총 2일이 걸리며, 받을 수 있는 금액은 15이다.&lt;br&gt;상담을 하는데 필요한 기간은 1일보다 클 수 있기 때문에, 모든 상담을 할 수는 없다. 예를 들어서 1일에 상담을 하게 되면, 2일, 3일에 있는 상담은 할 수 없게 된다. 2일에 있는 상담을 하게 되면, 3, 4, 5, 6일에 잡혀있는 상담은 할 수 없다.&lt;br&gt;또한, N+1일째에는 회사에&amp;nbsp;없기 때문에, 6, 7일에 있는 상담을 할 수 없다.&lt;br&gt;퇴사 전에 할 수 있는 상담의 최대 이익은 1일, 4일, 5일에 있는 상담을 하는 것이며, 이때의 이익은 10+20+15=45이다.&lt;br&gt;상담을 적절히 했을 때, 백준이가 얻을 수 있는 최대 수익을 구하는 프로그램을 작성하시오.&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;02. 입력&lt;/b&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;첫째 줄에 N (1 ≤ N ≤ 1,500,000)이 주어진다.&lt;br&gt;둘째 줄부터 N개의 줄에 Ti와 Pi가 공백으로 구분되어서 주어지며, 1일부터 N일까지 순서대로 주어진다. (1 ≤ Ti&amp;nbsp;≤ 50, 1 ≤ Pi&amp;nbsp;≤&amp;nbsp;1,000)&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;03. 출력&lt;/b&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다.&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;04-1. 예제 입력 1&lt;/b&gt;&lt;/h4&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;7
3 10
5 20
1 10
1 20
2 15
4 40
2 200&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;04-2. 예제 출력 1&lt;/b&gt;&lt;/h4&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;45&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;05-1. 예제 입력 2&lt;/b&gt;&lt;/h4&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;10
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;05-2. 예제 출력 2&lt;/b&gt;&lt;/h4&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;55&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;06-1. 예제 입력 3&lt;/b&gt;&lt;/h4&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;10
5 10
5 9
5 8
5 7
5 6
5 10
5 9
5 8
5 7
5 6&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;06-2. 예제 출력 3&lt;/b&gt;&lt;/h4&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;20&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;07-1. 예제 입력 4&lt;/b&gt;&lt;/h4&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;10
5 50
4 40
3 30
2 20
1 10
1 10
2 20
3 30
4 40
5 50&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;07-2. 예제 출력 4&lt;/b&gt;&lt;/h4&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;90&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4. 풀이&lt;/b&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;b&gt;및 답&lt;/b&gt;&amp;nbsp;&lt;/h4&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;algorithm&amp;gt;

using namespace std;

int dp[1500001];

int main() {
	int n, t, p;
	cin &amp;gt;&amp;gt; n;

	for (int i = 1; i &amp;lt;= n; i++) {
		cin &amp;gt;&amp;gt; t &amp;gt;&amp;gt; p;
		dp[i + t] = max(dp[i + t], dp[i] + p);
		dp[i + 1] = max(dp[i], dp[i + 1]);
	}

	cout &amp;lt;&amp;lt; dp[n + 1] &amp;lt;&amp;lt; '\n';

	return 0;
}&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;dp 배열을 선언하여 인덱스인 i일까지 얻을 수 있는 최대 수익을 저장한다.&lt;br&gt;i일마다 해당 날의 상담을 수행했을 때와 수행하지 않았을 때를 비교해서 더 큰 값으로 갱신한다.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;dp[i + t] = max(dp[i + t], dp[i] + p)&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;현재 상담을 수행했을 때, 상담이 끝나는 시점(i + t)의 최대 수익을 갱신한다.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;dp[i + 1] = max(dp[i], dp[i + 1])&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;현재 상담을 수행하지 않았을 때, 다음 날(i + 1)의 최대 수익을 갱신한다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;동작 예시&lt;/b&gt;&lt;/p&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;7
3 10
5 20
1 10
1 20
2 15
4 40
2 200&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;첫 번째 예제를 가지고 동작을 보도록 하겠다.&lt;br&gt;&amp;nbsp;&lt;br&gt;1. 1일차 상담 (3일, 10p)&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;상담을 한 경우, 4일차(1+3) 수익 10 → dp[4] = 10&lt;/li&gt;&lt;li&gt;상담을 안 한 경우, 2일차(1+1) 수익 0 → dp[2] = 0&lt;/li&gt;&lt;/ul&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;2. 2일차 상담 (5일, 20p)&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;상담을 한 경우, 7일차(2+5) 수익 20 → dp[7] = 20&lt;/li&gt;&lt;li&gt;상담을 안 한 경우, 3일차(2+1) 수익 0&amp;nbsp;→ dp[3] = 0&lt;/li&gt;&lt;/ul&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;3. 3일차 상담 (1일, 10p)&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;상담을 한 경우, 4일차(3+1) 수익 20 → dp[4] = max(10, 10) = 10&lt;/li&gt;&lt;li&gt;상담을 안 한 경우, 4일차(3+1) 수익 그대로 20&amp;nbsp;→ dp[4] = 20&lt;/li&gt;&lt;/ul&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;4. 4일차 상담 (1일, 20p)&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;상담을 한 경우, 5일차(4+1) 수익 20 → dp[5] = max(0, 30) = 30&lt;/li&gt;&lt;li&gt;상담을 안 한 경우, 5일차(4+1) 수익 그대로 30&amp;nbsp;→ dp[5] = 30&lt;/li&gt;&lt;/ul&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;5. 5일차 상담 (2일, 15p)&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;상담을 한 경우, 7일차(5+2) 수익 45 → dp[7] = max(20, 45) = 45&lt;/li&gt;&lt;li&gt;상담을 안 한 경우, 6일차(5+1) 수익 그대로 30&amp;nbsp;→ dp[6] = 0&lt;/li&gt;&lt;/ul&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;6. 6일차 상담 (4일, 40p)&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;상담을 한 경우, 10일차(6+4) 수익 70 → 10일차는 퇴사날을 넘김&lt;/li&gt;&lt;li&gt;상담을 안 한 경우, 7일차(6+1) 수익 그대로 0&amp;nbsp;→ dp[7] = 45&lt;/li&gt;&lt;/ul&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;7. 7일차 상담 (2일, 200p)&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;상담을 한 경우, 9일차(7+2) 수익 245 → 9일차는 퇴사날을 넘김&lt;/li&gt;&lt;li&gt;상담을 안 한 경우, 8일차(7+1) 수익 그대로 45&amp;nbsp;→ &lt;b&gt;dp[8] = 45&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1705&quot; data-origin-height=&quot;108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckljN5/btsJntwV26x/QW1fEl3rxhbxDRPhinRJv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckljN5/btsJntwV26x/QW1fEl3rxhbxDRPhinRJv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckljN5/btsJntwV26x/QW1fEl3rxhbxDRPhinRJv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckljN5%2FbtsJntwV26x%2FQW1fEl3rxhbxDRPhinRJv1%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;1705&quot; height=&quot;108&quot; data-origin-width=&quot;1705&quot; data-origin-height=&quot;108&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정답!&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;figure data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;047&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/047.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/047.gif&quot; width=&quot;150&quot;&gt;&lt;/figure&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;참고한 게시글&lt;/b&gt;&lt;/p&gt;&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;[ 백준 15486 ] 퇴사 2 (C++)&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;https://www.acmicpc.net/problem/15486 15486번: 퇴사 2 첫째 줄에 N (1 ≤ N ≤ 1,500,000)이 주어진다. 둘째 줄부터 N개의 줄에 Ti와 Pi가 공백으로 구분되어서 주어지며, 1일부터 N일까지 순서대로 주어진다. (1 ≤&quot; data-og-host=&quot;charles098.tistory.com&quot; data-og-source-url=&quot;https://charles098.tistory.com/104&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bUNQQ5/hyWV4dlQIn/9lObkxukxL5riszzPhZ0G0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/c5xxdN/hyWVYxrE16/zkrikOrBd14SiDiOQFpe11/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot; data-og-url=&quot;https://charles098.tistory.com/104&quot;&gt;&lt;a href=&quot;https://charles098.tistory.com/104&quot; target=&quot;_blank&quot; data-source-url=&quot;https://charles098.tistory.com/104&quot;&gt;&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bUNQQ5/hyWV4dlQIn/9lObkxukxL5riszzPhZ0G0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/c5xxdN/hyWVYxrE16/zkrikOrBd14SiDiOQFpe11/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800')&quot;&gt; &lt;/div&gt;&lt;div class=&quot;og-text&quot;&gt;&lt;p class=&quot;og-title&quot;&gt;[ 백준 15486 ] 퇴사 2 (C++)&lt;/p&gt;&lt;p class=&quot;og-desc&quot;&gt;https://www.acmicpc.net/problem/15486 15486번: 퇴사 2 첫째 줄에 N (1 ≤ N ≤ 1,500,000)이 주어진다. 둘째 줄부터 N개의 줄에 Ti와 Pi가 공백으로 구분되어서 주어지며, 1일부터 N일까지 순서대로 주어진다. (1 ≤&lt;/p&gt;&lt;p class=&quot;og-host&quot;&gt;charles098.tistory.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;br&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩테스트/Daily Coding  (C, C++)</category>
      <author>해린</author>
      <guid isPermaLink="true">https://haelyn.tistory.com/269</guid>
      <comments>https://haelyn.tistory.com/269#entry269comment</comments>
      <pubDate>Fri, 30 Aug 2024 22:48:45 +0900</pubDate>
    </item>
  </channel>
</rss>