<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>기록창고</title>
    <link>https://myspace.tistory.com/</link>
    <description>이것저것 기록하는 곳</description>
    <language>ko</language>
    <pubDate>Mon, 13 Jul 2026 16:02:00 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>zerossin</managingEditor>
    <image>
      <title>기록창고</title>
      <url>https://tistory1.daumcdn.net/tistory/7355349/attach/72007454756c49daad59dc1a4c3964f3</url>
      <link>https://myspace.tistory.com</link>
    </image>
    <item>
      <title>[코드트리] 시뮬레이션 약점 극복 학습 후기</title>
      <link>https://myspace.tistory.com/4</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;개요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근&amp;nbsp;이것저것&amp;nbsp;일정이&amp;nbsp;겹치면서&amp;nbsp;정신없이&amp;nbsp;시간을&amp;nbsp;보냈다. &lt;br /&gt;&lt;br /&gt;원래는&amp;nbsp;청약챌린지&amp;nbsp;첫&amp;nbsp;주가&amp;nbsp;끝나자마자&amp;nbsp;바로&amp;nbsp;다음&amp;nbsp;학습을&amp;nbsp;진행하려고&amp;nbsp;했는데,&amp;nbsp;생각보다&amp;nbsp;바쁜&amp;nbsp;일이&amp;nbsp;많아서&amp;nbsp;결국&amp;nbsp;조금&amp;nbsp;늦게&amp;nbsp;레슨을&amp;nbsp;시작하게&amp;nbsp;되었다. &lt;br /&gt;&lt;br /&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;figure id=&quot;og_1781535178726&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;3년 만에 돌아온, 코드트리 청약 통장 챌린지 | 코드트리&quot; data-og-description=&quot;매주 학습 납입하고 7주 만기 채우면 코드트리 8월까지 무료. 매주 추첨권을 모아 맥북&amp;middot;에어팟&amp;middot;애플워치 응모까지. 신청 인원에 따라 조기마감될 수 있어요.&quot; data-og-host=&quot;www.codetree.ai&quot; data-og-source-url=&quot;https://www.codetree.ai/ko/no-free-lunch-2026/?ref=W3FE75](https://www.codetree.ai/ko/no-free-lunch-2026/?ref=W3FE75)&quot; data-og-url=&quot;https://www.codetree.ai/ko/no-free-lunch-2026/?ref=W3FE75%5D%28https%3A%2F%2Fwww.codetree.ai%2Fko%2Fno-free-lunch-2026%2F%3Fref%3DW3FE75%29&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/G9U5G/dJMb8PGEZSI/BnZfzeGF2DWTq1WOsSYDc0/img.png?width=3600&amp;amp;height=1890&amp;amp;face=0_0_3600_1890,https://scrap.kakaocdn.net/dn/cyWBfv/dJMb8XSeEJj/cB6Ffxo3LzZ9AhSB68WPmk/img.png?width=3600&amp;amp;height=1890&amp;amp;face=0_0_3600_1890&quot;&gt;&lt;a href=&quot;https://www.codetree.ai/ko/no-free-lunch-2026/?ref=W3FE75](https://www.codetree.ai/ko/no-free-lunch-2026/?ref=W3FE75)&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.codetree.ai/ko/no-free-lunch-2026/?ref=W3FE75](https://www.codetree.ai/ko/no-free-lunch-2026/?ref=W3FE75)&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/G9U5G/dJMb8PGEZSI/BnZfzeGF2DWTq1WOsSYDc0/img.png?width=3600&amp;amp;height=1890&amp;amp;face=0_0_3600_1890,https://scrap.kakaocdn.net/dn/cyWBfv/dJMb8XSeEJj/cB6Ffxo3LzZ9AhSB68WPmk/img.png?width=3600&amp;amp;height=1890&amp;amp;face=0_0_3600_1890');&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;3년 만에 돌아온, 코드트리 청약 통장 챌린지 | 코드트리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;매주 학습 납입하고 7주 만기 채우면 코드트리 8월까지 무료. 매주 추첨권을 모아 맥북&amp;middot;에어팟&amp;middot;애플워치 응모까지. 신청 인원에 따라 조기마감될 수 있어요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.codetree.ai&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷_15-6-2026_234733_www.codetree.ai.jpeg&quot; data-origin-width=&quot;937&quot; data-origin-height=&quot;822&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l4tb1/dJMcaip9quN/70O5qzy4xxhOSqaQJNBuV0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l4tb1/dJMcaip9quN/70O5qzy4xxhOSqaQJNBuV0/img.jpg&quot; data-alt=&quot;이렇게 챕터를 알려준다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l4tb1/dJMcaip9quN/70O5qzy4xxhOSqaQJNBuV0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl4tb1%2FdJMcaip9quN%2F70O5qzy4xxhOSqaQJNBuV0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;937&quot; height=&quot;822&quot; data-filename=&quot;스크린샷_15-6-2026_234733_www.codetree.ai.jpeg&quot; data-origin-width=&quot;937&quot; data-origin-height=&quot;822&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이렇게 챕터를 알려준다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;그래서&amp;nbsp;이번&amp;nbsp;주에는&amp;nbsp;코드트리가&amp;nbsp;추천해&amp;nbsp;준&amp;nbsp;약점&amp;nbsp;유형&amp;nbsp;중&amp;nbsp;하나인&amp;nbsp;시뮬레이션에서&amp;nbsp;날짜와&amp;nbsp;시간&amp;nbsp;계산(Date&amp;nbsp;&amp;amp;&amp;nbsp;Time)레슨을&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;h2 data-ke-size=&quot;size26&quot;&gt;학습 구조&lt;/h2&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-filename=&quot;스크린샷_15-6-2026_231942_www.codetree.ai.jpeg&quot; data-origin-width=&quot;612&quot; data-origin-height=&quot;365&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NJOkD/dJMcaaeCzVb/KTPKuK9sYMGENRvhLBdvPK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NJOkD/dJMcaaeCzVb/KTPKuK9sYMGENRvhLBdvPK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NJOkD/dJMcaaeCzVb/KTPKuK9sYMGENRvhLBdvPK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNJOkD%2FdJMcaaeCzVb%2FKTPKuK9sYMGENRvhLBdvPK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;612&quot; height=&quot;365&quot; data-filename=&quot;스크린샷_15-6-2026_231942_www.codetree.ai.jpeg&quot; data-origin-width=&quot;612&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;&lt;br /&gt;&lt;br /&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;br /&gt;- 연습 문제(챌린지)&lt;br /&gt;-&amp;nbsp;테스트&amp;nbsp;문제 &lt;br /&gt;&lt;br /&gt;순으로&amp;nbsp;난이도를&amp;nbsp;조금씩&amp;nbsp;높여간다. &lt;br /&gt;&lt;br /&gt;또 특이한 점은, 문제를 풀기 전에 잠깐 개념을 먼저 설명해 준다는 것이었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷_15-6-2026_235051_www.codetree.ai.jpeg&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;820&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KHCds/dJMcahEKg0z/1eKe6xKGnUEeKh3R3i3xlK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KHCds/dJMcahEKg0z/1eKe6xKGnUEeKh3R3i3xlK/img.jpg&quot; data-alt=&quot;이런 식이다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KHCds/dJMcahEKg0z/1eKe6xKGnUEeKh3R3i3xlK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKHCds%2FdJMcahEKg0z%2F1eKe6xKGnUEeKh3R3i3xlK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;784&quot; height=&quot;820&quot; data-filename=&quot;스크린샷_15-6-2026_235051_www.codetree.ai.jpeg&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;820&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이런 식이다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이번 챕터에서는 시간 계산을 단순 시뮬레이션으로 하지 않고 특정 시점을 분 단위 숫자로 변환해서 차이를 계산하는 방식을 먼저 설명해 줬다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;02:05에서 04:01까지의 시간을 계산할 때, 125분과&amp;nbsp;241분으로&amp;nbsp;변환한&amp;nbsp;뒤&amp;nbsp;차이만&amp;nbsp;구하면&amp;nbsp;된다는&amp;nbsp;식이다. &lt;br /&gt;&lt;br /&gt;사실 굉장히 당연한 이야기처럼 보였는데 막상 코딩테스트를 풀다 보면 문제에서 시키는 대로 구현부터 들어가는 경우가 많다. 그렇기에 &quot;먼저 계산으로 단순화할 수 있는지 생각해 보라&quot;는 메시지를 주는 느낌이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;첫 번째 문제&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이어서 문제풀이를 시작했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째 문제는 2011년 11월 11일 A시 B분에서 시작하여 C시 D분까지 몇 분이 걸리는지 계산하는 문제였다.&lt;/p&gt;
&lt;pre id=&quot;code_1781535106871&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;a, b, c, d = map(int, input().split())

first = a*60+b
second = c*60+d

print(second - first)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;개념 설명에서 배운 내용을 그대로 적용하면 되는 문제였다.&lt;br /&gt;시와&amp;nbsp;분을&amp;nbsp;모두&amp;nbsp;분&amp;nbsp;단위로&amp;nbsp;변환한&amp;nbsp;뒤&amp;nbsp;차이를&amp;nbsp;계산하면&amp;nbsp;끝. &lt;br /&gt;&lt;br /&gt;워밍업 문제답게 어렵지 않게 통과할 수 있었다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;두 번째 문제&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 2011년 m1월 d1일부터 m2월 d2일까지 며칠이 있는지 계산하는 문제였다. &lt;br /&gt;추가로 시작일도 포함해서 계산해야 한다는 조건이 있었다.&lt;/p&gt;
&lt;pre id=&quot;code_1781535304285&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;m1, d1, m2, d2 = map(int, input().split())

num_of_days = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

m = 0

for i in range(m1, m2):
    m += num_of_days[i]

print(m+(d2 - d1)+1)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;처음에는 날짜 계산이라고 해서 괜히 복잡하게 생각했는데 결국은 월 사이에 있는 날짜 수를 전부 더한 뒤 일(day)의 차이를 더해주면 되는 문제였다. 여기서 range를 이용해 월 사이의 날짜 수를 합산하는 방식으로 풀었다. &lt;br /&gt;&lt;br /&gt;하지만 정답은 맞았지만 제출 후에는 &quot;이게 가장 깔끔한 방법일까?&quot;라는 생각도 조금 들었다. 내 답안을 평가해주는 기능이 있었으면 어땠을까 했다.&lt;br /&gt;&lt;br /&gt;그래도&amp;nbsp;적어도&amp;nbsp;이전처럼&amp;nbsp;무작정&amp;nbsp;구현부터&amp;nbsp;들어가는&amp;nbsp;게&amp;nbsp;아니라&amp;nbsp;날짜를&amp;nbsp;숫자로&amp;nbsp;바라보려고&amp;nbsp;노력했다는&amp;nbsp;점은&amp;nbsp;긍정적이었다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;세번째 문제&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째 챌린지 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2011년 11월 11일 11시 11분부터 특정 날짜와 시간까지 몇 분이 지났는지를 계산하는 문제였다.&lt;/p&gt;
&lt;pre id=&quot;code_1781535359129&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;a, b, c = map(int, input().split())

start = 11*24*60 + 11*60 + 11
end = a*24*60 + b*60 + c

result = end-start

if result &amp;lt; 0:
    result = -1

print(result)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이번에도 핵심은 같았다.&lt;br /&gt;날짜와&amp;nbsp;시간을&amp;nbsp;전부&amp;nbsp;분으로&amp;nbsp;변환한&amp;nbsp;뒤&amp;nbsp;차이를&amp;nbsp;계산한다. &lt;br /&gt;&lt;br /&gt;다만&amp;nbsp;처음에는&amp;nbsp;-1&amp;nbsp;처리&amp;nbsp;조건을&amp;nbsp;놓치고&amp;nbsp;계속&amp;nbsp;제출했다. &lt;br /&gt;&lt;br /&gt;그러다 제출 결과 창에서 제공되는 테스트 케이스를 보다가 뒤늦게 발견했다.&lt;br /&gt;문제를&amp;nbsp;대충&amp;nbsp;읽는&amp;nbsp;습관이&amp;nbsp;아직&amp;nbsp;남아&amp;nbsp;있다는&amp;nbsp;걸&amp;nbsp;다시&amp;nbsp;한&amp;nbsp;번&amp;nbsp;깨달은&amp;nbsp;순간이었다. &lt;br /&gt;&lt;br /&gt;한편, 쓰면서 느낀 것인데, 제출 결과 창의 테스트 케이스를 바로 내 코드 창으로 가져올 수 있는 기능은 꽤 편리했다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;네번째 문제&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두번째 챌린지 문제로, 난이도는 Hard로 적혀있었다.&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_1781535684834&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;m1, d1, m2, d2 = map(int, input().split())

yoil = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']

months_day = [0, 31, 28, 31, 30, 31, 30 ,31, 31, 30, 31, 30, 31]

m = 0
chai = 0
yoilindex = 0

if m1*30+d1 &amp;lt; m2*30+d2:
    for i in range(m1, m2):
        m += months_day[i]

    chai = m + (d2-d1)
    yoilindex = chai % 7
else:
    for i in range(m2, m1):
        m += months_day[i]
    
    chai = m + (d1-d2)
    yoilindex = -(chai % 7)

print(yoil[yoilindex])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이번 레슨에서 가장 오래 고민했던 문제다. &lt;br /&gt;하지만 요일은 결국 7일마다 반복된다는 점에 주목했다. &lt;br /&gt;&lt;br /&gt;그래서 두 날짜 사이가 며칠 차이인지 계산한 뒤,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'요일 인덱스 = 날짜 차이 % 7'&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이라는 아이디어를 이용해 해결했다. &lt;br /&gt;&lt;br /&gt;지금&amp;nbsp;다시&amp;nbsp;보면&amp;nbsp;코드가&amp;nbsp;깔끔한&amp;nbsp;편은&amp;nbsp;아니다. &lt;br /&gt;앞 날짜와 뒷 날짜를 따로 처리하다 보니 분기문도 많고 중복 코드도 생겼다. &lt;br /&gt;&lt;br /&gt;하지만&amp;nbsp;적어도&amp;nbsp;&quot;요일은&amp;nbsp;7일&amp;nbsp;주기&quot;라는&amp;nbsp;규칙을&amp;nbsp;먼저&amp;nbsp;발견하고&amp;nbsp;접근했다는&amp;nbsp;점에서&amp;nbsp;이전보다&amp;nbsp;사고&amp;nbsp;과정이&amp;nbsp;조금&amp;nbsp;발전한&amp;nbsp;것&amp;nbsp;같았다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;다섯 번째 문제&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 레슨의 마지막 문제로, 테스트 문제다. 앞선 문제부터 지금까지까지 학습한 것들과 경험을 바탕으로 도전해 보는 문제인듯했다. 이렇게 보니 학습 구조가 잘 짜여졌다는 생각이 들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제는 특정 기간 동안 원하는 요일이 몇 번 등장하는지 구하는 것이였다.&lt;/p&gt;
&lt;pre id=&quot;code_1781535600023&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;m1, d1, m2, d2 = map(int, input().split())
A = input()

yoil = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']

months_day = [0, 31, 29, 31, 30, 31, 30 ,31, 31, 30, 31, 30, 31]

m = 0

for i in range(m1, m2):
    m += months_day[i]

chai = m + (d2-d1)
yoilsu = chai // 7
yoilsu_chuga = chai % 7
if yoilsu_chuga &amp;gt;= yoil.index(A):
    yoilsu += 1

print(yoilsu)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;처음&amp;nbsp;문제를&amp;nbsp;봤을&amp;nbsp;때는&amp;nbsp;꽤&amp;nbsp;복잡해&amp;nbsp;보였다. &lt;br /&gt;하지만 앞 문제에서 사용했던 요일의 주기성을 그대로 응용할 수 있었다. &lt;br /&gt;&lt;br /&gt;요일은 7일마다 반복되기 때문에 먼저 몇 주가 지났는지를 계산하고, 남은 날짜에서 추가로 등장하는 횟수를 계산하는 방식으로 접근했다. &lt;br /&gt;&lt;br /&gt;앞&amp;nbsp;문제들을&amp;nbsp;풀며&amp;nbsp;익힌&amp;nbsp;개념이&amp;nbsp;자연스럽게&amp;nbsp;이어지는&amp;nbsp;느낌이&amp;nbsp;들었다. &lt;br /&gt;&lt;br /&gt;그래서&amp;nbsp;테스트&amp;nbsp;문제임에도&amp;nbsp;생각보다&amp;nbsp;수월하게&amp;nbsp;통과할&amp;nbsp;수&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;h2 data-ke-size=&quot;size26&quot;&gt;느낀 점&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번&amp;nbsp;레슨은&amp;nbsp;솔직히&amp;nbsp;말해서&amp;nbsp;DP나&amp;nbsp;최단&amp;nbsp;경로처럼&amp;nbsp;어려운&amp;nbsp;알고리즘을&amp;nbsp;배우는&amp;nbsp;시간은&amp;nbsp;아니었다. &lt;br /&gt;하지만 코딩테스트에서 자주 필요한 사고방식을 연습할 수 있었다. &lt;br /&gt;&lt;br /&gt;특히 코드트리의 기본 문제 &amp;rarr; 연습 문제 &amp;rarr; 테스트 문제 구조가 꽤 마음에 들었다. &lt;br /&gt;&lt;br /&gt;그저 문제를 많이 푸는 것이 아닌,&lt;br /&gt;먼저 개념을 이해하고 그 개념을 여러 문제에 적용하면서,&lt;br /&gt;마지막에는 응용 문제까지 연결해 보는 흐름이 자연스러웠다. &lt;br /&gt;&lt;br /&gt;지난&amp;nbsp;갭체크&amp;nbsp;때의&amp;nbsp;나는&amp;nbsp;문제를&amp;nbsp;보자마자&amp;nbsp;구현부터&amp;nbsp;시작하는&amp;nbsp;경우가&amp;nbsp;많았다. &lt;br /&gt;&lt;br /&gt;이번&amp;nbsp;레슨을&amp;nbsp;하면서는&amp;nbsp;&quot;이걸&amp;nbsp;숫자로&amp;nbsp;바꾸면&amp;nbsp;더&amp;nbsp;쉬워지지&amp;nbsp;않을까?&quot;,&amp;nbsp;&quot;반복되는&amp;nbsp;규칙은&amp;nbsp;없을까?&quot;&amp;nbsp;같은&amp;nbsp;생각을&amp;nbsp;조금씩&amp;nbsp;하게&amp;nbsp;되었다. &lt;br /&gt;&lt;br /&gt;아직&amp;nbsp;갈&amp;nbsp;길은&amp;nbsp;멀지만,&amp;nbsp;적어도&amp;nbsp;이전보다는&amp;nbsp;문제를&amp;nbsp;바라보는&amp;nbsp;방식이&amp;nbsp;조금은&amp;nbsp;달라진&amp;nbsp;것&amp;nbsp;같다. &lt;br /&gt;&lt;br /&gt;다음 주에도 코드트리가 추천해 준 약점 유형을 따라가면서 바닥난 코딩테스트 체력을 조금씩 끌어올려 볼 생각이다.&lt;/p&gt;</description>
      <category>개발일지/코드트리</category>
      <category>코드트리</category>
      <category>코딩테스트</category>
      <category>코테공부</category>
      <author>zerossin</author>
      <guid isPermaLink="true">https://myspace.tistory.com/4</guid>
      <comments>https://myspace.tistory.com/4#entry4comment</comments>
      <pubDate>Mon, 15 Jun 2026 23:57:40 +0900</pubDate>
    </item>
    <item>
      <title>깃허브에 라이센스(License) 설정하기</title>
      <link>https://myspace.tistory.com/2</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;티스토리 썸네일_복사본 (1)-001.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkj19O/btsJScvOYEo/LEvtBKjXkKf5gckZffiJBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkj19O/btsJScvOYEo/LEvtBKjXkKf5gckZffiJBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkj19O/btsJScvOYEo/LEvtBKjXkKf5gckZffiJBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbkj19O%2FbtsJScvOYEo%2FLEvtBKjXkKf5gckZffiJBk%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;400&quot; data-filename=&quot;티스토리 썸네일_복사본 (1)-001.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;GitHub에 프로젝트를 올릴 때&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;라이센스(License)&lt;/b&gt;를 추가하는 것은 중요합니다. 라이센스는 다른 사람들에게 내 코드를 어떻게 사용할 수 있는지 규정해주기 때문입니다. 이번 글에서는 GitHub 저장소에 라이센스를 추가하는 방법을 간단하게 설명하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;목차&lt;/span&gt;&lt;/h2&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: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;라이센스란 무엇인가?&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;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;GitHub에서 라이센스 추가하기&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;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;마무리&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 라이센스란 무엇인가?&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: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&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;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;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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;기여 규칙 설정&lt;/b&gt;: 프로젝트에 기여하는 방법과 조건을 명시합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 적합한 라이센스 선택하기&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: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;MIT License&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;&quot;&gt;&lt;b&gt;Apache License 2.0&lt;/b&gt;: 특허 사용권을 명시적으로 포함하며, MIT보다 약간 더 복잡합니다.&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;GNU GPL v3&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;&quot;&gt;&lt;b&gt;BSD License&lt;/b&gt;: MIT와 유사하지만 약간의 차이가 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; &amp;nbsp;참고:&amp;nbsp;&lt;a href=&quot;https://choosealicense.com/&quot;&gt;Choose a License&lt;/a&gt;&amp;nbsp;사이트를 방문하면 프로젝트에 적합한 라이센스를 선택하는 데 도움이 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. GitHub에서 라이센스 추가하기&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: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;GitHub에서는 저장소 생성 시 라이센스를 쉽게 추가할 수 있습니다. 이미 생성된 저장소에 라이센스를 추가하는 방법도 간단합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3.1. 저장소 생성 시 라이센스 추가&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: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;GitHub에 로그인하고 새로운 저장소(new repository)를 생성합니다.&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;b&gt;&quot;Initialize this repository with a README&quot;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&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;&quot;&gt;&lt;b&gt;&quot;Add a license&quot;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&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;&quot;&gt;&lt;b&gt;&quot;Create repository&quot;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;버튼을 클릭하여 저장소를 생성합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;643&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3wjFC/btsJTpAFRVL/OLOxnmbg2A5lpr9BJIgqdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3wjFC/btsJTpAFRVL/OLOxnmbg2A5lpr9BJIgqdK/img.png&quot; data-alt=&quot;라이센스를 선택할 수 있는 모습.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3wjFC/btsJTpAFRVL/OLOxnmbg2A5lpr9BJIgqdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3wjFC%2FbtsJTpAFRVL%2FOLOxnmbg2A5lpr9BJIgqdK%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;349&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;643&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;라이센스를 선택할 수 있는 모습.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3.2. 기존 저장소에 라이센스 추가&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: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;GitHub에서 해당 저장소로 이동합니다.&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;&quot;Add file&quot;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;버튼을 클릭하고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&quot;Create new file&quot;&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;&quot;&gt;파일 이름을&lt;span&gt;&amp;nbsp;&lt;/span&gt;LICENSE로 입력합니다.&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;&quot;Choose a license template&quot;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&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;&quot;&gt;필요에 따라 라이센스 내용을 수정한 후,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&quot;Commit new file&quot;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;버튼을 클릭하여 저장소에 추가합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;237&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYacbN/btsJRffHjy7/dGDVINpY1NdOpv3Aq1qndk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYacbN/btsJRffHjy7/dGDVINpY1NdOpv3Aq1qndk/img.png&quot; data-alt=&quot;LICENSE 입력 시 자동으로 버튼이 생성되는 모습.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYacbN/btsJRffHjy7/dGDVINpY1NdOpv3Aq1qndk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYacbN%2FbtsJRffHjy7%2FdGDVINpY1NdOpv3Aq1qndk%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;412&quot; height=&quot;237&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;237&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;LICENSE 입력 시 자동으로 버튼이 생성되는 모습.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 확인하기&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: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;GitHub 저장소의 루트 디렉토리에&lt;span&gt;&amp;nbsp;&lt;/span&gt;LICENSE&lt;span&gt;&amp;nbsp;&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;&quot;&gt;LICENSE 파일을 클릭하여 라이센스 내용이 올바르게 표시되는지 확인합니다.&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;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;330&quot; data-origin-height=&quot;140&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zCZIp/btsJSvBDx9V/2emcRqJXiTLORrGZGAjQX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zCZIp/btsJSvBDx9V/2emcRqJXiTLORrGZGAjQX1/img.png&quot; data-alt=&quot;MIT 라이센스가 적용된 모습.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zCZIp/btsJSvBDx9V/2emcRqJXiTLORrGZGAjQX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzCZIp%2FbtsJSvBDx9V%2F2emcRqJXiTLORrGZGAjQX1%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;330&quot; height=&quot;140&quot; data-origin-width=&quot;330&quot; data-origin-height=&quot;140&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;MIT 라이센스가 적용된 모습.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;433&quot; data-origin-height=&quot;210&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDU26y/btsJSlzevaK/JaENqxEROxvCbVhh5ACvE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDU26y/btsJSlzevaK/JaENqxEROxvCbVhh5ACvE1/img.png&quot; data-alt=&quot;리드미 파일 옆에 라이센스 메뉴가 생성된 모습.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDU26y/btsJSlzevaK/JaENqxEROxvCbVhh5ACvE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDU26y%2FbtsJSlzevaK%2FJaENqxEROxvCbVhh5ACvE1%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;210&quot; data-origin-width=&quot;433&quot; data-origin-height=&quot;210&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;리드미 파일 옆에 라이센스 메뉴가 생성된 모습.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;5. 마무리&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: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;GitHub 레포지토리에 라이센스를 추가하는 것은 프로젝트의 법적 보호와 사용자 권한 명시를 위해 필수적입니다. 이번 글에서는 라이센스의 중요성부터 적합한 라이센스 선택, GitHub에 라이센스를 추가하는 방법까지 단계별로 살펴보았습니다. 라이센스는 오픈 소스 생태계를 건강하게 유지시키는 역할을 하므로 꼭 해보시길 바랍니다. 감사합니다!&lt;/span&gt;&lt;/p&gt;</description>
      <category>지식창고/Git</category>
      <category>깃</category>
      <category>깃허브</category>
      <category>라이센스</category>
      <author>zerossin</author>
      <guid isPermaLink="true">https://myspace.tistory.com/2</guid>
      <comments>https://myspace.tistory.com/2#entry2comment</comments>
      <pubDate>Wed, 2 Oct 2024 02:41:06 +0900</pubDate>
    </item>
    <item>
      <title>Git 기록에서 특정 파일을 완벽히 삭제하는 방법: git filter-branch</title>
      <link>https://myspace.tistory.com/1</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;티스토리 썸네일-깃기록삭제.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lrud4/btsJTfLHflq/TK0TREQcpo3z6i3d6kevcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lrud4/btsJTfLHflq/TK0TREQcpo3z6i3d6kevcK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lrud4/btsJTfLHflq/TK0TREQcpo3z6i3d6kevcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flrud4%2FbtsJTfLHflq%2FTK0TREQcpo3z6i3d6kevcK%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;400&quot; data-filename=&quot;티스토리 썸네일-깃기록삭제.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Git/Github(깃허브)를 사용하다 보면 민감한 정보나 대용량 파일을 실수로 커밋하는 경우가 있습니다. 단순히 파일을 삭제하는 것만으로는 충분하지 않은데, 그 이유는 해당 파일의 기록이 여전히 Git 히스토리에 남아 있기 때문입니다. 이를 위해 이 글에서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;git filter-branch&lt;/b&gt;를 사용하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;특정 파일의 모든 커밋 기록을 Git 저장소에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;완전히 제거&lt;/span&gt;하는 방법&lt;/b&gt;을 단계별로 설명해보려고 합니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;⚠️ 주의: git filter-branch는 강력한 도구로, Git 기록을 영구적으로 변경합니다. 작업 전에 반드시 저장소를 백업하고 신중하게 진행하세요.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;목차&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;왜 git filter-branch를 사용해야 할까?&lt;/li&gt;
&lt;li&gt;git filter-branch 사용하기&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;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style1&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1. 왜 git filter-branch를 사용해야 할까?&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;git filter-branch는 Git 기록을 재작성하여 특정 파일이나 폴더를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;완전히 제거&lt;/b&gt;하는 데 유용한 명령어입니다. 이 명령어를 사용하면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;특정 파일과 관련된 모든 커밋을 수정&lt;/b&gt;하여 Git 기록에서 파일을 완전히 삭제할 수 있습니다.&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;/li&gt;
&lt;li&gt;&lt;b&gt;완전한 삭제&lt;/b&gt;: 원격 저장소에도 수정된 기록을 반영하여 GitHub나 다른 플랫폼에서도 파일을 다시 확인할 수 없게 만듭니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; &amp;nbsp;참고: git filter-branch는 복잡하고 시간이 많이 소요될 수 있으며, 최신 프로젝트에서는 git filter-repo나 BFG Repo-Cleaner 같은 도구가 더 빠르고 효율적일 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2. git filter-branch 사용하기&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;특정 파일을 Git 기록에서 완전히 제거하기 위해 git filter-branch 명령어를 사용합니다. 아래는 test.py 파일을 모든 브랜치에서 제거하는 예제입니다.&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;특정 파일 기록 삭제 명령어&lt;/h4&gt;
&lt;pre style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch test.py' --prune-empty --tag-name-filter cat -- --all&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;b&gt;--force:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;기존의 필터링된 브랜치를 덮어씁니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;--index-filter 'git rm --cached --ignore-unmatch test.py'&lt;/b&gt;: 인덱스에서 파일을 삭제하고, 파일이 없을 경우에도 무시합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;--prune-empty&lt;/b&gt;: 파일 삭제 후 발생하는 빈 커밋을 자동으로 제거합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;--tag-name-filter cat&lt;/b&gt;: 태그를 수정하지 않습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;-- --all&lt;/b&gt;: 이 작업이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;모든 브랜치&lt;/b&gt;에 적용되도록 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;캐시된 파일도 함께 제거&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;필요 시 Git에서 캐시된 파일도 삭제합니다.&lt;/p&gt;
&lt;pre style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;git rm --cached test.py&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&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;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;강제 푸시&lt;/b&gt;를 사용합니다.&lt;/p&gt;
&lt;pre style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot;&gt;&lt;code&gt;git push --force --all&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;b&gt;--force&lt;/b&gt;: 원격 저장소의 기존 기록을 덮어씁니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;--all&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;모든 브랜치&lt;/b&gt;에서 수정된 Git 기록을 원격 저장소에 강제로 푸시합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;⚠️&amp;nbsp;주의: 강제 푸시는 원격 저장소의 기록을 변경하므로, 협업 중인 다른 사용자에게 영향을 줄 수 있습니다. 반드시 협업자들과 사전에 상의하세요.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;4. 주의사항&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&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;: Git 기록을 수정하는 작업은 되돌리기 어렵기 때문에 작업 전에 저장소를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;백업&lt;/b&gt;하는 것이 중요합니다.&lt;/li&gt;
&lt;li&gt;git clone --mirror &lt;a href=&quot;https://your-repo-url.git&quot;&gt;https://your-repo-url.git&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;협업자 주의&lt;/b&gt;: 이 작업은 Git 기록을 수정하기 때문에, 협업자들은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;로컬 저장소를 다시 동기화&lt;/b&gt;해야 합니다. 작업 후 협업자들에게 알려주세요.&lt;/li&gt;
&lt;li&gt;git fetch --all git reset --hard origin/main&lt;/li&gt;
&lt;li&gt;&lt;b&gt;브라우저 캐시 확인&lt;/b&gt;: GitHub에서 파일이 여전히 보일 경우,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;브라우저 캐시 문제&lt;/b&gt;일 수 있습니다. 브라우저 캐시를 지우거나 시크릿 모드에서 확인해 보세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;5. 마무리&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 git filter-branch 명령어를 살펴보았습니다. git filter-branch는 Git 기록에서 파일을 완전히 제거하는 데 유용하게 사용할 수 있지만, 아주 위험한 도구이기 때문에 혹시 모를 불상사를 막기 위해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;작업 전에 반드시 백업을 하는게 좋습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;git filter-repo나 BFG Repo-Cleaner 같은 선택지도 있습니다. 다만 제가 사용했을 때 기록의 완전한 삭제가 안 이루어져 git filter-branch로 글을 작성하게 되었습니다. 감사합니다!&lt;/p&gt;</description>
      <category>지식창고/Git</category>
      <category>Git</category>
      <category>깃</category>
      <category>깃허브</category>
      <author>zerossin</author>
      <guid isPermaLink="true">https://myspace.tistory.com/1</guid>
      <comments>https://myspace.tistory.com/1#entry1comment</comments>
      <pubDate>Wed, 2 Oct 2024 02:38:28 +0900</pubDate>
    </item>
  </channel>
</rss>