<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>카방찐 님의 코딩 블로그</title>
    <link>https://record-to-knowledge.tistory.com/</link>
    <description>카이스트 방구석 찐따의 코딩 공부</description>
    <language>ko</language>
    <pubDate>Tue, 14 Apr 2026 01:34:49 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>카방찐</managingEditor>
    <image>
      <title>카방찐 님의 코딩 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/7317388/attach/0bdd7a01a6e34ea6a7e2226e0bd186f8</url>
      <link>https://record-to-knowledge.tistory.com</link>
    </image>
    <item>
      <title>[백준 / 파이썬] 백준 15649번 문제 풀이: N과 M (1)</title>
      <link>https://record-to-knowledge.tistory.com/25</link>
      <description>&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;문제&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.&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 style=&quot;color: #555555;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1부터 N까지&amp;nbsp;자연수 중에서 중복 없이 M개를 고른 수열&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;입력&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;첫째 줄에 자연수 N과 M이 주어진다. (1 &amp;le; M &amp;le; N &amp;le; 8)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;출력&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;수열은 사전 순으로 증가하는 순서로 출력해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제 해결&lt;/b&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;전체 코드&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1738132524034&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import sys

N,M=list(map(int,sys.stdin.readline().split()))

def permutation(N,M,sequence,visited):
    
    if len(sequence)==M:
        print(*sequence)
        
    for i in range(N):
        if visited[i]==False:
            sequence.append(i+1)
            visited[i]=True
            permutation(N,M,sequence,visited)
            sequence.pop()
            visited[i]=False

visited=[False]*(N)
sequence=[]

permutation(N,M,sequence,visited)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드는 &lt;b&gt;N과 M&lt;/b&gt;을 입력받고, &lt;b&gt;1부터 N까지의 숫자&lt;/b&gt; 중 &lt;b&gt;M개&lt;/b&gt;를 선택하여 만들 수 있는 &lt;b&gt;모든 순열을 출력&lt;/b&gt;하는 &lt;b&gt;백트래킹&lt;/b&gt;(Backtracking) 알고리즘이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;코드 해설&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1738132631151&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
N, M = list(map(int, sys.stdin.readline().split()))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;sys.stdin.readline()을 사용하여 한 줄의 입력을 받는다.&lt;/li&gt;
&lt;li&gt;입력값을 공백 기준으로 나눈 뒤, int형으로 변환하여 N과 M에 저장한다.&lt;/li&gt;
&lt;li&gt;N: 사용할 숫자의 개수 (1부터 N까지)&lt;/li&gt;
&lt;li&gt;M: 순열에서 선택할 개수&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;-순열을 만드는 재귀 함수 (permutation)&lt;/h3&gt;
&lt;pre id=&quot;code_1738132764046&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def permutation(N, M, sequence, visited):&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;N: 사용할 숫자의 개수 (1부터 N까지)&lt;/li&gt;
&lt;li&gt;M: 뽑아야 할 숫자의 개수&lt;/li&gt;
&lt;li&gt;sequence: 현재까지 선택한 숫자 리스트&lt;/li&gt;
&lt;li&gt;visited: 해당 숫자를 사용했는지 여부를 나타내는 리스트&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;기저 사례 (종료 조건)&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1738133273715&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if len(sequence) == M:
    print(*sequence)
    return&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;sequence의 길이가 M과 같아지면, 즉 M개의 숫자를 모두 선택하면 출력하고 종료.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;순열 생성 (백트래킹)&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1738133295267&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for i in range(N):
    if visited[i] == False:
        sequence.append(i+1)
        visited[i] = True
        permutation(N, M, sequence, visited)
        sequence.pop()
        visited[i] = False&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;for i in range(N): 1부터 N까지의 숫자를 차례대로 확인&lt;/li&gt;
&lt;li&gt;if visited[i] == False: 아직 사용하지 않은 숫자라면,
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;sequence.append(i+1): 숫자를 추가&lt;/li&gt;
&lt;li&gt;visited[i] = True: 해당 숫자를 사용했다고 표시&lt;/li&gt;
&lt;li&gt;&lt;b&gt;재귀 호출:&lt;/b&gt; permutation(N, M, sequence, visited)을 호출하여 다음 숫자를 선택&lt;/li&gt;
&lt;li&gt;sequence.pop(): 재귀 호출이 끝난 후 숫자를 제거 (백트래킹)&lt;/li&gt;
&lt;li&gt;visited[i] = False: 방문 표시를 원래대로 복구&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;실행 흐름 (예제)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;예제 입력&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1738133435115&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;3 2&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;과정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1부터 3까지의 숫자 중 2개를 선택한 모든 순열을 구해야 한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;초기 상태: N = 3, M = 2, sequence = [], visited = [False, False, False]&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1️⃣ 첫 번째 숫자 선택 (1 선택)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;sequence = [1]&lt;/li&gt;
&lt;li&gt;visited = [True, False, False]&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2️⃣ 두 번째 숫자 선택 (2 선택)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;sequence = [1, 2]&lt;/li&gt;
&lt;li&gt;visited = [True, True, False]&lt;/li&gt;
&lt;li&gt;길이가 M(=2)이므로 출력 &amp;rarr; &lt;b&gt;&quot;1 2&quot;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  백트래킹: 2 제거 &amp;rarr; sequence = [1], visited = [True, False, False]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2️⃣ 두 번째 숫자 선택 (3 선택)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;sequence = [1, 3]&lt;/li&gt;
&lt;li&gt;visited = [True, False, True]&lt;/li&gt;
&lt;li&gt;길이가 M(=2)이므로 출력 &amp;rarr; &lt;b&gt;&quot;1 3&quot;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  백트래킹: 3 제거 &amp;rarr; sequence = [1], visited = [True, False, False]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  백트래킹: 1 제거 &amp;rarr; sequence = [], visited = [False, False, False]&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1️⃣ 첫 번째 숫자 선택 (2 선택)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;sequence = [2]&lt;/li&gt;
&lt;li&gt;visited = [False, True, False]&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2️⃣ 두 번째 숫자 선택 (1 선택)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;sequence = [2, 1]&lt;/li&gt;
&lt;li&gt;visited = [True, True, False]&lt;/li&gt;
&lt;li&gt;길이가 M(=2)이므로 출력 &amp;rarr; &lt;b&gt;&quot;2 1&quot;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  백트래킹: 1 제거 &amp;rarr; sequence = [2], visited = [False, True, False]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2️⃣ 두 번째 숫자 선택 (3 선택)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;sequence = [2, 3]&lt;/li&gt;
&lt;li&gt;visited = [False, True, True]&lt;/li&gt;
&lt;li&gt;길이가 M(=2)이므로 출력 &amp;rarr; &lt;b&gt;&quot;2 3&quot;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  백트래킹: 3 제거 &amp;rarr; sequence = [2], visited = [False, True, False]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  백트래킹: 2 제거 &amp;rarr; sequence = [], visited = [False, False, False]&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1️⃣ 첫 번째 숫자 선택 (3 선택)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;sequence = [3]&lt;/li&gt;
&lt;li&gt;visited = [False, False, True]&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2️⃣ 두 번째 숫자 선택 (1 선택)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;sequence = [3, 1]&lt;/li&gt;
&lt;li&gt;visited = [True, False, True]&lt;/li&gt;
&lt;li&gt;길이가 M(=2)이므로 출력 &amp;rarr; &lt;b&gt;&quot;3 1&quot;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  백트래킹: 1 제거 &amp;rarr; sequence = [3], visited = [False, False, True]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2️⃣ 두 번째 숫자 선택 (2 선택)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;sequence = [3, 2]&lt;/li&gt;
&lt;li&gt;visited = [False, True, True]&lt;/li&gt;
&lt;li&gt;길이가 M(=2)이므로 출력 &amp;rarr; &lt;b&gt;&quot;3 2&quot;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  백트래킹: 2 제거 &amp;rarr; sequence = [3], visited = [False, False, True]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  백트래킹: 3 제거 &amp;rarr; sequence = [], visited = [False, False, False]&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  최종 출력 결과&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1738133619438&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1 2
1 3
2 1
2 3
3 1
3 2&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;시간 복잡도&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;N! / (N-M)! 개의 순열을 만들므로, 최악의 경우 O(N!)이다.&lt;/li&gt;
&lt;li&gt;N이 커질수록 시간이 급격히 증가하므로, 효율적으로 백트래킹을 적용해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;라이브러리를 이용해 구현해 보자! (feat. &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;itertools.permutation())&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;직접 구현한 permutation을 python에서 제공하는 itertools.permutation()으로 똑같이 구현할 수 있다.&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;itertools.permutations()은 &lt;b&gt;Python의 C로 구현된 내부 라이브러리 함수&lt;/b&gt;이므로, 우리가 Python에서 직접 재귀 호출을 사용하는 것보다 훨씬 빠르게 동작한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;itertools.permutations()은 내부적으로 &lt;b&gt;C 언어 최적화&lt;/b&gt;가 적용되어 있어 Python 인터프리터를 통한 함수 호출과 메모리 관리 비용을 줄인다.&lt;/li&gt;
&lt;li&gt;반면, 직접 구현한 백트래킹 방식은 &lt;b&gt;Python의 재귀 호출 비용과 리스트 연산 비용&lt;/b&gt;이 포함되어 상대적으로 느리다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로 itertools.permutations()이 더 빠르게 동작하는 가장 큰 이유는 &lt;b&gt;C로 구현되어 있어서 함수 호출 오버헤드가 적기 때문이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1738134450000&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
import itertools

# N과 M 입력 받기
N, M = map(int, sys.stdin.readline().split())

# itertools.permutations을 이용하여 모든 순열 생성 후 출력
for perm in itertools.permutations(range(1, N+1), M):
    print(*perm)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>백준 문제 풀이</category>
      <category>15649</category>
      <category>Backtracking</category>
      <category>itertools</category>
      <category>permutation</category>
      <category>Python</category>
      <category>백준</category>
      <category>백트래킹</category>
      <category>순열</category>
      <category>재귀</category>
      <category>파이썬</category>
      <author>카방찐</author>
      <guid isPermaLink="true">https://record-to-knowledge.tistory.com/25</guid>
      <comments>https://record-to-knowledge.tistory.com/25#entry25comment</comments>
      <pubDate>Wed, 29 Jan 2025 16:15:10 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬 / python] 클래스 메서드(Class Method)와 스태틱 메서드(Static Method)</title>
      <link>https://record-to-knowledge.tistory.com/24</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;클래스 메서드와 스태틱 메서드는 언제 어떻게 활용하는 것일까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음의 예시를 보며 이해해 보자&lt;/p&gt;
&lt;pre id=&quot;code_1737640642863&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Car:
    # 클래스 속성(클래스 변수)
    total_cars = 0

    def __init__(self, brand, model, year):
        # 인스턴스 속성(인스턴스마다 별도로 존재)
        self.brand = brand
        self.model = model
        self.year = year
        # 인스턴스를 만들 때마다 클래스 속성을 변경(전체 생산된 차량 수)
        Car.total_cars += 1

    def get_car_info(self):
        &quot;&quot;&quot;
        인스턴스 메서드 예시.
        첫 번째 인자로 self를 받으며,
        인스턴스 속성에 직접 접근할 수 있다.
        &quot;&quot;&quot;
        return f&quot;{self.brand} {self.model} ({self.year}년식)&quot;

    @classmethod
    def get_total_cars(cls):
        &quot;&quot;&quot;
        클래스 메서드 예시.
        첫 번째 인자로 cls를 받으며,
        클래스 속성이나 다른 클래스 메서드에 접근할 수 있다.
        &quot;&quot;&quot;
        return cls.total_cars

    @classmethod
    def from_string(cls, car_string):
        &quot;&quot;&quot;
        클래스 메서드 예시.
        문자열을 받아서 brand, model, year 정보를 파싱한 뒤
        cls(즉 Car 클래스)의 인스턴스를 생성해 반환한다.
        &quot;&quot;&quot;
        brand, model, year = car_string.split(',')
        return cls(brand.strip(), model.strip(), int(year.strip()))

    @staticmethod
    def calculate_age(year):
        &quot;&quot;&quot;
        스태틱 메서드 예시.
        인자를 받아서 단순 계산을 수행한다.
        첫 번째 인자로 self나 cls를 받지 않으므로
        클래스 속성이나 인스턴스 속성에 직접 접근할 수 없다.
        &quot;&quot;&quot;
        import datetime
        current_year = datetime.datetime.now().year
        return current_year - year&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1737640663277&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if __name__ == &quot;__main__&quot;:
    # 인스턴스 생성
    car1 = Car(&quot;Toyota&quot;, &quot;Camry&quot;, 2015)
    car2 = Car(&quot;Hyundai&quot;, &quot;Sonata&quot;, 2020)

    # (1) 인스턴스 메서드 사용 예시
    print(car1.get_car_info())  # &quot;Toyota Camry (2015년식)&quot; 출력
    print(car2.get_car_info())  # &quot;Hyundai Sonata (2020년식)&quot; 출력

    # (2) 클래스 메서드 사용 예시
    print(Car.get_total_cars())  # 현재까지 생성된 Car 인스턴스 수(2) 출력

    # 클래스 메서드를 통한 인스턴스 생성 예시
    car3 = Car.from_string(&quot;Kia, K5, 2022&quot;)
    print(car3.get_car_info())  # &quot;Kia K5 (2022년식)&quot; 출력
    print(Car.get_total_cars())  # 새 인스턴스가 생성되어 3 출력

    # (3) 스태틱 메서드 사용 예시
    age_of_car1 = Car.calculate_age(car1.year)
    print(f&quot;car1의 현재 연식: {age_of_car1}년&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;클래스 메서드 (Class Method)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;첫 번째 인자로 cls를 받는다.&lt;/li&gt;
&lt;li&gt;클래스 속성(cls.total_cars)에 접근하거나 수정할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;새로운 인스턴스를 생성해 반환&lt;/span&gt;하거나&lt;/b&gt;, 클래스 수준에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;공통으로 관리되는 데이터를 활용(인스턴스 수 관리 등)&lt;/b&gt;&lt;/span&gt;할 때 유용하다.&lt;/li&gt;
&lt;li&gt;예시: 문자열이나 딕셔너리 같은 특별한 형태의 데이터를 받아 인스턴스를 생성하는 팩토리(factory) 메서드 역할(ex. from_string method)&lt;/li&gt;
&lt;li&gt;기존에&amp;nbsp; Car instance를 생성할 때 year에 int가 들어가게 설계되었지만 from_string&amp;nbsp; class method를 통해 year에 string이 들어와도 Car instance가 생성된다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;스태틱 메서드 (Static Method)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;첫 번째 인자로 self나 cls를 받지 않는다.&lt;/li&gt;
&lt;li&gt;클래스나 인스턴스 속성에 직접 접근할 수 없다.&lt;/li&gt;
&lt;li&gt;로직 자체는 일반 함수와 다를 바 없지만, 해당 함수가 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;클래스와 밀접한 관련&lt;/b&gt;&lt;/span&gt;이 있거나&lt;br /&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;&quot;논리적으로&quot; 클래스 내부에 두는 것이 더 이해하기 좋을 때&lt;/b&gt; &lt;/span&gt;사용한다.&lt;/li&gt;
&lt;li&gt;예시: 단순 계산, 포매팅, 검증 로직 등에서 활용.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 메서드를 적절히 구분해 두면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인스턴스마다 다른 속성에 접근해야 하면 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;인스턴스 메서드&lt;/b&gt;&lt;/span&gt;를,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스 전역(예: 전체 인스턴스 수 관리) 로직이나 클래스 자체를 통해 인스턴스를 만들 경우 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;클래스 메서드&lt;/b&gt;&lt;/span&gt;를,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스나 인스턴스 속성과 무관하게 단순 기능만 제공할 때 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;스태틱 메서드&lt;/b&gt;&lt;/span&gt;를&lt;br /&gt;사용하는 식으로 명확히 역할을 구분할 수 있다.&lt;/p&gt;</description>
      <category>python</category>
      <category>class method</category>
      <category>instance method</category>
      <category>Python</category>
      <category>static method</category>
      <category>객체</category>
      <category>스태틱 메서드</category>
      <category>인스턴스 메서드</category>
      <category>클래스</category>
      <category>클래스 메서드</category>
      <category>파이썬</category>
      <author>카방찐</author>
      <guid isPermaLink="true">https://record-to-knowledge.tistory.com/24</guid>
      <comments>https://record-to-knowledge.tistory.com/24#entry24comment</comments>
      <pubDate>Fri, 24 Jan 2025 19:33:34 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬 / python] PEP 8 - 코드를 읽기 쉽게 작성해보자</title>
      <link>https://record-to-knowledge.tistory.com/23</link>
      <description>&lt;div&gt;
&lt;div data-message-model-slug=&quot;o1&quot; data-message-id=&quot;a08f6156-4028-4434-9358-4997581f8ddc&quot; data-message-author-role=&quot;assistant&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 들여쓰기 (Indentation)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기본적으로 공백(스페이스) 4칸을 사용한다.&lt;/li&gt;
&lt;li&gt;탭(Tab)과 공백을 섞어서 쓰지 않는 것이 좋다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1737630571662&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def example_function():
    # 4칸 공백으로 들여쓰기
    message = &quot;Hello, PEP 8&quot;
    print(message)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 최대 줄 길이 (Maximum Line Length)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;한 줄에 79자를 넘기지 않는 것을 권장한다.&lt;/li&gt;
&lt;li&gt;주석이나 도큐멘테이션 문자열은 한 줄에 72자 이하로 제한하는 것을 권장한다.&lt;/li&gt;
&lt;li&gt;코드가 너무 길어지면 백슬래시(\)나 괄호 등을 사용해 적절히 줄을 나눈다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1737630603983&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print(&quot;이 문장은 79자를 넘지 않도록 적절히 줄 바꿈을 해줘야 한다. &quot;
      &quot;PEP 8 스타일 가이드를 준수하기 위해서다.&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 공백 (Whitespace) 사용&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;괄호, 쉼표, 콜론, 세미콜론 앞뒤에는 불필요한 공백을 두지 않는다.&lt;/li&gt;
&lt;li&gt;할당 연산자(=), 비교 연산자(==), 산술 연산자(+, - 등)는 앞뒤로 1칸의 공백을 두는 것을 권장한다.&lt;/li&gt;
&lt;li&gt;함수 호출의 인자나 리스트, 딕셔너리 정의 시에는 상황에 따라 붙여 쓰는 경우가 많다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1737630650309&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 권장
spam(ham[1], {eggs: 2})
x = x + 1

# 비권장
spam( ham[ 1 ], { eggs : 2 } )
x=x+1&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 빈 줄 (Blank Lines)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;함수나 클래스 정의 사이에는 빈 줄을 두 줄 넣는다.&lt;/li&gt;
&lt;li&gt;클래스 내 메서드 사이에는 빈 줄을 한 줄 넣는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1737630686637&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class MyClass:
    def method_one(self):
        pass

    def method_two(self):
        pass


def my_function():
    pass


def another_function():
    pass&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 임포트 (Imports)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;임포트는 파일 상단에 몰아서 작성한다.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;파이썬 표준 라이브러리&lt;/b&gt;&lt;/span&gt;, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;서드파티 라이브러리&lt;/b&gt;&lt;/span&gt;, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;로컬 라이브러리&lt;/b&gt;&lt;/span&gt; 순으로 구분해 정리한다.&lt;/li&gt;
&lt;li&gt;한 줄에서 여러 모듈을 임포트하기보다는 한 줄에 하나씩 작성하는 것이 좋다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1737630707276&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import os
import sys

import requests

from my_local_module import MyLocalClass&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. 함수와 클래스의 명명 규칙 (Naming Conventions)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;함수 이름&lt;/b&gt;&lt;/span&gt;은 소문자와 밑줄(_)을 사용하는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;스네이크 케이스&lt;/b&gt;&lt;/span&gt;를 권장한다 (예: my_function).&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;변수 이름&lt;/b&gt;&lt;/span&gt;도 소문자와 밑줄을 사용한다 (예: my_variable).&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;클래스 이름&lt;/b&gt;&lt;/span&gt;은 각 단어의 첫 글자를 대문자로 쓰고, 단어를 붙이는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;파스칼 케이스&lt;/b&gt;&lt;/span&gt;를 권장한다 (예: MyClass).&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;상수&lt;/b&gt;&lt;/span&gt;(변경되지 않는 값)는 모두 대문자로, 단어 사이는 밑줄로 구분한다 (예: MAX_SIZE, TOTAL_COUNT).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;7. 문자열 따옴표 (Quotation)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일관적으로 '(싱글 쿼트)나 &quot;(더블 쿼트)를 사용한다.&lt;/li&gt;
&lt;li&gt;문자열 안에 다른 종류의 따옴표를 포함해야 할 때, 이스케이프를 줄이기 위해 적절한 따옴표를 선택하기도 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1737630786023&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;msg = &quot;Hello, world!&quot;
other_msg = 'Python says &quot;Hello&quot;'&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;8. 모듈의 구조 (Structure of the Code)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;보통 파이썬 파일(모듈)의 구조는 아래 순서를 따른다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;모듈 주석 혹은 독스트링&lt;/li&gt;
&lt;li&gt;임포트&lt;/li&gt;
&lt;li&gt;전역 변수, 상수&lt;/li&gt;
&lt;li&gt;클래스 정의&lt;/li&gt;
&lt;li&gt;함수 정의&lt;/li&gt;
&lt;li&gt;if __name__ == &quot;__main__&quot;: 블록&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;9. 주석 (Comments)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;코드와 동기화가 잘 맞아야 하며, 의미 없는 주석은 피한다.&lt;/li&gt;
&lt;li&gt;핵심만 간결하게 적는 것이 좋다.&lt;/li&gt;
&lt;li&gt;함수와 클래스에 대한 설명은 도큐멘테이션 문자열(독스트링)을 활용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;10. 도큐멘테이션 문자열 (Docstring)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;함수, 클래스, 모듈의 맨 위에 작성해 사용 목적과 인자, 반환값 등을 설명한다.&lt;/li&gt;
&lt;li&gt;보통 삼중 따옴표(&quot;&quot;&quot;)로 감싸고, 여러 줄로 작성한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1737630821670&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def my_function(param1, param2):
    &quot;&quot;&quot;
    이 함수가 하는 일에 대한 간단한 설명을 적는다.
    
    :param param1: 설명
    :param param2: 설명
    :return: 반환 값에 대한 설명
    &quot;&quot;&quot;
    return param1 + param2&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 내용들은 &lt;b&gt;PEP 8&lt;/b&gt;에서 권장하는 대표적인 규칙들을 요약한 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 프로젝트에서는 &lt;b&gt;flake8&lt;/b&gt;, &lt;b&gt;black&lt;/b&gt;, &lt;b&gt;pylint&lt;/b&gt; 같은 도구를 통해 PEP 8 준수 여부를 검사하고, 자동으로 코드 스타일을 맞출 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PEP 8을 지키면 협업 시 코드 일관성이 좋아지고, 가독성과 유지보수성이 향상된다는 장점이 있다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>python</category>
      <category>PEP8</category>
      <category>Python</category>
      <category>가독성</category>
      <category>도큐멘테이션</category>
      <category>들여쓰기</category>
      <category>모듈의 구조</category>
      <category>유지보수</category>
      <category>일관</category>
      <category>주석</category>
      <category>파이썬</category>
      <author>카방찐</author>
      <guid isPermaLink="true">https://record-to-knowledge.tistory.com/23</guid>
      <comments>https://record-to-knowledge.tistory.com/23#entry23comment</comments>
      <pubDate>Thu, 23 Jan 2025 20:21:57 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬 / Python] 클래스(Class)와 객체(Object)</title>
      <link>https://record-to-knowledge.tistory.com/22</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 클래스(Class)와 객체(Object)란&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;클래스(Class&lt;/span&gt;)&lt;/b&gt;: 어떤 객체(인스턴스)를 만들지, 그 &lt;b&gt;특성과 동작&lt;/b&gt;(변수와 메서드)을 정의해 둔 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;설계도, 틀, 템플릿&lt;/b&gt;&lt;/span&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;객체(인스턴스, Object)&lt;/b&gt;&lt;/span&gt;: 클래스를 기반으로 실제 메모리에 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;생성된 실체&lt;/b&gt;&lt;/span&gt;로, 클래스에 정의된 특성을 가질 뿐 아니라 서로 &lt;b&gt;다른 상태&lt;/b&gt;를 가진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이해하기 쉽게 예를 들면 &lt;b&gt;클래스&lt;/b&gt;를 &lt;b&gt;&amp;lsquo;건물을 짓기 위한 설계도(청사진)&amp;rsquo;&lt;/b&gt; 라고 생각해 보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 &lt;b&gt;객체&lt;/b&gt;(인스턴스)는 설계도를 바탕으로 실제 땅 위에 지어진 &lt;b&gt;&amp;lsquo;건물&amp;rsquo;&lt;/b&gt; 이라고 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;설계도(클래스)&lt;/b&gt;&lt;/span&gt;는 건물을 어떻게 지을지, 방은 몇 개를 둘지, 창문은 몇 개를 달지 등&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;구조와 특성을 정의&lt;/b&gt;&lt;/span&gt;한다&lt;b&gt;. &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직 건물 자체가 생긴 상태는 아니지만, &amp;ldquo;건물은 이런 모양과 기능을 가져야 한다&amp;rdquo;는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;구체적인 계획&lt;/b&gt;&lt;/span&gt;이 담겨 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;건물(객체)&lt;/b&gt;&lt;/span&gt;은&amp;nbsp;실제로 설계도(클래스)를 보고 만들어진 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;&amp;lsquo;실체&amp;rsquo;&lt;/b&gt;&lt;/span&gt; 이다. 같은 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;설계도(클래스)&lt;/b&gt;&lt;/span&gt;를 이용하면 같은 구조를 가진 건물을 여러 채 지을 수도 있습니다. 예를 들어 어떤 건물은 A동 101호, 또 다른 건물은 A동 102호처럼 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;각각 독립된 실체&lt;/b&gt;&lt;/span&gt;를 가진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 개념이 프로그래밍에서 &lt;b&gt;클래스(Class)&lt;/b&gt;와 &lt;b&gt;객체(인스턴스, Object)&lt;/b&gt;는 객체 지향 프로그래밍(OOP)의 핵심적인 개념이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&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;2. 기본 클래스 선언&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Python에서 클래스를 선언하기 위해서는 &lt;b&gt;class 키워드&lt;/b&gt;를 사용한다. 가장 간단한 형태는 다음과 같다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1736518543228&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class MyClass:
    pass&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MyClass라는 클래스 이름을 정의하고, 해당 클래스의 본문에서 아무것도 하지 않을 경우 pass 키워드를 이용해 빈 코드 블록을 표현할 수 있다.&lt;/li&gt;
&lt;li&gt;PEP 8 스타일 가이드에 따르면, 클래스 이름은 &lt;b&gt;단어의 첫 글자를 대문자로 하는 파스칼 케이스(PascalCase)&lt;/b&gt; 로 쓰는 것이 권장된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;*명명법에 대해서&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그래밍에서 사용되는 명명법에는 대표적으로 &lt;b&gt;카멜 케이스&lt;/b&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;(Camel Case)와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;파스칼 케이스&lt;/b&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;(Pascal Case)가 있다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;카멜 케이스&lt;/b&gt;&lt;/span&gt;는 첫 단어의 첫 글자를 소문자로 하고 이후의 단어들의 첫 글자는 대문자로 하는 명명법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주로 변수나 함수를 명명할 때 쓰인다. &lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;ex)myVariableName&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;파스칼 케이스&lt;/b&gt;&lt;/span&gt;는 모든 단어의 첫 글자를 대문자로 하는 명명법이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주로 클래스나 타입을 명명할 때 쓰인다. ex)MyClass&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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;3. 클래스에 속성(필드)과 메서드 추가하기&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3-1. 인스턴스 메서드와 self&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스 내부에서 메서드를 정의할 때 일반적으로 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;첫 번째 인자로 self&lt;/b&gt;&lt;/span&gt;를 받는다.&lt;br /&gt;self는 인스턴스 자기 자신을 가리킬때 쓰는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;관례적인 이름&lt;/b&gt;&lt;/span&gt;이다.&lt;/p&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1736519533677&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Person:
    def __init__(self, name, age):
        self.name = name  # 인스턴스 변수
        self.age = age

    def introduce(self):
        print(f&quot;안녕하세요, 제 이름은 {self.name}이고, 나이는 {self.age}살입니다.&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;__init__ 메서드&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;__init__ 메서드는 &lt;b&gt;생성자(Constructor)&lt;/b&gt; 로서, 클래스로부터 객체(인스턴스)를 생성할 때(4번 객체 생성 참고) 자동으로 실행된다.&lt;/li&gt;
&lt;li&gt;__init__ 내부에서 self.name, self.age와 같이 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;인스턴스 변수를 초기화&lt;/b&gt;&lt;/span&gt;할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;일반 메서드&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;introduce()와 같은 메서드는 인스턴스 메서드이다. 인스턴스 메서드의 첫 번째 매개변수는 항상 self여야 한다.&lt;/li&gt;
&lt;li&gt;메서드를 통해 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;인스턴스 변수를 다루거나, 다른 로직을 실행&lt;/b&gt;&lt;/span&gt;할 수 있다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3-2. 클래스 변수와 인스턴스 변수&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;인스턴스 변수(Instance Variable)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;각 인스턴스(객체)마다 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;독립적으로 갖는 값&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;self.변수명 형태로 선언&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;클래스 변수(Class Variable)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클래스에 속하는 변수이며, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;생성된 모든 인스턴스가 공유&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;클래스 본문 안에 self 없이 바로 선언&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 다음과 같이 선언할 수 있다.&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;pre id=&quot;code_1736559375306&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Product:
    category = &quot;Electronic&quot;  # 클래스 변수

    def __init__(self, name, price):
        self.name = name      # 인스턴스 변수
        self.price = price    # 인스턴스 변수&lt;/code&gt;&lt;/pre&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;h2 data-ke-size=&quot;size26&quot;&gt;4. 객체(인스턴스) 생성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스로부터 객체(인스턴스)를 생성할 때는 아래와 같이 클래스를 함수처럼 호출한다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1736559458903&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Person 클래스 예시
person1 = Person(&quot;Alice&quot;, 25)
person1.introduce() # 안녕하세요, 제 이름은 Alice이고 제 나이는 25살입니다.
person2 = Person(&quot;Bob&quot;, 21)
person2.introduce() # 안녕하세요, 제 이름은 Bob이고 제 나이는 21살입니다.

# Product 클래스 예시
product1 = Product(&quot;Laptop&quot;, 1500000)
print(product1.category)  # Electronic
print(product1.name)      # Laptop
print(product1.price)     # 1500000
product2 = Product(&quot;microwave&quot;, 300000)
print(product2.category)  # Electronic
print(product2.name)      # microwave
print(product2.price)     # 300000&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Person(&quot;Alice&quot;, 25)는 __init__ 생성자를 호출하며, person1 인스턴스를 초기화한다.&lt;/li&gt;
&lt;li&gt;person1.name=Alice, person1.age=25로 초기화된다&lt;/li&gt;
&lt;li&gt;person2.name=Bob,&amp;nbsp; person2.age=21로 초기화된다&lt;/li&gt;
&lt;li&gt;person1 객체의&amp;nbsp; introduce() method 호출로&amp;nbsp; &quot;안녕하세요, 제 이름은 Alice이고 제 나이는 25살입니다&quot; 를 출력한다.&lt;/li&gt;
&lt;li&gt;Product(&quot;Laptop&quot; , 1500000)는 __init__ 생성자를 호출하며, product1 인스턴스를 초기화한다.&lt;/li&gt;
&lt;li&gt;product1.name= Laptop, person1.price=1500000로 초기화된다&lt;/li&gt;
&lt;li&gt;person2.name=microwave,&amp;nbsp; person2.price=300000로 초기화된다&lt;/li&gt;
&lt;li&gt;product1.category 과 product2.category 클래스변수는 서로 공유된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>python</category>
      <category>class</category>
      <category>Instance</category>
      <category>object</category>
      <category>Python</category>
      <category>객체</category>
      <category>명명법</category>
      <category>생성자</category>
      <category>클래스</category>
      <category>클래스 변수</category>
      <category>파이썬</category>
      <author>카방찐</author>
      <guid isPermaLink="true">https://record-to-knowledge.tistory.com/22</guid>
      <comments>https://record-to-knowledge.tistory.com/22#entry22comment</comments>
      <pubDate>Thu, 23 Jan 2025 19:59:51 +0900</pubDate>
    </item>
    <item>
      <title>[러닝] 대구마라톤대회 (DAEGU MARATHON)에 참여하는 당신을 위한 정보</title>
      <link>https://record-to-knowledge.tistory.com/21</link>
      <description>&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;955&quot; data-origin-height=&quot;291&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3R25w/btsLSjlyGIq/dJgRXOjGQPouxfuMpjJLjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3R25w/btsLSjlyGIq/dJgRXOjGQPouxfuMpjJLjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3R25w/btsLSjlyGIq/dJgRXOjGQPouxfuMpjJLjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3R25w%2FbtsLSjlyGIq%2FdJgRXOjGQPouxfuMpjJLjk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;955&quot; height=&quot;291&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;291&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2025년 2월 23일 대구 마라톤 대회에 참여하는 여러분들을 위해 대회 정보를 가져와 봤어요&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;a href=&quot;https://daegu.go.kr/daegumarathon/index.php&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://daegu.go.kr/daegumarathon/index.php&lt;/a&gt;&lt;/blockquote&gt;
&lt;figure id=&quot;og_1737110779815&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;대구마라톤 DAEGU MARATHON&quot; data-og-description=&quot;이 사업은 문화체육관광부와 국민체육진흥공단의재정지원을 받아 시행합니다.&quot; data-og-host=&quot;daegu.go.kr&quot; data-og-source-url=&quot;https://daegu.go.kr/daegumarathon/index.php&quot; data-og-url=&quot;https://daegu.go.kr/daegumarathon/index.php&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://daegu.go.kr/daegumarathon/index.php&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://daegu.go.kr/daegumarathon/index.php&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;대구마라톤 DAEGU MARATHON&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;daegu.go.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대회는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;엘리트 부문&lt;/b&gt;&lt;/span&gt;, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;마스터즈 부문&lt;/b&gt;&lt;/span&gt;으로 참가할 수 있어요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아마 대부분의 경우에는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;마스터즈 부문&lt;/b&gt;&lt;/span&gt;으로 참가하지 않을까 싶네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마스터즈 부문 대회 개요를 보실게요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2025 대회 개요&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;일시/장소&lt;/b&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;: 2025년 2월 23일(일) 09:00 시작&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장소&lt;/b&gt;: &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;대구스타디움 및 시내 일원&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;대회 종목&lt;/b&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;: 42.195km&lt;/li&gt;
&lt;li&gt;&lt;b&gt;하프코스&lt;/b&gt;: 21.0975km&lt;/li&gt;
&lt;li&gt;&lt;b&gt;10km&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;건강달리기&lt;/b&gt;: 약 5km&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참가 인원&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;총 40,000명&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참가비&lt;/b&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;: 70,000원&lt;/li&gt;
&lt;li&gt;&lt;b&gt;하프코스/10km&lt;/b&gt;: 40,000원&lt;/li&gt;
&lt;li&gt;&lt;b&gt;건강달리기&lt;/b&gt;: 30,000원&lt;/li&gt;
&lt;/ul&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;세부 내용&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 마스터즈 풀코스 (13,000명)&lt;/b&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;: 만 18세 이상(2007년 2월 23일 이전 출생), 참가자 유의사항 동의&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;S그룹&lt;/b&gt;: 3시간 미만 (엘리트 그룹과 동시 출발)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;A그룹&lt;/b&gt;: 3시간 이상 ~ 4시간 미만&lt;/li&gt;
&lt;li&gt;&lt;b&gt;B그룹&lt;/b&gt;: 4시간 이상 ~ 5시간 미만&lt;/li&gt;
&lt;li&gt;&lt;b&gt;C/D그룹&lt;/b&gt;: 5시간 이상 또는 기록증 미제출자&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기록증&lt;/b&gt;: 2022년 1월 1일 이후 발급된 풀코스 기록증만 인정 (미제출 시 C/D그룹 배정)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 마스터즈 하프코스 (7,000명)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;참가 조건&lt;/b&gt;: 기록증 제출 여부에 따라 그룹 분류
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;A그룹&lt;/b&gt;: 기록증 제출자&lt;/li&gt;
&lt;li&gt;&lt;b&gt;B그룹&lt;/b&gt;: 미제출자&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;제한시간&lt;/b&gt;: 2시간 30분&lt;/li&gt;
&lt;li&gt;※ 그룹 구분은 기록증 제출 현황에 따라 변동 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 마스터즈 10km (14,000명)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;참가 조건&lt;/b&gt;: 참가자 유의사항 동의&lt;/li&gt;
&lt;li&gt;&lt;b&gt;제한시간&lt;/b&gt;: 1시간 30분&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 마스터즈 건강달리기 (6,000명)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;참가 조건&lt;/b&gt;: 참가자 유의사항 동의&lt;/li&gt;
&lt;li&gt;&lt;b&gt;제한시간&lt;/b&gt;: 1시간&lt;/li&gt;
&lt;/ul&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;시상 관련 안내&lt;/b&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;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;최근 2년 이내 달리기 관련 전문체육 선수로 등록된 자는 참가 가능하나 마스터즈 부문 시상 대상에서 제외됨.&lt;br /&gt;(예: 육상, 철인3종, 근대5종 등)&lt;/li&gt;
&lt;/ul&gt;
&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;/li&gt;
&lt;li&gt;해외 카테고리는 외국인 선수 대상으로만 시상 (중복 수상 불가).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저랑은 먼 얘기같지만 참고하세요~~&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1075&quot; data-origin-height=&quot;664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bN4ba8/btsLSOSOZKc/vov6aQqhckcuW2RMEWIGKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bN4ba8/btsLSOSOZKc/vov6aQqhckcuW2RMEWIGKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bN4ba8/btsLSOSOZKc/vov6aQqhckcuW2RMEWIGKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbN4ba8%2FbtsLSOSOZKc%2Fvov6aQqhckcuW2RMEWIGKk%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;883&quot; height=&quot;545&quot; data-origin-width=&quot;1075&quot; data-origin-height=&quot;664&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;풀코스&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1574&quot; data-origin-height=&quot;862&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpaeoU/btsLRjNobHw/SeDJBW2FWo52cd1KEvIwJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpaeoU/btsLRjNobHw/SeDJBW2FWo52cd1KEvIwJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpaeoU/btsLRjNobHw/SeDJBW2FWo52cd1KEvIwJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpaeoU%2FbtsLRjNobHw%2FSeDJBW2FWo52cd1KEvIwJK%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;1574&quot; height=&quot;862&quot; data-origin-width=&quot;1574&quot; data-origin-height=&quot;862&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1565&quot; data-origin-height=&quot;476&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjo5iU/btsLS42eTVS/MFtY9In0J5Wtak8d1eKJa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjo5iU/btsLS42eTVS/MFtY9In0J5Wtak8d1eKJa1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjo5iU/btsLS42eTVS/MFtY9In0J5Wtak8d1eKJa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbjo5iU%2FbtsLS42eTVS%2FMFtY9In0J5Wtak8d1eKJa1%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;1565&quot; height=&quot;476&quot; data-origin-width=&quot;1565&quot; data-origin-height=&quot;476&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;b&gt;하프코스&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1415&quot; data-origin-height=&quot;915&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qqn6i/btsLRSV5u1F/hxZoNKJNRiP1KBx6SCUuP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qqn6i/btsLRSV5u1F/hxZoNKJNRiP1KBx6SCUuP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qqn6i/btsLRSV5u1F/hxZoNKJNRiP1KBx6SCUuP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqqn6i%2FbtsLRSV5u1F%2FhxZoNKJNRiP1KBx6SCUuP0%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;1415&quot; height=&quot;915&quot; data-origin-width=&quot;1415&quot; data-origin-height=&quot;915&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고지도와 경사를 확인하고 싶으시면 &lt;b&gt;풀코스&lt;/b&gt; 고지도와 경사 분석의 시작부터 &lt;b&gt;20km 부근&lt;/b&gt;까지 참고하시면 될 것 같습니다~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;시작지점과 도착지점이 다르니 참고하세요&lt;/b&gt;&lt;/p&gt;
&lt;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;b&gt;10km&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1294&quot; data-origin-height=&quot;876&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/78R5E/btsLS2QTzDS/jT8121F241zcoee0dfYhJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/78R5E/btsLS2QTzDS/jT8121F241zcoee0dfYhJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/78R5E/btsLS2QTzDS/jT8121F241zcoee0dfYhJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F78R5E%2FbtsLS2QTzDS%2FjT8121F241zcoee0dfYhJK%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;1294&quot; height=&quot;876&quot; data-origin-width=&quot;1294&quot; data-origin-height=&quot;876&quot;/&gt;&lt;/span&gt;&lt;/figure&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;b&gt;건강달리기&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1158&quot; data-origin-height=&quot;798&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uhL6w/btsLQPssgWy/odTa2mc5oNRlqPnjOXshK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uhL6w/btsLQPssgWy/odTa2mc5oNRlqPnjOXshK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uhL6w/btsLQPssgWy/odTa2mc5oNRlqPnjOXshK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuhL6w%2FbtsLQPssgWy%2FodTa2mc5oNRlqPnjOXshK1%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;1158&quot; height=&quot;798&quot; data-origin-width=&quot;1158&quot; data-origin-height=&quot;798&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 &lt;b&gt;빨간색 티셔츠&lt;/b&gt;를 배부해 주고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;풀코스&lt;/b&gt;와 &lt;b&gt;하프&lt;/b&gt;는 &lt;b&gt;아미노바이탈 패키지&lt;/b&gt;를 추가로 준다고 하네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;완주시&lt;/b&gt;에는 모든 참가자에게 &lt;b&gt;메달을 지급해 주고&lt;/b&gt; &lt;b&gt;풀코스 참가자&lt;/b&gt;에게는 &lt;b&gt;바람막이&lt;/b&gt;를 줍니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://daegu.go.kr/daegumarathon/gift.php&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://daegu.go.kr/daegumarathon/gift.php&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1737110217824&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;대구마라톤 DAEGU MARATHON&quot; data-og-description=&quot;&quot; data-og-host=&quot;daegu.go.kr&quot; data-og-source-url=&quot;https://daegu.go.kr/daegumarathon/gift.php&quot; data-og-url=&quot;https://daegu.go.kr/daegumarathon/gift.php&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/6VhBn/hyX0ovBhUV/rK7YwIKKAd8H9Uw2Xf5mjK/img.jpg?width=1400&amp;amp;height=1540&amp;amp;face=0_0_1400_1540&quot;&gt;&lt;a href=&quot;https://daegu.go.kr/daegumarathon/gift.php&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://daegu.go.kr/daegumarathon/gift.php&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/6VhBn/hyX0ovBhUV/rK7YwIKKAd8H9Uw2Xf5mjK/img.jpg?width=1400&amp;amp;height=1540&amp;amp;face=0_0_1400_1540');&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;대구마라톤 DAEGU MARATHON&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;daegu.go.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자세한 내용은 여기에 &amp;uarr;&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;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;마치며&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러분은 &lt;b&gt;자신의 건강과 목표를 위해 멋진 도전&lt;/b&gt;을 선택하셨습니다. 거리는 단순한 숫자가 아니라, 자신을 위한 시간, 도전을 위한 노력, 그리고 &lt;b&gt;건강을 향한 결심&lt;/b&gt;을 의미합니다. 비록 거리는 다르지만, 여러분 모두가 스스로와의 약속을 지키기 위해 한 걸음씩 내딛는 모습은 그 자체로 정말 대단하고 감동적입니다. 꾸준히 뛰는 동안 여러분의 몸은 더 강해지고, 마음은 더 단단해질 것입니다. 기록도 중요하지만, 무엇보다 여러분이 완주 후 느낄 성취감과 건강해진 자신을 만나는 기쁨을 기대해 주세요. &lt;b&gt;힘든 순간에도 웃음을 잃지 말고, 자신의 페이스를 유지하며 끝까지 즐기는 레이스가 되길 바랍니다!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;끝까지 함께 달려봅시다! 여러분은 이미 충분히 멋집니다!&quot;&lt;/b&gt;  &lt;/p&gt;</description>
      <category>취미생활/러닝</category>
      <category>2025년</category>
      <category>5km</category>
      <category>건강달리기</category>
      <category>기념품</category>
      <category>대구마라톤대회</category>
      <category>마라톤</category>
      <category>모집장소</category>
      <category>코스</category>
      <category>풀코스</category>
      <category>하프</category>
      <author>카방찐</author>
      <guid isPermaLink="true">https://record-to-knowledge.tistory.com/21</guid>
      <comments>https://record-to-knowledge.tistory.com/21#entry21comment</comments>
      <pubDate>Fri, 17 Jan 2025 19:56:26 +0900</pubDate>
    </item>
    <item>
      <title>[백준 / 파이썬] 백준 1748번 문제 풀이: 수 이어 쓰기 1</title>
      <link>https://record-to-knowledge.tistory.com/20</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;문제&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1234567891011121314151617181920212223...&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이렇게 만들어진 새로운 수는 몇 자리 수일까? 이 수의 자릿수를 구하는 프로그램을 작성하시오.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;입력&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;첫째 줄에 N(1 &amp;le; N &amp;le; 100,000,000)이 주어진다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;출력&lt;/span&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;첫째 줄에 새로운 수의 자릿수를 출력한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #555555;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;문제 해결&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 해결 방법에는 2가지가 있다.&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;첫번째 방법은 숫자를 0에서부터 N(입력값)까지 모든 숫자에 대해 자릿수를 모두 더 하는 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 방법은 O(n)의 시간복잡도로 직관적이긴하나 비효율적인 방법이다.&lt;/p&gt;
&lt;pre id=&quot;code_1737021717150&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
N=int(sys.stdin.readline())
answer=0
while N!=0:
    answer+=len(str(N))
    N-=1
print(answer)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두번째 방법은 1부터 9까지 10부터 99까지 ... 구간을 나누어서 자릿수를 한번에 구하는 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;n=120일 때, &lt;br /&gt;1,2,3,4,5,6,7,8,9 -&amp;gt; 1자리씩 총 9 &lt;br /&gt;10,11,12,...,99 -&amp;gt; 각 2자리씩 총 90 * 2 = 180&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;100,101,102,...,120-&amp;gt; 각 3자리씩 총 21 * 3= 63&lt;br /&gt;최종 합 = 9 + 180 + 63 = 252&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;이방법은 O(logn)의 시간 복잡도를 갖는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째 방법보다 효율적인 방법으로 답을 구할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;전체 코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1737028100588&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys

def count_total_digit_length(n: int) -&amp;gt; int:

    total_length = 0
    power = 0

    # 10^power 자릿수를 사용하는 숫자 범위를 넘지 않을 때까지 반복
    while n // (10 ** power) &amp;gt;= 10:
        total_length += 9 * (10 ** power) * (power + 1)
        power += 1

    # 남아 있는 범위(10^power 이상부터 n까지)에 대한 자릿수 계산
    total_length += (n - 10**power + 1) * (power + 1)
    return total_length

def main():
    n = int(sys.stdin.readline().strip())
    print(count_total_digit_length(n))

if __name__ == &quot;__main__&quot;:
    main()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;부분 설명&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1737028953431&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;while n // (10 ** power) &amp;gt;= 10:
        total_length += 9 * (10 ** power) * (power + 1)
        power += 1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;while 의 조건식은 위의 예시에서 10 과 100을 구분하는 장치이다. 100에서는 120까지 채우지 못하기 때문에 따로 계산할 필요가 있다. 반면 1은 9까지, 10은 99까지의 모든 숫자가 채워졌으므로 각각 9개, 180개의 자릿수가 필요하다는 것을 바로 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1737029096969&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 남아 있는 범위(10^power 이상부터 n까지)에 대한 자릿수 계산
    total_length += (n - 10**power + 1) * (power + 1)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 예시에서 100부터 120까지의 필요한 자릿수를 계산하는 과정이다. (120-100+1)*3=63 이라는 결과를 얻을 수 있다.&lt;/p&gt;</description>
      <category>백준 문제 풀이</category>
      <category>1748</category>
      <category>brute force</category>
      <category>Python</category>
      <category>문제풀이</category>
      <category>백준</category>
      <category>수 이어 쓰기</category>
      <category>알고리즘 기초</category>
      <category>자릿수 계산</category>
      <category>파이썬</category>
      <category>프로그래밍</category>
      <author>카방찐</author>
      <guid isPermaLink="true">https://record-to-knowledge.tistory.com/20</guid>
      <comments>https://record-to-knowledge.tistory.com/20#entry20comment</comments>
      <pubDate>Thu, 16 Jan 2025 21:15:22 +0900</pubDate>
    </item>
    <item>
      <title>[백준 / 파이썬] 백준 6064번 문제 풀이: 카잉 달력</title>
      <link>https://record-to-knowledge.tistory.com/19</link>
      <description>&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;문제&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;최근에 ICPC 탐사대는 남아메리카의 잉카 제국이 놀라운 문명을 지닌 카잉 제국을 토대로 하여 세워졌다는 사실을 발견했다. 카잉 제국의 백성들은 특이한 달력을 사용한 것으로 알려져 있다. 그들은 M과 N보다 작거나 같은 두 개의 자연수 x, y를 가지고 각 년도를 &amp;lt;x:y&amp;gt;와 같은 형식으로 표현하였다. 그들은 이 세상의 시초에 해당하는 첫 번째 해를 &amp;lt;1:1&amp;gt;로 표현하고, 두 번째 해를 &amp;lt;2:2&amp;gt;로 표현하였다. &amp;lt;x:y&amp;gt;의 다음 해를 표현한 것을 &amp;lt;x':y'&amp;gt;이라고 하자. 만일 x &amp;lt; M 이면 x' = x + 1이고, 그렇지 않으면 x' = 1이다. 같은 방식으로 만일 y &amp;lt; N이면 y' = y + 1이고, 그렇지 않으면 y' = 1이다. &amp;lt;M:N&amp;gt;은 그들 달력의 마지막 해로서, 이 해에 세상의 종말이 도래한다는 예언이 전해 온다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;예를 들어, M = 10 이고 N = 12라고 하자. 첫 번째 해는 &amp;lt;1:1&amp;gt;로 표현되고, 11번째 해는 &amp;lt;1:11&amp;gt;로 표현된다. &amp;lt;3:1&amp;gt;은 13번째 해를 나타내고, &amp;lt;10:12&amp;gt;는 마지막인 60번째 해를 나타낸다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;네 개의 정수 M, N, x와 y가 주어질 때, &amp;lt;M:N&amp;gt;이 카잉 달력의 마지막 해라고 하면 &amp;lt;x:y&amp;gt;는 몇 번째 해를 나타내는지 구하는 프로그램을 작성하라.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;입력&lt;/span&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터는 한 줄로 구성된다. 각 줄에는 네 개의 정수 M, N, x와 y가 주어진다. (1 &amp;le; M, N &amp;le; 40,000, 1 &amp;le; x &amp;le; M, 1 &amp;le; y &amp;le; N) 여기서 &amp;lt;M:N&amp;gt;은 카잉 달력의 마지막 해를 나타낸다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #333333;&quot;&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;출력&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;출력은 표준 출력을 사용한다. 각 테스트 데이터에 대해, 정수 k를 한 줄에 출력한다. 여기서 k는 &amp;lt;x:y&amp;gt;가 k번째 해를 나타내는 것을 의미한다. 만일 &amp;lt;x:y&amp;gt;에 의해 표현되는 해가 없다면, 즉, &amp;lt;x:y&amp;gt;가 유효하지 않은 표현이면, -1을 출력한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #555555;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;문제 풀이&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제 접근&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카잉 달력 문제는 통상적으로 &lt;b&gt;중국인의 나머지 정리(Chinese Remainder Theorem, CRT)&lt;/b&gt; 형태로 풀이하는 것이 유명하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제를 간단히 바꾸면 &amp;ldquo;다음 식을 만족하는 &lt;span&gt;&lt;span&gt;T&lt;/span&gt;&lt;/span&gt;를 찾는 것&amp;rdquo;과 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;244&quot; data-origin-height=&quot;69&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ceT8Im/btsLP3PRQFT/U4tKkCEWzywISrw4FGsqrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ceT8Im/btsLP3PRQFT/U4tKkCEWzywISrw4FGsqrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ceT8Im/btsLP3PRQFT/U4tKkCEWzywISrw4FGsqrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FceT8Im%2FbtsLP3PRQFT%2FU4tKkCEWzywISrw4FGsqrk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;244&quot; height=&quot;69&quot; data-origin-width=&quot;244&quot; data-origin-height=&quot;69&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;​예를 들면 10, 12, 3, 9가 주어지면&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;가능한 T는 x=3일때&amp;nbsp; 3,13,23,33,43,53,63...이고 y=9일때 9, 21, 33, 45, 57, 69... 위 두 방정식을 만족시키는 T는 33이다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 일반화해서 구현하는 방법은 다음과 같다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;연도 &lt;span&gt;&lt;span&gt;T&lt;/span&gt;&lt;/span&gt;를 &lt;span&gt;&lt;span&gt;x&lt;/span&gt;&lt;/span&gt;로 시작해서, &lt;span&gt;&lt;span&gt;M&lt;/span&gt;&lt;/span&gt;씩 증가시키면서&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;span&gt;(T&amp;minus;1)mod&amp;thinsp;&amp;thinsp;N+1&lt;/span&gt;&lt;/span&gt;이 &lt;span&gt;&lt;span&gt;y&lt;/span&gt;&lt;/span&gt;와 같은지 검사&lt;/li&gt;
&lt;li&gt;만약 검사 범위 &lt;span&gt;&lt;span&gt;T&amp;le;M&amp;times;N&lt;/span&gt;&lt;/span&gt;를 넘어가면 답이 없으므로 -1 (왜 M*N이 검사 범위인지는 마지막에 설명)&lt;/li&gt;
&lt;/ol&gt;
&lt;p 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;span&gt;&lt;span&gt;(T&amp;minus;1)  M+1=x&lt;/span&gt;&lt;/span&gt;이면 &lt;span&gt;&lt;span&gt;(T&amp;minus;1)&amp;equiv;(x&amp;minus;1)(modM),&lt;/span&gt;&lt;/span&gt;&amp;nbsp;즉 &lt;span&gt;&lt;span&gt;T&amp;equiv;x(modM)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;그렇다면 &lt;span&gt;&lt;span&gt;T&lt;/span&gt;&lt;/span&gt;가 x, x + M, x + 2M, ... 형태로 나열될 것이고, 그 중에서 &lt;span&gt;&lt;span&gt;(T&amp;minus;1)  N+1=y&lt;/span&gt;&lt;/span&gt;를 만족하는지 찾으면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;문제 해결&lt;/h3&gt;
&lt;pre id=&quot;code_1736946231346&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
A=int(sys.stdin.readline())
for i in range(A):
    M,N,x,y=list(map(int,sys.stdin.readline().split()))
    limit=M*N
    candidate=x
    answer=-1
    while candidate&amp;lt;=limit:
        if (candidate-y)%N==0:
            answer=candidate
            break
        else:
            candidate+=M
            
    print(answer)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜 limit가 M&amp;times;N일까?&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;왜 &lt;span&gt;&lt;span&gt;M&amp;times;N&lt;/span&gt;&lt;/span&gt;이 상한(최대 해)인가?&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;카잉 달력의 구조&lt;/b&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;각 해는 &lt;span&gt;&lt;span&gt;(T&amp;minus;1)  M+1&lt;/span&gt;&lt;/span&gt;과 &lt;span&gt;&lt;span&gt;(T&amp;minus;1)  N+1&lt;/span&gt;&lt;/span&gt;의 형태로 표시된다.&lt;/li&gt;
&lt;li&gt;연도 &lt;span&gt;&lt;span&gt;T&lt;/span&gt;&lt;/span&gt;가 1씩 증가할 때마다, 앞의 식들은 주기적으로 반복된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&amp;lt;1:1&amp;gt;부터 &amp;lt;M:N&amp;gt;까지의 &amp;lsquo;주기&amp;rsquo;&lt;/b&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;문제에서 &amp;ldquo;카잉 달력은 &amp;lt;1:1&amp;gt;에서 시작해서 매년 x는 1부터 M까지, y는 1부터 N까지 돌아가며 증가한다&amp;rdquo;고 했다.&lt;/li&gt;
&lt;li&gt;&amp;lsquo;&amp;lt;M:N&amp;gt;이 마지막 해다&amp;rsquo;라는 것은, (문제에서 주어진 설정상) 이 이후로 달력이 더 이상 가지 않는다 혹은 새로운 사이클로 넘어가기 전까지의 최대 해라는 의미로 볼 수 있다.&lt;/li&gt;
&lt;li&gt;만약 우리가 1년 차부터 차례대로 모든 해를 표현해 보면, 최대한 길게 가도 &lt;span&gt;&lt;span&gt;M&amp;times;N&lt;/span&gt;&lt;/span&gt;번을 넘으면 &amp;lsquo;다시 초기처럼 반복되는 사이클&amp;rsquo;로 간주할 수 있다.
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;실제로는 &lt;span&gt;&lt;span&gt;LCM(M,N)&lt;/span&gt;&lt;/span&gt;(최소공배수)이 주기가 될 수도 있지만, 문제에서 &amp;ldquo;&amp;lt;M:N&amp;gt;이 마지막 해&amp;rdquo;라고 정의해 버렸으므로, 이를 포함하는 최댓값으로 &lt;span&gt;&lt;span&gt;M&amp;times;N&lt;/span&gt;&lt;/span&gt;을 잡아도 충분하다.&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;span&gt;M&lt;/span&gt;&lt;/span&gt;과 &lt;span&gt;&lt;span&gt;N&lt;/span&gt;&lt;/span&gt;이 서로소일 때는 &lt;span&gt;&lt;span&gt;LCM(M,N)=M&amp;times;N&lt;/span&gt;&lt;/span&gt;이 되고, 서로소가 아닐 때도 &lt;span&gt;&lt;span&gt;M&amp;times;N&lt;/span&gt;&lt;/span&gt;은 &lt;span&gt;&lt;span&gt;LCM(M,N)&lt;/span&gt;&lt;/span&gt;보다 크거나 같은 &lt;b&gt;상한&lt;/b&gt;이 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;코딩 시의 편의&lt;/b&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;우리가 &amp;ldquo;&amp;lt;x:y&amp;gt;가 몇 번째 해인지&amp;rdquo;를 찾을 때, 연도 &lt;span&gt;&lt;span&gt;T&lt;/span&gt;&lt;/span&gt;를 1부터 올려가며(혹은 &lt;span&gt;&lt;span&gt;x&lt;/span&gt;&lt;/span&gt;부터 시작해 &lt;span&gt;&lt;span&gt;M&lt;/span&gt;&lt;/span&gt;씩 증가시키며) 체크한다.&lt;/li&gt;
&lt;li&gt;만약 &lt;span&gt;&lt;span&gt;T&lt;/span&gt;&lt;/span&gt;가 &lt;span&gt;&lt;span&gt;M&amp;times;N&lt;/span&gt;&lt;/span&gt;을 넘어갈 때까지도 조건을 만족하는 해를 찾지 못했다면, &lt;b&gt;그 뒤로는 찾아도 마찬가지&lt;/b&gt;이므로 &amp;ldquo;해당 조건을 만족하는 해는 없다(&lt;span&gt;&lt;span&gt;&amp;minus;1&lt;/span&gt;&lt;/span&gt;)&amp;rdquo;라고 판정해도 된다.&lt;/li&gt;
&lt;li&gt;즉, &lt;span&gt;&lt;span&gt;M&amp;times;N&lt;/span&gt;&lt;/span&gt; &lt;b&gt;&amp;ldquo;더 이상 찾아봤자 의미가 없는 안전한 상한&amp;rdquo;&lt;/b&gt;으로 쓰는 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>백준 문제 풀이</category>
      <category>6064</category>
      <category>brute force</category>
      <category>Python</category>
      <category>문제풀이</category>
      <category>백준</category>
      <category>알고리즘 기초</category>
      <category>최소 공배수</category>
      <category>카잉달력</category>
      <category>파이썬</category>
      <category>프로그래밍</category>
      <author>카방찐</author>
      <guid isPermaLink="true">https://record-to-knowledge.tistory.com/19</guid>
      <comments>https://record-to-knowledge.tistory.com/19#entry19comment</comments>
      <pubDate>Wed, 15 Jan 2025 22:12:28 +0900</pubDate>
    </item>
    <item>
      <title>[러닝] 일반인 러너의 2024 국제국민마라톤 결과는??</title>
      <link>https://record-to-knowledge.tistory.com/18</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;869&quot; data-origin-height=&quot;239&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EF3z1/btsLKLCIh7T/O6hQkjxlU8qxJPlkpwp6lK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EF3z1/btsLKLCIh7T/O6hQkjxlU8qxJPlkpwp6lK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EF3z1/btsLKLCIh7T/O6hQkjxlU8qxJPlkpwp6lK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEF3z1%2FbtsLKLCIh7T%2FO6hQkjxlU8qxJPlkpwp6lK%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;869&quot; height=&quot;239&quot; data-origin-width=&quot;869&quot; data-origin-height=&quot;239&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;2024년 10월 3일 드디어 국제국민마라톤 하프에 참가했어요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;저의 첫 마라톤이기도 한데요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 그런지 굉장히 기대가 많이 되는 마라톤이었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://xn--3e0bu4qnybp6ccs7b.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://xn--3e0bu4qnybp6ccs7b.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1736657975100&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;국제국민마라톤&quot; data-og-description=&quot;&quot; data-og-host=&quot;xn--3e0bu4qnybp6ccs7b.com&quot; data-og-source-url=&quot;https://xn--3e0bu4qnybp6ccs7b.com/&quot; data-og-url=&quot;https://xn--3e0bu4qnybp6ccs7b.com/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://xn--3e0bu4qnybp6ccs7b.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://xn--3e0bu4qnybp6ccs7b.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;국제국민마라톤&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;xn--3e0bu4qnybp6ccs7b.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 style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;준비 과정&lt;/b&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;저의 준비 과정을 보여드리자면&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;제가 러닝을 시작한 7월&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;353&quot; data-origin-height=&quot;402&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkBSER/btsLJBA6nE3/TF2BNTJBPkwzTgTwvH4UR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkBSER/btsLJBA6nE3/TF2BNTJBPkwzTgTwvH4UR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkBSER/btsLJBA6nE3/TF2BNTJBPkwzTgTwvH4UR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkBSER%2FbtsLJBA6nE3%2FTF2BNTJBPkwzTgTwvH4UR1%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;353&quot; height=&quot;402&quot; data-origin-width=&quot;353&quot; data-origin-height=&quot;402&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;슬슬 러닝에 맛을 들이기 시작한 8월(근데 더워서 많이 못뛰었..)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;357&quot; data-origin-height=&quot;402&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BTThy/btsLJtQDjkm/VW8eCbjHYwhR2Lv01fzmG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BTThy/btsLJtQDjkm/VW8eCbjHYwhR2Lv01fzmG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BTThy/btsLJtQDjkm/VW8eCbjHYwhR2Lv01fzmG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBTThy%2FbtsLJtQDjkm%2FVW8eCbjHYwhR2Lv01fzmG1%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;357&quot; height=&quot;402&quot; data-origin-width=&quot;357&quot; data-origin-height=&quot;402&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;대회를 준비한 9월&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;정말 열심히 뛰었습니다ㅠㅠ&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;350&quot; data-origin-height=&quot;407&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c04JtT/btsLJL4AwAO/6B4Dq1ssAls1L0k9l3w2wk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c04JtT/btsLJL4AwAO/6B4Dq1ssAls1L0k9l3w2wk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c04JtT/btsLJL4AwAO/6B4Dq1ssAls1L0k9l3w2wk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc04JtT%2FbtsLJL4AwAO%2F6B4Dq1ssAls1L0k9l3w2wk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;350&quot; height=&quot;407&quot; data-origin-width=&quot;350&quot; data-origin-height=&quot;407&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;마라톤을 뛴 10월&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;349&quot; data-origin-height=&quot;403&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ns8U9/btsLL8KrO3b/ldofTOoB9VmZPC3XZkVSPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ns8U9/btsLL8KrO3b/ldofTOoB9VmZPC3XZkVSPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ns8U9/btsLL8KrO3b/ldofTOoB9VmZPC3XZkVSPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fns8U9%2FbtsLL8KrO3b%2FldofTOoB9VmZPC3XZkVSPk%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;349&quot; height=&quot;403&quot; data-origin-width=&quot;349&quot; data-origin-height=&quot;403&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;사실 체계적으로 준비했다는 말은 못하겠네요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;런닝하러 나가면 얼마나 뛸지를 그날 그날 정했습니다...&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;시간이 많진 않았어서 5km를 가장 많이 뛰었고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;대회가 얼마 남지 않은 보름전 부터는 시간을 좀 더 내서 LSD위주로 달리기를 진행했어요&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;LSD훈련을 많이 했었어야 했는데 대회 보름 전쯤부터 시작한게 아쉽네요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;달리기 연습은 최대한 매일 진행하려고 노력했고,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;뛰면 뛸 수록 달리기 실력이 느는게 느껴졌습니다&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;마라톤 1일 전&lt;/b&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;대회 전날 식사는 탄수화물 위주, 소금기 많은 음식을 피하고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;대회 12시간 전부터 섭취를 자제하라는 말이 있어서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;짜지않게 집밥을 먹었어요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이번 대회는 여의도에서 진행했어요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 하루 전날 여의도에 미리가 숙소에 묵기로 결정했어요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://naver.me/FPnlJA9z&quot;&gt;https://naver.me/FPnlJA9z&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1736650510524&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;네이버 지도&quot; data-og-description=&quot;글래드 여의도&quot; data-og-host=&quot;map.naver.com&quot; data-og-source-url=&quot;https://naver.me/FPnlJA9z&quot; data-og-url=&quot;https://map.naver.com/p/entry/place/35877451?lng=126.9173126&amp;amp;lat=37.5275159&amp;amp;placePath=/home&amp;amp;entry=plt&amp;amp;searchType=place&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bHOTIL/hyX0qTbMRj/VnW3PJf1K36MNYVjkduZk1/img.jpg?width=256&amp;amp;height=256&amp;amp;face=0_0_256_256,https://scrap.kakaocdn.net/dn/xaxIh/hyX0mch3Gv/fCfzEWyBco8qqtpNgeFCnk/img.jpg?width=256&amp;amp;height=256&amp;amp;face=0_0_256_256&quot;&gt;&lt;a href=&quot;https://naver.me/FPnlJA9z&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://naver.me/FPnlJA9z&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bHOTIL/hyX0qTbMRj/VnW3PJf1K36MNYVjkduZk1/img.jpg?width=256&amp;amp;height=256&amp;amp;face=0_0_256_256,https://scrap.kakaocdn.net/dn/xaxIh/hyX0mch3Gv/fCfzEWyBco8qqtpNgeFCnk/img.jpg?width=256&amp;amp;height=256&amp;amp;face=0_0_256_256');&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;네이버 지도&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;map.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;근처 편의점에가서 다음날 먹을 바나나 카스테라를 샀고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;몸을 풀어주기위해 여의도 한강 주변 5km를 천천히 달렸습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;숙소에 들어와서 다음날 마라톤 페이스를 어떻게 할 것인지 에너지 바는 언제 먹을 건지를 생각해 봤어요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;632&quot; data-origin-height=&quot;830&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dI00JJ/btsLKqMqgI5/NSxpTUh04bH6iLoS5uTtgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dI00JJ/btsLKqMqgI5/NSxpTUh04bH6iLoS5uTtgK/img.png&quot; data-alt=&quot;국제국민마라톤 하프 경로&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dI00JJ/btsLKqMqgI5/NSxpTUh04bH6iLoS5uTtgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdI00JJ%2FbtsLKqMqgI5%2FNSxpTUh04bH6iLoS5uTtgK%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;447&quot; height=&quot;587&quot; data-origin-width=&quot;632&quot; data-origin-height=&quot;830&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;국제국민마라톤 하프 경로&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이번 국제 국민 마라톤에서는 에너지젤을 기념품으로 줬는데&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;409&quot; data-origin-height=&quot;594&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdjhoG/btsLKdsYpNs/jQ4nDYO81jC3DwykDauXlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdjhoG/btsLKdsYpNs/jQ4nDYO81jC3DwykDauXlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdjhoG/btsLKdsYpNs/jQ4nDYO81jC3DwykDauXlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdjhoG%2FbtsLKdsYpNs%2FjQ4nDYO81jC3DwykDauXlk%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;336&quot; height=&quot;488&quot; data-origin-width=&quot;409&quot; data-origin-height=&quot;594&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;시작하기 전에 파란색 아미노바이탈 프로 한포&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;10km 지나고 아미노바이탈 아미노샷 한포를 먹기로 계획 했어요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;페이스는 대략 6분 정도로 잡고 2시간 초반을 예상했습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;마라톤 당일&lt;/b&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;6:30&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;아침에 일어나 샤워를 하고 간단하게 어제 산&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;바나나와 카스테라를 먹어줍니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;7:00&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;여의도 공원에 미리가서 짐을 맡기고 여의도 광장 한바퀴를 돌면서 몸을 풀어줬어요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;생각보다 짐 맡기는 줄이 길더라고요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;8:00&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;대망의 마라톤 시작&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;하프는 4명에서 같이 나갔는데 일단 다 같이 완주하는 것이 목표 였어요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;모두가&amp;nbsp; 하프거리를 뛰어 본적이 없으니&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;마라톤때 혹시 완주 하지 못하는 건 아닌지 걱정이 많이 되더라고요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그래도 설레는 마음을 안고 출발~~&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20241003_080143.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AViE4/btsLK1L738O/EwDkCxhuxL3xFDyZXeJxz1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AViE4/btsLK1L738O/EwDkCxhuxL3xFDyZXeJxz1/img.jpg&quot; data-alt=&quot;생각보다 사람이 엄청 많았다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AViE4/btsLK1L738O/EwDkCxhuxL3xFDyZXeJxz1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAViE4%2FbtsLK1L738O%2FEwDkCxhuxL3xFDyZXeJxz1%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;337&quot; height=&quot;449&quot; data-filename=&quot;20241003_080143.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;생각보다 사람이 엄청 많았다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;10:00&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;참 종아리가 아프더라고요..&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;15km뛸때까지는 분명 괜찮았는데&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그 이후로는 뛰어본적 없는 거리라서 그런지&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;종아리가 땡기기 시작 했어요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20241003_083857.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WxpOe/btsLJmjQEDs/bAVdXtnX0X27gZpBZwdXe1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WxpOe/btsLJmjQEDs/bAVdXtnX0X27gZpBZwdXe1/img.jpg&quot; data-alt=&quot;서강대교에서 찍은 한강&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WxpOe/btsLJmjQEDs/bAVdXtnX0X27gZpBZwdXe1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWxpOe%2FbtsLJmjQEDs%2FbAVdXtnX0X27gZpBZwdXe1%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;322&quot; height=&quot;429&quot; data-filename=&quot;20241003_083857.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;서강대교에서 찍은 한강&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;10:20&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;드디어 도착!!!&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;4명에서 서로 잘 이끌어 주면서 낙오자 없이 동시에 도착했어요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;너무나 감격스러운 순간!!&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;솔직히 제가 하프를 뛸 수 있을지 몰랐거든요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;지나가면서 마주쳤던 수 많은 낙오자들을 보면서 쉬고 싶다는 생각도 들었지만&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;중간 중간 처음보는 분들에게 응원도 받고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;자기 자신과의 싸움이라 생각해서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;처음부터 끝까지 포기하지 않고 완주했어요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;(마지막에 여의도 공원을 한바퀴 더 돌라고 했을 땐 욕이 나올려 했지만...)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;기록은 대단하진 않았지만 그래도 완주했다는 것에 만족합니다 ㅎㅎ&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;686&quot; data-origin-height=&quot;520&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQTcXt/btsLKtPOthk/WZwJmszRDAYzSXXcQFjwWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQTcXt/btsLKtPOthk/WZwJmszRDAYzSXXcQFjwWK/img.png&quot; data-alt=&quot;첫 하프 기록&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQTcXt/btsLKtPOthk/WZwJmszRDAYzSXXcQFjwWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQTcXt%2FbtsLKtPOthk%2FWZwJmszRDAYzSXXcQFjwWK%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;532&quot; height=&quot;403&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;686&quot; data-origin-height=&quot;520&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;첫 하프 기록&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;마라톤도 끝났겠다 다음은 뒷풀이죠.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;점심을 먹고&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_1728020590612.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xLqXn/btsLK8R06A4/qpmPRok5x4pP32IWVkSaZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xLqXn/btsLK8R06A4/qpmPRok5x4pP32IWVkSaZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xLqXn/btsLK8R06A4/qpmPRok5x4pP32IWVkSaZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxLqXn%2FbtsLK8R06A4%2FqpmPRok5x4pP32IWVkSaZ0%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;404&quot; height=&quot;303&quot; data-filename=&quot;edited_1728020590612.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;뒷풀이를 위해서 숙소에 들어가서 2시간정도 잤습니다 ㅋㅋㅋ&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;노량진 시장에 가서 회도 먹고&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_1728023132145-0.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgK5My/btsLMan1FFi/gPdIya8jdstOl2nvIrGmt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgK5My/btsLMan1FFi/gPdIya8jdstOl2nvIrGmt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgK5My/btsLMan1FFi/gPdIya8jdstOl2nvIrGmt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgK5My%2FbtsLMan1FFi%2FgPdIya8jdstOl2nvIrGmt0%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;420&quot; height=&quot;315&quot; data-filename=&quot;edited_1728023132145-0.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;숙소근처에서 2차도 했어요&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_1728023132145-6.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1EXQg/btsLJBgJdLy/ri4LUIMlAHCSbl8BldjKgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1EXQg/btsLJBgJdLy/ri4LUIMlAHCSbl8BldjKgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1EXQg/btsLJBgJdLy/ri4LUIMlAHCSbl8BldjKgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1EXQg%2FbtsLJBgJdLy%2Fri4LUIMlAHCSbl8BldjKgK%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;416&quot; height=&quot;312&quot; data-filename=&quot;edited_1728023132145-6.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 저의 마라톤을 마무리했습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;개인적으로는 만족스러운 마라톤이었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;뭐 여러모로 문제점들이 보인 대회인건 맞으나&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;(메달 Hafe 문제, 10km half 병목현상, 물품보관소 문제 등)&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;도착 지점을 지날때의 그 쾌감을 전 아직도 잊지 못 합니다&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;달리기가 이렇게 재밌는지 처음 알았고, 꾸준히 하려고 합니다!&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그런의미에서 다음 마라톤도 신청했어요.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;바로 대구 마라톤 대회!!&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그럼 대구 마라톤 게시물에서 만나요~&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends2&quot; data-emoticon-name=&quot;050&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends2/large/050.png&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends2/large/050.png&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;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>취미생활/러닝</category>
      <category>2024</category>
      <category>Marathon</category>
      <category>국제 국민 마라톤</category>
      <category>달리기</category>
      <category>러너</category>
      <category>러닝</category>
      <category>마라톤</category>
      <category>처음</category>
      <category>초보</category>
      <category>하프</category>
      <author>카방찐</author>
      <guid isPermaLink="true">https://record-to-knowledge.tistory.com/18</guid>
      <comments>https://record-to-knowledge.tistory.com/18#entry18comment</comments>
      <pubDate>Sun, 12 Jan 2025 14:04:51 +0900</pubDate>
    </item>
    <item>
      <title>[자료 구조 / data structure] 그래프(graph)를 표현하는 방법 3가지.</title>
      <link>https://record-to-knowledge.tistory.com/17</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;그래프란?&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;435&quot; data-origin-height=&quot;339&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H8H9S/btsLJgqnKe5/rpFSkqPd3ON3oHVgICe0Zk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H8H9S/btsLJgqnKe5/rpFSkqPd3ON3oHVgICe0Zk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H8H9S/btsLJgqnKe5/rpFSkqPd3ON3oHVgICe0Zk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH8H9S%2FbtsLJgqnKe5%2FrpFSkqPd3ON3oHVgICe0Zk%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;435&quot; height=&quot;339&quot; data-origin-width=&quot;435&quot; data-origin-height=&quot;339&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;그래프(Graph)&lt;/b&gt; 는 &lt;b&gt;노드(정점, Vertex)와&lt;/b&gt;&amp;nbsp;&lt;b&gt;간선(Edge)&lt;/b&gt; 의 집합으로 이루어진 수학적 구조입니다.&lt;/li&gt;
&lt;li&gt;노드들은 어떤 대상을 의미하고, 간선은 이들 노드 사이의 &lt;b&gt;관계나 연결&lt;/b&gt;을 표현합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;그래프 필수 구성 요소&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정의에서도 알 수 있듯이 그래프는 노드와 간선의 집합으로 이루어져 있습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;노드(정점, Vertex)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;그래프에서 다루고자 하는 대상(개체)입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;간선(Edge)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;두 노드를 연결하는 선(관계)입니다.&amp;nbsp;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;유향 그래프(Directed Graph)&lt;/b&gt; 에서는 간선이 방향성을 가집니다.&lt;br /&gt;예:&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;무향 그래프(Undirected Graph)&lt;/b&gt; 에서는 간선이 방향성을 갖지 않습니다.&lt;br /&gt;예:&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, &amp;ldquo;사람들 간의 친구 관계&amp;rdquo;를 표현한다면 &lt;b&gt;각 사람&lt;/b&gt;은 노드 &lt;b&gt;친구 관계&lt;/b&gt;는 간선이 될 수 있습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;그래프를 표현하는 방법&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. &lt;span style=&quot;background-color: #f6e199;&quot;&gt;인접 행렬&lt;/span&gt;(Adjacency Matrix)&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1.1. 정의&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그래프에 존재하는 &lt;b&gt;모든 노드 쌍&lt;/b&gt;(u, v)에 대해, &amp;ldquo;간선이 존재하는지(또는 가중치가 얼마인지)&amp;rdquo;를 나타내는 &lt;b&gt;2차원 배열(행렬)&lt;/b&gt; 로 표현하는 방식입니다.&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt; 노드가 n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;개라면, &lt;span&gt;&lt;span&gt;n&amp;times;n&lt;/span&gt;&lt;/span&gt; 크기의 행렬을 만들고, 각 행과 열을 특정 노드에 대응시킵니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1.2. 예시 구조&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;292&quot; data-origin-height=&quot;300&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bo4uX3/btsLJUmJMQ1/ITmT81uq4k0ckcOZQ57SAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bo4uX3/btsLJUmJMQ1/ITmT81uq4k0ckcOZQ57SAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bo4uX3/btsLJUmJMQ1/ITmT81uq4k0ckcOZQ57SAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbo4uX3%2FbtsLJUmJMQ1%2FITmT81uq4k0ckcOZQ57SAK%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;202&quot; height=&quot;208&quot; data-origin-width=&quot;292&quot; data-origin-height=&quot;300&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 그림과 같이 노드가 0, 1, 2, 3인 유향 그래프라면, 다음과 같은 &lt;b&gt;2차원 리스트&lt;/b&gt;(또는 NumPy 배열)를 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;868&quot; data-origin-height=&quot;95&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQog3Y/btsLKG2oxqf/8qw144h6tQHTPhn9YKREV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQog3Y/btsLKG2oxqf/8qw144h6tQHTPhn9YKREV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQog3Y/btsLKG2oxqf/8qw144h6tQHTPhn9YKREV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQog3Y%2FbtsLKG2oxqf%2F8qw144h6tQHTPhn9YKREV0%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;604&quot; height=&quot;95&quot; data-origin-width=&quot;868&quot; data-origin-height=&quot;95&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;229&quot; data-origin-height=&quot;164&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dd6UF5/btsLK2Yuzwv/lJZhRpqtIlrcpasgekL7Qk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dd6UF5/btsLK2Yuzwv/lJZhRpqtIlrcpasgekL7Qk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dd6UF5/btsLK2Yuzwv/lJZhRpqtIlrcpasgekL7Qk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdd6UF5%2FbtsLK2Yuzwv%2FlJZhRpqtIlrcpasgekL7Qk%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;229&quot; height=&quot;164&quot; data-origin-width=&quot;229&quot; data-origin-height=&quot;164&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&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;&amp;ldquo;0 &amp;rarr; 1&amp;rdquo;과 &amp;ldquo;0 &amp;rarr; 2&amp;rdquo; 간선이 존재하므로 matrix[0][1] = 1, matrix[0][2] = 1&lt;/li&gt;
&lt;li&gt;&amp;ldquo;3 &amp;rarr; 0&amp;rdquo; 간선이 존재하므로 matrix[3][0] = 1&lt;/li&gt;
&lt;li&gt;그 외는 0(간선 없음)&lt;/li&gt;
&lt;li&gt;만약 간선에 가중치가 존재했다면 가중치 값을 배열 값으로 갖는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;ldquo;3 &amp;rarr; 0&amp;rdquo; 간선이 존재하고 가중치가 6이면 matrix[3][0] = 6&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;만약 무향 그래프라면 행렬의 주대각선을 기준으로 대칭이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1.3. 특징&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특정 노드&amp;nbsp;&lt;span&gt;&lt;span&gt;u&lt;/span&gt;&lt;/span&gt;에서 &lt;span&gt;&lt;span&gt;v&lt;/span&gt;&lt;/span&gt;로 가는 간선이 있는지 &lt;b&gt;O(1)&lt;/b&gt; 에 확인 가능&lt;/li&gt;
&lt;li&gt;예: if matrix[u][v] == 1 ...&lt;/li&gt;
&lt;/ul&gt;
&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;노드가&amp;nbsp;&lt;span&gt;&lt;span&gt;n&lt;/span&gt;&lt;/span&gt;개라면, 행렬의 크기는 &lt;span&gt;&lt;span&gt;n^2&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;간선이 별로 없는 &amp;ldquo;희소 그래프(Sparse Graph)&amp;rdquo;에서도 &lt;span&gt;&lt;span&gt;n^2&lt;/span&gt;&lt;/span&gt;&amp;nbsp;공간을 모두 사용해야 함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;밀집 그래프(Dense Graph)&lt;/b&gt; 에서 유리
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;간선이 매우 많아(대부분의 노드쌍이 연결), 메모리 낭비가 크지 않고, 빠른 조회가 가능함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. &lt;span style=&quot;background-color: #f6e199;&quot;&gt;인접 리스트&lt;/span&gt;(Adjacency List)&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.1. 정의&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;각 노드에 대해, &lt;b&gt;해당 노드와 직접 연결된(인접한) 노드들의 목록&lt;/b&gt;을 저장하는 방식입니다.&lt;/li&gt;
&lt;li&gt;Python에서는 보통 &lt;b&gt;딕셔너리&lt;/b&gt; 또는 &lt;b&gt;리스트&lt;/b&gt;를 이용해 adj_list[u] 에 u와 연결된 이웃 노드들의 리스트(또는 집합)를 보관합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.2. 예시 구조&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;노드이 A, B, C, D인 그래프에서, 간선이 다음과 같다고 합시다(유향 그래프 예시)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;304&quot; data-origin-height=&quot;304&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8QkIp/btsLJTOWFBF/7lzj9IOvSRKJKfKIsmxuR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8QkIp/btsLJTOWFBF/7lzj9IOvSRKJKfKIsmxuR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8QkIp/btsLJTOWFBF/7lzj9IOvSRKJKfKIsmxuR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8QkIp%2FbtsLJTOWFBF%2F7lzj9IOvSRKJKfKIsmxuR1%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;197&quot; height=&quot;197&quot; data-origin-width=&quot;304&quot; data-origin-height=&quot;304&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인접 리스트는 다음과 비슷한 형태가 됩니다&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;240&quot; data-origin-height=&quot;282&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLz1qB/btsLKont7PD/IK6wvlJxXJmiiUVGOaPPBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLz1qB/btsLKont7PD/IK6wvlJxXJmiiUVGOaPPBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLz1qB/btsLKont7PD/IK6wvlJxXJmiiUVGOaPPBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLz1qB%2FbtsLKont7PD%2FIK6wvlJxXJmiiUVGOaPPBK%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;240&quot; height=&quot;282&quot; data-origin-width=&quot;240&quot; data-origin-height=&quot;282&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.3. 특징&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;희소 그래프(Sparse Graph)에 유리&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;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특정 간선(u&amp;rarr;v)의 존재 확인 시 O(k)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;adj_list[u]에 들어 있는 연결 목록을 확인해야 하므로, 최악의 경우 u의 인접 노드 개수(k)만큼 순회 필요.&lt;/li&gt;
&lt;/ul&gt;
&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;adj_list[u]를 바로 열람하면 되므로 빠르고 직관적.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. &lt;span style=&quot;background-color: #f6e199;&quot;&gt;간선 리스트&lt;/span&gt;(Edge List)&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3.1 정의&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;ldquo;간선이 몇 개 있다면, 그 모든 간선을 하나씩 기록한 목록&amp;rdquo;이 곧&amp;nbsp;간선 리스트&amp;nbsp;입니다.&lt;/li&gt;
&lt;li&gt;그래프의 노드들을 별도로 관리(예: 집합, 리스트)하고, &lt;b&gt;간선(Edge)&lt;/b&gt; 들을 &amp;ldquo;(출발 노드, 도착 노드)&amp;rdquo; 형태로 &lt;b&gt;모두 나열&lt;/b&gt;하여 &lt;b&gt;리스트&lt;/b&gt;에 담아 놓습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3.2 예시 구조 (유향 그래프)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 유향 그래프(Directed Graph)에서 노드이 A, B, C, D이고,&lt;br /&gt;간선이 아래와 같다고 해봅시다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;A &amp;rarr; B&lt;/li&gt;
&lt;li&gt;A &amp;rarr; C&lt;/li&gt;
&lt;li&gt;B &amp;rarr; D&lt;/li&gt;
&lt;li&gt;C &amp;rarr; D&lt;/li&gt;
&lt;li&gt;D &amp;rarr; A&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 &lt;b&gt;간선 리스트&lt;/b&gt;로 표현하면, (출발, 도착) 튜플을 원소로 하는 리스트가 됩니다.&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;pre id=&quot;code_1736591484827&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;edges = [
    (&quot;A&quot;, &quot;B&quot;),
    (&quot;A&quot;, &quot;C&quot;),
    (&quot;B&quot;, &quot;D&quot;),
    (&quot;C&quot;, &quot;D&quot;),
    (&quot;D&quot;, &quot;A&quot;)
]&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3.3. 예시 구조 (무향 그래프)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무향 그래프(Undirected Graph)에서 노드이 A, B, C, D이고,&lt;br /&gt;간선이 아래와 같다고 해봅시다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;A - B&lt;/li&gt;
&lt;li&gt;A - C&lt;/li&gt;
&lt;li&gt;B - D&lt;/li&gt;
&lt;li&gt;C - D&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 &lt;b&gt;간선 리스트&lt;/b&gt;로 표현하면, (노드1, 노드2) 튜플을 원소로 하는 리스트를 만들 수 있습니다.&lt;br /&gt;무향이므로 (A, B)는 (B, A)와 같은 간선을 의미하니, 중복 기록에 주의해야 합니다.&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;ldquo;(더 작은 노드, 더 큰 노드) 형태로만 저장한다&amp;rdquo;는 규칙을 정해서 중복을 방지할 수도 있습니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1736591546435&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;edges = [
    (&quot;A&quot;, &quot;B&quot;),
    (&quot;A&quot;, &quot;C&quot;),
    (&quot;B&quot;, &quot;D&quot;),
    (&quot;C&quot;, &quot;D&quot;)
]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3.4 특징&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그래프의 연결 관계를 &lt;b&gt;&amp;ldquo;간선 단위&amp;rdquo;&lt;/b&gt;로 파악하기 쉽습니다.&lt;/li&gt;
&lt;li&gt;예: MST(최소 신장 트리)를 찾는 &lt;b&gt;Kruskal 알고리즘&lt;/b&gt; 같은 경우, 모든 간선을 정렬해서 처리하므로 &lt;b&gt;간선 리스트&lt;/b&gt;가 바로 유용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;인접 정보 확인(Adjacency)에는 비효율적&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;어떤 노드 u에서 v로 가는 간선이 있는지 확인하려면, &lt;b&gt;전체 간선 리스트를 뒤져야&lt;/b&gt; 합니다(최악 O(e), e = 간선 수).&lt;/li&gt;
&lt;li&gt;인접 리스트(Adjacency List)나 인접 행렬(Adjacency Matrix)에 비해 u의 이웃 노드를 빠르게 찾기는 어렵습니다.&lt;/li&gt;
&lt;/ul&gt;
&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;간선 수 e가 적어도, 혹은 많아도 단순히 리스트 크기가 달라질 뿐이므로 구조적으로 문제는 없습니다.&lt;/li&gt;
&lt;li&gt;다만, &lt;b&gt;인접 리스트&lt;/b&gt;나 &lt;b&gt;인접 행렬&lt;/b&gt;에 비해 장점이 큰 경우는 &amp;ldquo;간선을 직접 순회해야 하는 알고리즘&amp;rdquo;을 사용할 때입니다.&lt;/li&gt;
&lt;/ul&gt;
&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;오직 간선 수 e에 비례합니다(간선을 (u,v) 튜플로 기록).&lt;/li&gt;
&lt;li&gt;&amp;ldquo;노드 수가 매우 많지만 간선이 극도로 적은&amp;rdquo; 그래프에서도, 불필요한 공간 낭비가 없이 필요한 간선만 저장할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;요약&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 140px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 23.6047%; height: 20px;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 26.3953%; height: 20px;&quot;&gt;인접 행렬 (Adj. Matrix)&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 20px;&quot;&gt;인접 리스트 (Adj. List)&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 20px;&quot;&gt;간선 리스트 (Edge List)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 23.6047%; height: 20px;&quot;&gt;구조&lt;/td&gt;
&lt;td style=&quot;width: 26.3953%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;&amp;times;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;크기의 2차원 배열&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 20px;&quot;&gt;각 노드에 대해 인접한 노드 목록(리스트&amp;middot;딕셔너리 등)&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 20px;&quot;&gt;간선 자체를 &amp;ldquo;(u, v)&amp;rdquo; 튜플 목록으로 모두 나열&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 15px;&quot;&gt;
&lt;td style=&quot;width: 23.6047%; height: 15px;&quot;&gt;간선 존재 조회&lt;/td&gt;
&lt;td style=&quot;width: 26.3953%; height: 15px;&quot;&gt;&lt;b&gt;O(1)&lt;/b&gt; (배열 인덱스 접근)&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 15px;&quot;&gt;&lt;b&gt;O(k)&lt;/b&gt; (k는 노드 u의 인접 노드 수)&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 15px;&quot;&gt;&lt;b&gt;O(e)&lt;/b&gt; (전체 간선 수 e를 순회할 수도 있음)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 23.6047%; height: 17px;&quot;&gt;메모리 사용량&lt;/td&gt;
&lt;td style=&quot;width: 26.3953%; height: 17px;&quot;&gt;&lt;b&gt; O(&lt;span&gt;&lt;span&gt;n^2&lt;/span&gt;&lt;/span&gt;) &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;&lt;b&gt;O(n + e)&lt;/b&gt; ( 노드 n, 간선 e)&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;&lt;b&gt;O(e)&lt;/b&gt; (간선 개수)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 23.6047%; height: 17px;&quot;&gt;희소 그래프에 대한 효율성&lt;/td&gt;
&lt;td style=&quot;width: 26.3953%; height: 17px;&quot;&gt;간선이 적어도 &lt;span&gt;&lt;span&gt;n^2&lt;/span&gt;&lt;/span&gt;&amp;nbsp;공간을 사용하므로 &lt;b&gt;비효율적&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;필요한 연결 정보만 저장하므로 &lt;b&gt;효율적&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;필요한 간선만 목록에 기록하므로 &lt;b&gt;메모리 낭비 적음&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 23.6047%; height: 17px;&quot;&gt;밀집 그래프에 대한 효율성&lt;/td&gt;
&lt;td style=&quot;width: 26.3953%; height: 17px;&quot;&gt;간선이 매우 많을 경우 &lt;b&gt;공간 낭비가 크지 않고 조회가 빠름&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;간선이 너무 많으면 인접 리스트의 크기가 커지고 관리 비용 증가&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;간선이 매우 많아도 e가 커짐에 따라 리스트 길이도 증가, 조회 비용도 커짐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 23.6047%; height: 17px;&quot;&gt;장점&lt;/td&gt;
&lt;td style=&quot;width: 26.3953%; height: 17px;&quot;&gt;- 특정 간선(u&amp;rarr;v) 존재 여부를 O(1)에 확인&lt;br /&gt;- 빠른 조회&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;- 특정 노드에 인접한 이웃 리스트를 빠르게 가져옴&lt;br /&gt;- 희소 그래프에 메모리 효율적&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;- 구조가 단순, 모든 간선을 직접 확인 가능&lt;br /&gt;- Kruskal 등 &amp;ldquo;간선 중심&amp;rdquo; 알고리즘에서 유리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 23.6047%; height: 17px;&quot;&gt;단점&lt;/td&gt;
&lt;td style=&quot;width: 26.3953%; height: 17px;&quot;&gt;- 노드가 많고 간선이 적으면 &lt;b&gt;대부분 0&lt;/b&gt;인 행렬로 메모리 낭비&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;- u&amp;rarr;v 간선 존재 여부 확인 시 O(k) 순회 필요&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;- 특정 간선 존재 여부 또는 특정 노드의 인접 노드 조회는 최악 O(e)로 느림&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자료 구조( data structure)</category>
      <category>adjacency list</category>
      <category>adjacency matrix</category>
      <category>edge list</category>
      <category>graph</category>
      <category>간선리스트</category>
      <category>그래프</category>
      <category>인접리스트</category>
      <category>인접행렬</category>
      <category>자료구조</category>
      <category>프로그래밍</category>
      <author>카방찐</author>
      <guid isPermaLink="true">https://record-to-knowledge.tistory.com/17</guid>
      <comments>https://record-to-knowledge.tistory.com/17#entry17comment</comments>
      <pubDate>Sat, 11 Jan 2025 20:27:26 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬 / python] 객체 지향 프로그래밍(Object Oriented Programming)</title>
      <link>https://record-to-knowledge.tistory.com/16</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;객체 지향 프로그래밍(Object Oriented Programming)이란&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;객체를 프로그램의 기본 단위로 보고 객체의 행동을 설명하는 프로그램 설계 방법론의 일종이다.&amp;nbsp;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조금 어렵게 느껴질 수 있으니 다음의 예시를 보며 이해해 보자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 돈이 50원 있는 사람 A,&amp;nbsp; 돈이 30원 있는 사람 B 가 있다고 해보자&lt;/p&gt;
&lt;pre id=&quot;code_1726996037680&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1-1

A_money=50
B_money=30

def A_pay_money(money):
    global A_money
    A_money-=money
def B_pay_money(money):
    global B_money
    B_money-=money
    
A_pay_money(20)
B_pay_money(10)
print(A_money)
print(B_money)&lt;/code&gt;&lt;/pre&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1736258315805&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;30
20&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A와 B가 돈을 낸다고 했을 때 위와 같이 짜면 별 문제가 없어보인다.&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;여기서 A와 B 가 돈을 버는 상황을 추가해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드는 다음과 같이 수정된다.&lt;/p&gt;
&lt;pre id=&quot;code_1736258268217&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1-2

A_money=50
B_money=30

def A_pay_money(money):
    global A_money
    A_money-=money
def B_pay_money(money):
    global B_money
    B_money-=money
    
def A_earn_money(money):
    global A_money
    A_money+=money
def B_earn_money(money):
    global B_money
    B_money+=money
    
A_earn_money(20)
B_earn_money(10)
print(A_money)
print(B_money)&lt;/code&gt;&lt;/pre&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1736258346054&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;70
40&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;돈을 버는 행동을 추가하기위해 A를 위한 함수, B를 위한 함수를 추가해야 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 불편함이 느껴지지 않는가.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 돈 버는 구조에 변화가 생겨서 B_money=B_money+&lt;b&gt;&lt;span style=&quot;background-color: #409d00;&quot;&gt;2&lt;/span&gt;&lt;/b&gt;*money가 되면 A와 B를 모두 수정해줘야한다.&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; 늘어나 사람 C도 추가 된다면 함수를 3개 작성해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같이 말이다.&lt;/p&gt;
&lt;pre id=&quot;code_1736258737064&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1-3

A_money=50
B_money=30
C_money=20

def A_pay_money(money):
    global A_money
    A_money-=money
def B_pay_money(money):
    global B_money
    B_money-=money
def C_pay_money(money):
    global C_money
    C_money-=money
    
def A_earn_money(money):
    global A_money
    A_money+=money
def B_earn_money(money):
    global B_money
    B_money+=money
def C_earn_money(money):
    global C_money
    C_money+=money
    
C_earn_money(20)
C_pay_money(30)
print(C_money)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1736258760815&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;10&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;문제점은 한가지가 더 있다. 만약 D를 추가 한다고 했을때 D_money를 어디서 선언할 것인가. D와 관련된 함수는 어디서 선언할 것인가.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금과 같이 작은 프로그램이라면 상관없지만 프로그램 사이즈가 더 커진다면 변수와 함수의 위치가 뒤죽박죽이 될 수 있어 관리가 어렵고 실수할 가능성이 높아진다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리하자면 문제점은&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째, &lt;b&gt;코드 중복&lt;/b&gt;: 사람을 추가하려면 여러 함수를 작성해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;둘째, &lt;b&gt;확장성 부족&lt;/b&gt;: 새로운 기능(예: pay, earn)을 추가하려면 많은 코드를 작성해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;셋째, &lt;b&gt;데이터와 행동의 분리&lt;/b&gt;: 데이터(A_money,B_money)와 행동(pay,earn)이 분리되어 관리가 어렵고, 실수 가능성이 높다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지의 프로그래밍 방법을 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;절차 지향 프로그래밍&lt;/span&gt;(Procedural Oriented Programming)이라고 하고, 이를 통해 발생한 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;문제를 해결하기 위해&lt;/span&gt; 등장한 프로그래밍 기법이 &lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;객체 지향 프로그래밍&lt;/span&gt;&lt;/b&gt;(Object Oriented Programming)이다. 객체(Object)를 만들어 &lt;b&gt;변수&lt;/b&gt;와 &lt;b&gt;함수&lt;/b&gt;를 &lt;b&gt;한 집합&lt;/b&gt;에 모으고 &lt;b&gt;객체내에 있는&lt;/b&gt; 함수를 활용하여 프로그래밍을 작성한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 1-3을 객체 지향 프로그래밍으로 바꿔보면 다음과 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1736259614492&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Person:
    def __init__(self, money):
        self.money = money

    def pay_money(self, amount):
        self.money -= amount

    def earn_money(self, amount):
        self.money += amount

    def show_money(self):
        print(self.money)

# 객체 생성
A = Person(50)
B = Person(30)
C = Person(20)

# 행동 수행
C.earn_money(20)  # C가 돈을 20 벌음
C.pay_money(30)   # C가 돈을 30 지출

# 결과 출력
C.show_money()&lt;/code&gt;&lt;/pre&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1736259815926&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;10&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;지금 class에 관한 자세한 설명은 아래에서 하곘다.&amp;nbsp; 지금은 객체 지향 프로그래밍을 왜 하는지만 이해해 주었으면 좋겠다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Class Person을 이용하여 A, B, C라는 객체를 생성하고 각각의 객체는 공통의 함수를 사용할 수 있다. 이를 통해 객체 지향 프로그래밍으로 함수의 수정과 추가, 객체의 추가와 삭제가 용이해졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;객체 지향 프로그래밍&lt;/b&gt;&lt;/span&gt;(OOP)은 &lt;b&gt;우리가 세상을 바라보는 방식&lt;/b&gt;과 유사하게 작동하기 때문에 &lt;b&gt;코드를 이해하기 쉽고 가독성이 높다&lt;/b&gt;. &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;절차 지향 프로그래밍&lt;/b&gt;&lt;/span&gt;은 단순히 사람의 돈 증감 과정을 처리하기 위한 &lt;b&gt;논리적 절차를 따르는 방식&lt;/b&gt;이었다. 반면, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;객체 지향 프로그래밍&lt;/b&gt;&lt;/span&gt;에서는 사람을 하나의 객체로 보고, 돈의 증감 같은 동작을 &lt;b&gt;객체 내부의 함수로 처리&lt;/b&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;객체 지향 프로그래밍&lt;/b&gt;&lt;/span&gt;은 복잡한 시스템에서 구조를 &lt;b&gt;체계적으로 관리&lt;/b&gt;하고, &lt;b&gt;확장성&lt;/b&gt;과 &lt;b&gt;재사용성&lt;/b&gt;을 &lt;b&gt;극대화&lt;/b&gt;하는 데 유리하다. 새로운 역할이나 기능을 추가할 때 객체 지향 방식을 사용하면 적은 노력으로도 &lt;b&gt;변경&lt;/b&gt;과 &lt;b&gt;확장&lt;/b&gt;이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>python</category>
      <category>class</category>
      <category>object</category>
      <category>OOP</category>
      <category>POP</category>
      <category>객체</category>
      <category>객체 지향 프로그래밍</category>
      <category>절차 지향 프로그래밍</category>
      <category>클레스</category>
      <category>파이썬</category>
      <category>프로그래밍</category>
      <author>카방찐</author>
      <guid isPermaLink="true">https://record-to-knowledge.tistory.com/16</guid>
      <comments>https://record-to-knowledge.tistory.com/16#entry16comment</comments>
      <pubDate>Sun, 29 Sep 2024 16:42:45 +0900</pubDate>
    </item>
  </channel>
</rss>