<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Looan's 개발 연습장</title>
    <link>https://looancheong.tistory.com/</link>
    <description>이 블로그가 누군가에게 한 줄기의 빛이 되었으면 합니다.</description>
    <language>ko</language>
    <pubDate>Wed, 8 Jul 2026 05:40:41 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>LooanCheong</managingEditor>
    <item>
      <title>[파이썬, Python] 백준 21610: 마법사 상어와 비바라기</title>
      <link>https://looancheong.tistory.com/277</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;1155&quot; data-origin-height=&quot;893&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dhvkxQ/btsHnisiLDQ/NkEUUSK9xbODPjOG6d2B00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dhvkxQ/btsHnisiLDQ/NkEUUSK9xbODPjOG6d2B00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dhvkxQ/btsHnisiLDQ/NkEUUSK9xbODPjOG6d2B00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdhvkxQ%2FbtsHnisiLDQ%2FNkEUUSK9xbODPjOG6d2B00%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;1155&quot; height=&quot;893&quot; data-origin-width=&quot;1155&quot; data-origin-height=&quot;893&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/21610&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/21610&lt;/a&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;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1715598073530&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
input = sys.stdin.readline

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

cloud = [[n - 1, 0], [n - 1, 1], [n - 2, 0], [n - 2, 1]]

def move_cloud():
    move_cloud = []
    order = [(0, 0), (0, -1), (-1, -1), (-1, 0), (-1, 1), (0, 1), (1, 1), (1, 0), (1, -1)]

    d, s = map(int, input().split())

    dir = order[d]

    for i in range(len(cloud)):
        new_i0 = (cloud[i][0] + dir[0] * s) % n
        new_i1 = (cloud[i][1] + dir[1] * s) % n

        move_cloud.append([new_i0, new_i1])
        visited[new_i0][new_i1] = True

    return move_cloud

def rain():
    global cloud

    for i in range(len(cloud)):
        buckets[cloud[i][0]][cloud[i][1]] += 1

        del_cloud.append([cloud[i][0], cloud[i][1]])

    cloud = list()

def water_copy():
    for i in del_cloud:
        r, c = i

        dr = [1, 1, -1, -1]
        dc = [1, -1, 1, -1]

        for i in range(4):
            nr = r + dr[i]
            nc = c + dc[i]

            if 0 &amp;lt;= nr &amp;lt; n and 0 &amp;lt;= nc &amp;lt; n and buckets[nr][nc] &amp;gt; 0:
                buckets[r][c] += 1

def new_cloud():
    for i in range(n):
        for j in range(n):
            if buckets[i][j] &amp;gt;= 2 and not visited[i][j]:
                buckets[i][j] -= 2
                cloud.append([i, j])

for _ in range(m):
    del_cloud = list()
    visited = [[False] * n for _ in range(n)]
    cloud = move_cloud()
    rain()
    water_copy()
    new_cloud()

print(sum(map(sum, buckets)))&lt;/code&gt;&lt;/pre&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, 처음에 deque으로 접근했다가 시간 초과가 많이 나서 list 풀이로 변경했는데, 고치고 나서 생각해 보니 시간 초과의 문제는 다른 곳에서 났던 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구름을 새로 생성하는 과정(new_cloud())에서 이전에 구름이 있었던 곳을 체크하는 과정에서&lt;/p&gt;
&lt;pre id=&quot;code_1715598208889&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...
if buckets[i][j] &amp;gt;= 2 and [i, j] not in del_cloud:
...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 방식으로 확인을 했었는데 아무래도 이 부분이 시간 초과의 원인이 되었던 것 같다.&lt;br /&gt;해결 코드의 방식처럼 방문 여부를 확인해서 구름을 생성하는 방식으로 바꿨더니 해결이 가능했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 해결을 위해 다른 분들의 시간 초과 원인을 살펴보니 구름을 이동하는 과정에서 좌표를 체크하는 방식의 문제가 있었는데 처음에 짰던 코드와 유사한 곳에서도 시간 초과가 날 수 있다는 사실을 알았다.&lt;/p&gt;
&lt;pre id=&quot;code_1715598493220&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...
        while new_i0 &amp;lt; 0:
            new_i0 += n

        if new_i0 &amp;gt;= n:
            new_i0 %= n

        while new_i1 &amp;lt; 0:
            new_i1 += n

        if new_i1 &amp;gt;= n:
            new_i1 %= n&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 느낌의 코드도 시간 초과가 날 수 있다고 하니 유의해야겠다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>백준</category>
      <category>백준 21610 시간초과</category>
      <category>백준 21610 파이썬</category>
      <category>백준 21610 파이썬 시간초과</category>
      <category>백준 파이썬</category>
      <category>알고리즘</category>
      <category>코테</category>
      <category>파이썬</category>
      <category>파이썬 deque</category>
      <category>파이썬 list</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/277</guid>
      <comments>https://looancheong.tistory.com/277#entry277comment</comments>
      <pubDate>Mon, 13 May 2024 20:09:19 +0900</pubDate>
    </item>
    <item>
      <title>[자바, Java] 백준 31575: 도시와 비트코인</title>
      <link>https://looancheong.tistory.com/276</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;1157&quot; data-origin-height=&quot;872&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciBGcN/btsGqtHPNbn/zlNAeX7Zju9NEpvmwLj2V1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciBGcN/btsGqtHPNbn/zlNAeX7Zju9NEpvmwLj2V1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciBGcN/btsGqtHPNbn/zlNAeX7Zju9NEpvmwLj2V1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciBGcN%2FbtsGqtHPNbn%2FzlNAeX7Zju9NEpvmwLj2V1%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;1157&quot; height=&quot;872&quot; data-origin-width=&quot;1157&quot; data-origin-height=&quot;872&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/31575&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/31575&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1712490598944&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;31575번: 도시와 비트코인&quot; data-og-description=&quot;전날에 비해 비트코인의 시세가 백만원이나 오른 어느 아침, 진우는 거래소에 가서 비트코인을 매도하려고 한다. 현재 비트코인의 시세가 점점 떨어지고 있기 때문에 진우는 최대한 빨리 거래&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/31575&quot; data-og-url=&quot;https://www.acmicpc.net/problem/31575&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/tc3v3/hyVJWuznWf/9rI8Ee95DbT63uKfYnZthk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/31575&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/31575&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/tc3v3/hyVJWuznWf/9rI8Ee95DbT63uKfYnZthk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;31575번: 도시와 비트코인&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;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1712490644916&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {

    static int n;
    static int m;
    static int[][] city;
    static boolean[][] visited;

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());

        city = new int[m][n];

        for (int i = 0; i &amp;lt; m; i++) {
            st = new StringTokenizer(br.readLine());

            for (int j = 0; j &amp;lt; n; j++) {
                city[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        if (bfs()) {
            System.out.println(&quot;Yes&quot;);
        } else {
            System.out.println(&quot;No&quot;);
        }
    }

    private static boolean bfs() {
        visited = new boolean[m][n];

        int[] dx = {1, 0};
        int[] dy = {0, 1};

        Queue&amp;lt;int[]&amp;gt; q = new LinkedList&amp;lt;&amp;gt;();
        q.add(new int[]{0, 0});
        visited[0][0] = true;

        while (!q.isEmpty()) {
            int[] nums = q.poll();
            int x = nums[1];
            int y = nums[0];

            for (int i = 0; i &amp;lt; 2; i++) {
                int nx = x + dx[i];
                int ny = y + dy[i];

                if (0 &amp;lt;= nx &amp;amp;&amp;amp; 0 &amp;lt;= ny &amp;amp;&amp;amp; nx &amp;lt; n &amp;amp;&amp;amp; ny &amp;lt; m &amp;amp;&amp;amp; !visited[ny][nx] &amp;amp;&amp;amp; city[ny][nx] == 1) {
                    visited[ny][nx] = true;
                    q.add(new int[]{ny, nx});
                }
            }
        }
        return visited[m - 1][n - 1];
    }
}&lt;/code&gt;&lt;/pre&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;자바로 코테를 연습할 일이 생겨서 오래간만에 BFS 문제를 풀어보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;흔한 BFS 문제였는데 동쪽과 남쪽으로만 이동한다는 조건을 놓쳐서 잠시 헤맨 문제였다.&lt;br /&gt;n과 m의 입력도 반대로 주어져서 주의를 해야하는 문제다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 입력값을 받아주고 도시 정보를 세팅해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 bfs를 실행하는데, 움직일 수 있는 방향이 동쪽과 남쪽이므로 이동할 수 있는 dx, dy를 해당 좌표로 설정을 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후에 큐에 시작 좌표를 넣고 탐색을 하며 visited 값을 체크해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 visited 좌표에 따라 결과를 출력한다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>java</category>
      <category>백준</category>
      <category>백준 31575</category>
      <category>백준 31575 자바</category>
      <category>자바</category>
      <category>자바 bfs</category>
      <category>자바11</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/276</guid>
      <comments>https://looancheong.tistory.com/276#entry276comment</comments>
      <pubDate>Sun, 7 Apr 2024 21:26:09 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL] MySQL 오류해결: Could not acquire management access for administration</title>
      <link>https://looancheong.tistory.com/275</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;0. 오류 발생&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;379&quot; data-origin-height=&quot;223&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Vz4zP/btsFHqY5OYN/3HYrhxpgrdWotKVsCPwfS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Vz4zP/btsFHqY5OYN/3HYrhxpgrdWotKVsCPwfS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Vz4zP/btsFHqY5OYN/3HYrhxpgrdWotKVsCPwfS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVz4zP%2FbtsFHqY5OYN%2F3HYrhxpgrdWotKVsCPwfS0%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;287&quot; height=&quot;169&quot; data-origin-width=&quot;379&quot; data-origin-height=&quot;223&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;364&quot; data-origin-height=&quot;214&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzEUuz/btsFJ2vXt0w/X824gRK3qhUcqZMSUQ2Kk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzEUuz/btsFJ2vXt0w/X824gRK3qhUcqZMSUQ2Kk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzEUuz/btsFJ2vXt0w/X824gRK3qhUcqZMSUQ2Kk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzEUuz%2FbtsFJ2vXt0w%2FX824gRK3qhUcqZMSUQ2Kk1%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;276&quot; height=&quot;162&quot; data-origin-width=&quot;364&quot; data-origin-height=&quot;214&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트를 실행시켰는데 데이터베이스에 연결이 되지 않아서 MySQL 워크벤치를 띄웠더니 이런 창이 기다리고 있다.&lt;br /&gt;처음에는 환경변수와 관련이 있다고 생각했지만 그러기엔 이미 몇 번이나 사용을 했었다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 원인 찾기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이리저리 찾아보다가 MySQL 서버가 꺼져있을 수 있다는 게시글을 확인하고 작업관리자를 통해 확인했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;647&quot; data-origin-height=&quot;25&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9OI9L/btsFE2kACtb/YwIZNFEpjzzXFgoEFySCI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9OI9L/btsFE2kACtb/YwIZNFEpjzzXFgoEFySCI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9OI9L/btsFE2kACtb/YwIZNFEpjzzXFgoEFySCI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9OI9L%2FbtsFE2kACtb%2FYwIZNFEpjzzXFgoEFySCI0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;647&quot; height=&quot;25&quot; data-origin-width=&quot;647&quot; data-origin-height=&quot;25&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;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 해결&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;404&quot; data-origin-height=&quot;43&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/K3wNG/btsFF9wMUBs/pFqqg8euLkjik0sBkEW2Rk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/K3wNG/btsFF9wMUBs/pFqqg8euLkjik0sBkEW2Rk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/K3wNG/btsFF9wMUBs/pFqqg8euLkjik0sBkEW2Rk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FK3wNG%2FbtsFF9wMUBs%2FpFqqg8euLkjik0sBkEW2Rk%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;43&quot; data-origin-width=&quot;404&quot; data-origin-height=&quot;43&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;260&quot; data-origin-height=&quot;157&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/41g7l/btsFIg9Kl4b/hAzN9ljvWkA5RqEDYGyv3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/41g7l/btsFIg9Kl4b/hAzN9ljvWkA5RqEDYGyv3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/41g7l/btsFIg9Kl4b/hAzN9ljvWkA5RqEDYGyv3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F41g7l%2FbtsFIg9Kl4b%2FhAzN9ljvWkA5RqEDYGyv3K%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;260&quot; height=&quot;157&quot; data-origin-width=&quot;260&quot; data-origin-height=&quot;157&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작업관리자의 서비스 탭에 들어가서 MySQL 서버를 수동으로 시작해 주자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 실행이 완료가 가능해졌다.&lt;/p&gt;</description>
      <category>개발 연습장/MySQL</category>
      <category>DB 연결 안됨</category>
      <category>DB 연결 오류</category>
      <category>MySQL</category>
      <category>MySQL could not</category>
      <category>mysql 에러</category>
      <category>MySQL 연결 안됨</category>
      <category>MySQL 오류</category>
      <category>spring db</category>
      <category>spring mysql</category>
      <category>Spring MySQL 연결 오류</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/275</guid>
      <comments>https://looancheong.tistory.com/275#entry275comment</comments>
      <pubDate>Tue, 12 Mar 2024 08:20:01 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 2096: 내려가기</title>
      <link>https://looancheong.tistory.com/274</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;1036&quot; data-origin-height=&quot;914&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nTqsy/btsFFmnBpga/DS4ok30w9mMST6WYUdjbak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nTqsy/btsFFmnBpga/DS4ok30w9mMST6WYUdjbak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nTqsy/btsFFmnBpga/DS4ok30w9mMST6WYUdjbak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnTqsy%2FbtsFFmnBpga%2FDS4ok30w9mMST6WYUdjbak%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;1036&quot; height=&quot;914&quot; data-origin-width=&quot;1036&quot; data-origin-height=&quot;914&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2096&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/2096&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1709839967920&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;2096번: 내려가기&quot; data-og-description=&quot;첫째 줄에 N(1 &amp;le; N &amp;le; 100,000)이 주어진다. 다음 N개의 줄에는 숫자가 세 개씩 주어진다. 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나가 된다.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2096&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2096&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/QaLFc/hyVxtdvfpS/9MMx6TDBKHIzJJUc29cLd0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2096&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2096&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/QaLFc/hyVxtdvfpS/9MMx6TDBKHIzJJUc29cLd0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;2096번: 내려가기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 N(1 &amp;le; N &amp;le; 100,000)이 주어진다. 다음 N개의 줄에는 숫자가 세 개씩 주어진다. 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나가 된다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1709839977320&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;n = int(input())

board = list(map(int, input().split()))

top = board
bottom = board

for _ in range(n - 1):
    board = list(map(int, input().split()))

    top = [board[0] + max(top[0], top[1]), board[1] + max(top), board[2] + max(top[1], top[2])]
    bottom = [board[0] + min(bottom[0], bottom[1]), board[1] + min(bottom), board[2] + min(bottom[1], bottom[2])]

print(max(top), min(bottom))&lt;/code&gt;&lt;/pre&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 갈 수 있는 방향의 점수를 구해주는 방법은 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1번 칸의 경우 윗 줄의 1번, 2번 중에 제일 큰 수와 현재 줄의 1번 칸의 합&lt;br /&gt;2번 칸의 경우 윗 줄의 1번, 2번, 3번 중에 제일 큰 수와 현재 줄의 2번 칸의 합&lt;br /&gt;3번 칸의 경우 윗 줄의 2번, 3번 중에 제일 큰 수와 현재 줄의 3번 칸의 합&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 점화식은 간단하게 세울 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 주어진 메모리가 굉장히 작기 때문에 이를 해결해야 하는데&lt;br /&gt;이는 변수를 재활용하면서 해결이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력 값을 한 번에 받지 않고 각 줄마다 받아주며, 이때의 최대, 최소 값을 계산해 준다.&lt;br /&gt;이러한 방식으로 사용했던&amp;nbsp;공간에 재할당하여 메모리의 사용을 줄인다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>dp</category>
      <category>다이나믹 프로그래밍</category>
      <category>백준</category>
      <category>백준 2096</category>
      <category>백준 2096 파이썬</category>
      <category>백준 2096 파이썬 메모리 부족</category>
      <category>파이썬</category>
      <category>파이썬 DP</category>
      <category>파이썬 메모리</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/274</guid>
      <comments>https://looancheong.tistory.com/274#entry274comment</comments>
      <pubDate>Fri, 8 Mar 2024 04:38:01 +0900</pubDate>
    </item>
    <item>
      <title>[Java, Spring] DTO에서 사용하는 @Setter에 대한 고찰</title>
      <link>https://looancheong.tistory.com/273</link>
      <description>&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;최근 개인적으로 Spring을 이용한 프로젝트를 진행하면서 Form에서 데이터를 받아오는 것을 구현하고 있었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;330&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mmAw2/btsFir50pT6/0moUCmolk8QWkauP3Eugu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mmAw2/btsFir50pT6/0moUCmolk8QWkauP3Eugu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mmAw2/btsFir50pT6/0moUCmolk8QWkauP3Eugu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmmAw2%2FbtsFir50pT6%2F0moUCmolk8QWkauP3Eugu0%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;569&quot; height=&quot;263&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;330&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;905&quot; data-origin-height=&quot;23&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bN903m/btsFnXbmtX8/Z2I2BxvrRTjhv7ZhlvbDk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bN903m/btsFnXbmtX8/Z2I2BxvrRTjhv7ZhlvbDk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bN903m/btsFnXbmtX8/Z2I2BxvrRTjhv7ZhlvbDk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbN903m%2FbtsFnXbmtX8%2FZ2I2BxvrRTjhv7ZhlvbDk0%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;905&quot; height=&quot;23&quot; data-origin-width=&quot;905&quot; data-origin-height=&quot;23&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자꾸 에러가 발생한다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 @Valid의 문제인가 싶어 어노테이션을 삭제해 보았는데&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1389&quot; data-origin-height=&quot;112&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d0Y2Ka/btsFkU0Uio0/TT54XhvfejKpbFgCXbbtSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d0Y2Ka/btsFkU0Uio0/TT54XhvfejKpbFgCXbbtSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d0Y2Ka/btsFkU0Uio0/TT54XhvfejKpbFgCXbbtSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd0Y2Ka%2FbtsFkU0Uio0%2FTT54XhvfejKpbFgCXbbtSK%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;1389&quot; height=&quot;112&quot; data-origin-width=&quot;1389&quot; data-origin-height=&quot;112&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터가 안 넘어온다.&lt;br /&gt;null값으로 매핑이 되어 넘어오기에 @Valid가 에러를 띄운 것인데 왜인지 한참을 고민했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정답은 객체에 있었다.&lt;/p&gt;
&lt;pre id=&quot;code_1709114707911&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Getter
public class PostForm {

    private LocalDateTime postTime;
    private String questionLink;

    @NotBlank(message = &quot;내용은 필수입니다&quot;)
    private String content;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체에서는 @Setter의 사용을 지양해야 한다는 단순한 생각으로 최대한 @Setter가 없이 구현을 하고 있었는데 이 부분에서 문제가 발생했다.&lt;br /&gt;@Setter가 없으니 Form에서 넘어오는 값을 세팅할 수가 없었던 것.&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;1377&quot; data-origin-height=&quot;86&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7qCzu/btsFmfQ30Ud/xwJV5BOeIkg24Mm80FPAw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7qCzu/btsFmfQ30Ud/xwJV5BOeIkg24Mm80FPAw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7qCzu/btsFmfQ30Ud/xwJV5BOeIkg24Mm80FPAw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7qCzu%2FbtsFmfQ30Ud%2FxwJV5BOeIkg24Mm80FPAw1%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;1377&quot; height=&quot;86&quot; data-origin-width=&quot;1377&quot; data-origin-height=&quot;86&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;@Setter의 사용 문제없을까?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로 말하자면 Entity에서의 사용은 지양하는 편이 좋다.&lt;br /&gt;비즈니스 로직이 존재하고 실제 데이터를 변경하기 때문인데 이는 문제로 이어질 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 DTO에서는 다르다.&lt;br /&gt;DTO는 단순히 데이터를 담기 위해 있는 것이기에 Setter를 통한 중요 데이터가 변경될 일이 없어서 상관이 없다고 한다.&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;677&quot; data-origin-height=&quot;106&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vDoGV/btsFjVsb4fa/R9LUPmJKSFkghHsmHO3J3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vDoGV/btsFjVsb4fa/R9LUPmJKSFkghHsmHO3J3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vDoGV/btsFjVsb4fa/R9LUPmJKSFkghHsmHO3J3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvDoGV%2FbtsFjVsb4fa%2FR9LUPmJKSFkghHsmHO3J3k%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;677&quot; height=&quot;106&quot; data-origin-width=&quot;677&quot; data-origin-height=&quot;106&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;왜 Entity에서는 @Setter의 사용을 지양할까?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하게 GPT의 도움을 받아보았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;723&quot; data-origin-height=&quot;314&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvFM3z/btsFqX9raMB/sEqtHftf9vjNiBrIomgKy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvFM3z/btsFqX9raMB/sEqtHftf9vjNiBrIomgKy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvFM3z/btsFqX9raMB/sEqtHftf9vjNiBrIomgKy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvFM3z%2FbtsFqX9raMB%2FsEqtHftf9vjNiBrIomgKy0%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;723&quot; height=&quot;314&quot; data-origin-width=&quot;723&quot; data-origin-height=&quot;314&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'객체의 불변성'이 가장 중요한 키워드로 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+ 객체 지향의 설계 원리 중 '정보 은닉'과 관련이 있지 않을까?&lt;br /&gt;++ @Setter의 사용보다는 오버로딩, @Builder 등의 빌더 패턴 사용, 정적 팩토리 메서드 사용이 좋다고 한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;@Setter가 없으면 어떤 순서로 데이터가 바인딩될까?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 생성자와 관련이 있어 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 추가로 공부하여 포스팅을 해야겠다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;참고 문서&lt;/b&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;a href=&quot;https://jojoldu.tistory.com/251&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;향로님 블로그&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.inflearn.com/questions/161417/dto-%EC%82%AC%EC%9A%A9%EC%97%90%EB%8C%80%ED%95%B4-%EA%B6%81%EA%B8%88%ED%95%A9%EB%8B%88%EB%8B%A4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;영한님 인프런 답변&lt;/a&gt;&lt;/blockquote&gt;</description>
      <category>개발 연습장/Java</category>
      <category>@Setter</category>
      <category>DTO @Setter</category>
      <category>DTO setter</category>
      <category>java</category>
      <category>spring</category>
      <category>Spring DTO</category>
      <category>스프링</category>
      <category>스프링 @Setter</category>
      <category>스프링 DTO</category>
      <category>자바</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/273</guid>
      <comments>https://looancheong.tistory.com/273#entry273comment</comments>
      <pubDate>Wed, 28 Feb 2024 19:29:53 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 21736: 헌내기는 친구가 필요해</title>
      <link>https://looancheong.tistory.com/272</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;1043&quot; data-origin-height=&quot;863&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lp7vp/btszk7yXede/0xVmrs83wCmaudE3ka7Lzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lp7vp/btszk7yXede/0xVmrs83wCmaudE3ka7Lzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lp7vp/btszk7yXede/0xVmrs83wCmaudE3ka7Lzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flp7vp%2Fbtszk7yXede%2F0xVmrs83wCmaudE3ka7Lzk%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;1043&quot; height=&quot;863&quot; data-origin-width=&quot;1043&quot; data-origin-height=&quot;863&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/21736&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/21736&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1698660182810&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;21736번: 헌내기는 친구가 필요해&quot; data-og-description=&quot;2020년에 입학한 헌내기 도연이가 있다. 도연이는 비대면 수업 때문에 학교에&amp;nbsp;가지 못해 학교에 아는 친구가 없었다. 드디어 대면 수업을 하게 된 도연이는 어서 캠퍼스 내의 사람들과 친해지고 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/21736&quot; data-og-url=&quot;https://www.acmicpc.net/problem/21736&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/1jHA4/hyUkbtgy0k/jv4VD64JKxW02wdmqGjcs0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/21736&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/21736&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/1jHA4/hyUkbtgy0k/jv4VD64JKxW02wdmqGjcs0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;21736번: 헌내기는 친구가 필요해&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;2020년에 입학한 헌내기 도연이가 있다. 도연이는 비대면 수업 때문에 학교에&amp;nbsp;가지 못해 학교에 아는 친구가 없었다. 드디어 대면 수업을 하게 된 도연이는 어서 캠퍼스 내의 사람들과 친해지고&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1698660190732&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline

n, m = map(int, input().split())

land = [list(input()) for _ in range(n)]
visited = [[False for _ in range(m)] for _ in range(n)]

dx, dy = [1, 0, -1, 0], [0, 1, 0, -1]

def dfs(x, y):
    global cnt
    if land[x][y] == &quot;P&quot;:
        cnt += 1
    visited[x][y] = True

    for i in range(4):
        nx = x + dx[i]
        ny = y + dy[i]

        if 0 &amp;lt;= nx &amp;lt; n and 0 &amp;lt;= ny &amp;lt; m and land[nx][ny] != &quot;X&quot; and visited[nx][ny] == False:
            dfs(nx, ny)

cnt = 0

for i in range(n):
    for j in range(m):
        if land[i][j] == &quot;I&quot;:
            dfs(i, j)

if cnt == 0:
    print(&quot;TT&quot;)
else:
    print(cnt)&lt;/code&gt;&lt;/pre&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;dfs를 통해서 해결했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 입력값을 받아주고 방문을 확인할 visited를 만들어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 dfs를 정의해 준다.&lt;br /&gt;우선 방문한 좌표에 대해서 방문으로 처리해 주고 4방향을 확인해 준다.&lt;br /&gt;범위가 넘어가지 않는지, 그리고 벽이 아닌지, 방문을 하지 않았는지를 순서대로 확인한다.&lt;br /&gt;사람에 대한 조건이 따로 없어서 고민했는데 벽만 통과하지 못한다고 했으므로 사람일 경우에도 통과가 가능하다.&lt;br /&gt;dfs의 시작 부분에 해당 좌표에 있는 것이 사람이라면 카운트를 해주는 조건문도 하나 만들어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시작 좌표가 따로 주어지지 않으므로 반복문을 통해서 시작 좌표를 찾아주고 dfs를 실행해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과가 0이라면 TT를 그렇지 않다면 cnt의 값을 출력해 주자.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>백준</category>
      <category>백준 21736</category>
      <category>백준 21736 파이썬</category>
      <category>백준 21736 파이썬 dfs</category>
      <category>백준 파이썬</category>
      <category>백준 헌내기는 친구가 필요해</category>
      <category>백준 헌내기는 친구가 필요해 파이썬</category>
      <category>파이썬</category>
      <category>파이썬 dfs</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/272</guid>
      <comments>https://looancheong.tistory.com/272#entry272comment</comments>
      <pubDate>Tue, 31 Oct 2023 12:07:01 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 1753: 최단경로</title>
      <link>https://looancheong.tistory.com/271</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;1172&quot; data-origin-height=&quot;722&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/K8s7Z/btszkAGVCi1/EG44M23KwUXAblo23B4eZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/K8s7Z/btszkAGVCi1/EG44M23KwUXAblo23B4eZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/K8s7Z/btszkAGVCi1/EG44M23KwUXAblo23B4eZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FK8s7Z%2FbtszkAGVCi1%2FEG44M23KwUXAblo23B4eZ0%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;1172&quot; height=&quot;722&quot; data-origin-width=&quot;1172&quot; data-origin-height=&quot;722&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1753&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/1753&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1698551126421&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;1753번: 최단경로&quot; data-og-description=&quot;첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1 &amp;le; V &amp;le; 20,000, 1 &amp;le; E &amp;le; 300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정점의 번호 K(1 &amp;le; K &amp;le; V)가 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1753&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1753&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/jUenT/hyUnYFrAgR/EhU7Gjak6FxpkXf3pLrGtk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1753&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1753&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/jUenT/hyUnYFrAgR/EhU7Gjak6FxpkXf3pLrGtk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;1753번: 최단경로&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1 &amp;le; V &amp;le; 20,000, 1 &amp;le; E &amp;le; 300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정점의 번호 K(1 &amp;le; K &amp;le; V)가&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1698551131790&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
import heapq
input = sys.stdin.readline

INF = int(1e9)

V, e = map(int, input().split())
start = int(input())
graph = [[] for _ in range(V + 1)]

for _ in range(e):
    u, v, w = map(int, input().split())
    graph[u].append((v, w))

dis = [INF] * (V + 1)

def dijkstra(start):
    q = []
    dis[start] = 0
    heapq.heappush(q, (0, start))

    while q:
        dist, node = heapq.heappop(q)

        if dis[node] &amp;lt; dist:
            continue

        for i in graph[node]:
            cost = dist + i[1]

            if cost &amp;lt; dis[i[0]]:
                dis[i[0]] = cost
                heapq.heappush(q, (cost, i[0]))

dijkstra(start)

for i in range(1, V + 1):
    if dis[i] == INF:
        print(&quot;INF&quot;)
    else:
        print(dis[i])&lt;/code&gt;&lt;/pre&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 입력값을 다 받아준다.&lt;br /&gt;양방향 간선이 아니기 때문에 간선을 받을 때 유의해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 거리를 받을 dis를 만들어준다.&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;br /&gt;그리고 시작점의 거리를 0으로 지정해 준다.&lt;br /&gt;그리고 heapq를 이용하여 우선순위 큐에 거리인 0과 시작점의 노드를 넣어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 큐가 존재하는 동안 heappop 하여 각 거리와 노드를 받아준다.&lt;br /&gt;이때 거리가 현재 거리보다 크다면 건너뛰고 그렇지 않다면 다음 단계를 진행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 노드와 연결되어 있는 간선의 최단 거리를 갱신하는 작업을 진행한다.&lt;br /&gt;현재까지의 거리에 다음 노드로 이어지는 거리를 더한 값을 계산해 주고&lt;br /&gt;해당 값이 현재 최단거리보다 짧다면 거리를 갱신하고 해당 값과 노드를 큐에 넣어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 큐가 없어질 때까지 반복하여 거리를 구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력 형식에 맞춰 만약 INF 라면 해당 노드에 도달하지 못한다는 뜻이므로 INF를 출력하고&lt;br /&gt;그렇지 않다면 거리를 출력해 준다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>다익스트라 알고리즘</category>
      <category>백준</category>
      <category>백준 1753</category>
      <category>백준 1753 파이썬</category>
      <category>백준 최단경로</category>
      <category>백준 최단경로 파이썬</category>
      <category>최단거리 알고리즘</category>
      <category>파이썬</category>
      <category>파이썬 다익스트라</category>
      <category>파이썬 데이크스트라</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/271</guid>
      <comments>https://looancheong.tistory.com/271#entry271comment</comments>
      <pubDate>Mon, 30 Oct 2023 13:51:17 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 7562: 나이트의 이동</title>
      <link>https://looancheong.tistory.com/270</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;1056&quot; data-origin-height=&quot;890&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXyH4s/btsznCwNFGt/q20Ky8v6Mu2eft3DGjDaTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXyH4s/btsznCwNFGt/q20Ky8v6Mu2eft3DGjDaTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXyH4s/btsznCwNFGt/q20Ky8v6Mu2eft3DGjDaTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXyH4s%2FbtsznCwNFGt%2Fq20Ky8v6Mu2eft3DGjDaTk%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;1056&quot; height=&quot;890&quot; data-origin-width=&quot;1056&quot; data-origin-height=&quot;890&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/7562&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/7562&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1698485255079&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;7562번: 나이트의 이동&quot; data-og-description=&quot;체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/7562&quot; data-og-url=&quot;https://www.acmicpc.net/problem/7562&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Zkhth/hyUlroArnU/hb1KAA2MUzdK9UBqj4yWbK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/7562&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/7562&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Zkhth/hyUlroArnU/hb1KAA2MUzdK9UBqj4yWbK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;7562번: 나이트의 이동&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;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1698485261532&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from collections import deque
import sys
input = sys.stdin.readline

t = int(input())

for i in range(t):
    l = int(input())

    start = list(map(int, input().split()))
    dest = list(map(int, input().split()))

    dis = [[-1 for _ in range(l)] for _ in range(l)]

    dx = [1, 1, -1, -1, 2, 2, -2, -2]
    dy = [2, -2, 2, -2, 1, -1, 1, -1]

    #bfs
    q = deque([(start[0], start[1])])
    dis[start[0]][start[1]] = 0

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

        if x == dest[0] and y == dest[1]:
            break

        for i in range(8):
            nx = x + dx[i]
            ny = y + dy[i]

            if 0 &amp;lt;= nx &amp;lt; l and 0 &amp;lt;= ny &amp;lt; l and dis[nx][ny] == -1:
                dis[nx][ny] = dis[x][y] + 1
                q.append([nx, ny])

    print(dis[dest[0]][dest[1]])&lt;/code&gt;&lt;/pre&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;bfs를 통해 해결할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 각 입력값을 받아주고 거리 정보를 세팅해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dx, dy를 세팅하는데 나이트의 이동 규칙에 맞게 8개의 길을 만들어준다.&lt;br /&gt;나이트의 이동 경로는 문제에 나와있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;deque을 이용해서 큐를 생성하여 bfs를 이용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시작하면서 시작점의 좌표를 큐에 넣어주고 거리를 0으로 설정해 준다.&lt;br /&gt;이때, 방문 처리도 같이 한다고 생각하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;q가 존재하는 동안 popleft를 해주어 해당 좌표에서 이동할 수 있는 칸을 계산하고&lt;br /&gt;이동이 가능하다면 해당 칸의 거리를 현재 좌표의 dis + 1로 설정해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 반복하며 x와 y 좌표가 목표 좌표가 될 때까지 bfs를 돌린 후 break를 통해 탈출한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 좌표를 출력한다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>BFS</category>
      <category>백준</category>
      <category>백준 7562</category>
      <category>백준 7562 파이썬</category>
      <category>백준 7562 파이썬 bfs</category>
      <category>백준 나이트의 이동</category>
      <category>백준 나이트의 이동 파이썬</category>
      <category>파이썬</category>
      <category>파이썬 bfs</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/270</guid>
      <comments>https://looancheong.tistory.com/270#entry270comment</comments>
      <pubDate>Sat, 28 Oct 2023 18:32:14 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 14940: 쉬운 최단거리</title>
      <link>https://looancheong.tistory.com/269</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;1159&quot; data-origin-height=&quot;937&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sFO5Z/btsyHbnlDk9/sm64DI0Nhcnck7elO0bXdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sFO5Z/btsyHbnlDk9/sm64DI0Nhcnck7elO0bXdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sFO5Z/btsyHbnlDk9/sm64DI0Nhcnck7elO0bXdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsFO5Z%2FbtsyHbnlDk9%2Fsm64DI0Nhcnck7elO0bXdK%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;1159&quot; height=&quot;937&quot; data-origin-width=&quot;1159&quot; data-origin-height=&quot;937&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/14940&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/14940&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1697600693174&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;14940번: 쉬운 최단거리&quot; data-og-description=&quot;지도의 크기 n과 m이 주어진다. n은 세로의 크기, m은 가로의 크기다.(2 &amp;le; n &amp;le; 1000, 2 &amp;le; m &amp;le; 1000) 다음 n개의 줄에 m개의 숫자가 주어진다. 0은 갈 수 없는 땅이고 1은 갈 수 있는 땅, 2는 목표지점이&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/14940&quot; data-og-url=&quot;https://www.acmicpc.net/problem/14940&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cbeUPG/hyUdVKIKZi/PJTVkcUTQD3LkVbn3up2LK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/14940&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/14940&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cbeUPG/hyUdVKIKZi/PJTVkcUTQD3LkVbn3up2LK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;14940번: 쉬운 최단거리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;지도의 크기 n과 m이 주어진다. n은 세로의 크기, m은 가로의 크기다.(2 &amp;le; n &amp;le; 1000, 2 &amp;le; m &amp;le; 1000) 다음 n개의 줄에 m개의 숫자가 주어진다. 0은 갈 수 없는 땅이고 1은 갈 수 있는 땅, 2는 목표지점이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1697600648149&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from collections import deque

n, m = map(int, input().split())

#땅, 거리 설정
land = [list(map(int, input().split())) for _ in range(n)]
dis = [[0] * m for _ in range(n)]

dx, dy = [1, -1, 0, 0], [0, 0, 1, -1]

#bfs 세팅            
def bfs(i, j):
    q = deque()
    q.append((i, j))
    
    while q:
        x, y = q.popleft()
        
        for i in range(4):
            nx, ny = x + dx[i], y + dy[i]
            
            if 0 &amp;lt;= nx &amp;lt; n and 0 &amp;lt;= ny &amp;lt; m and dis[nx][ny] == 0 and land[nx][ny] == 1:
                dis[nx][ny] = dis[x][y] + 1
                q.append((nx, ny))

#시작 위치 찾기                
for i in range(n):
    for j in range(m):
        if land[i][j] == 2:
            bfs(i, j)

#도달하지 못한 땅 처리            
for i in range(n):
    for j in range(m):
        if land[i][j] == 1 and dis[i][j] == 0:
            dis[i][j] = -1

#출력 형식 맞추기
for i in range(n):
    for j in range(m):
        print(dis[i][j], end = ' ')
    print()&lt;/code&gt;&lt;/pre&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;bfs를 통해서 해결이 가능한 문제였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 간단하게 지도를 입력받아주고 거리를 표시할 dis도 생성해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 bfs를 정의해 준다.&lt;br /&gt;deque를 이용하여 popleft 하며 진행하고&lt;br /&gt;범위가 벗어나지 않고, 거리가 0이며(방문 X), 땅은 1인 숫자에 한해 진행한다.&lt;br /&gt;해당 땅의 거리는 이전 거리에 1을 더한 수로 세팅해 주고&lt;br /&gt;좌표를 큐에 넣어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시작 위치는 지도의 좌표 중 2의 값을 가진 위치에서 시작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bfs가 완료된 후 땅이지만 도달하지 못한 좌표의 값을 -1로 처리해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 출력 형식에 맞춰 출력한다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>BFS</category>
      <category>bfs 파이썬</category>
      <category>백준</category>
      <category>백준 14940</category>
      <category>백준 14940 파이썬</category>
      <category>백준 쉬운 최단거리</category>
      <category>파이썬</category>
      <category>파이썬 bfs</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/269</guid>
      <comments>https://looancheong.tistory.com/269#entry269comment</comments>
      <pubDate>Wed, 18 Oct 2023 12:48:17 +0900</pubDate>
    </item>
    <item>
      <title>[T-SUM] 9주차 자료 - Numpy를 통한 몬테카를로 시뮬레이션</title>
      <link>https://looancheong.tistory.com/268</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;203&quot; data-origin-height=&quot;53&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mnJTZ/btsrr3WBhLx/XvvziKa4TEU4DkoOD7ShoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mnJTZ/btsrr3WBhLx/XvvziKa4TEU4DkoOD7ShoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mnJTZ/btsrr3WBhLx/XvvziKa4TEU4DkoOD7ShoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmnJTZ%2Fbtsrr3WBhLx%2FXvvziKa4TEU4DkoOD7ShoK%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;203&quot; height=&quot;53&quot; data-origin-width=&quot;203&quot; data-origin-height=&quot;53&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;오늘의 내용 미리보기&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;351&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c7cR2u/btsrdlrzW62/o6bUMMZZAw554CwOaKBGT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c7cR2u/btsrdlrzW62/o6bUMMZZAw554CwOaKBGT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c7cR2u/btsrdlrzW62/o6bUMMZZAw554CwOaKBGT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7cR2u%2FbtsrdlrzW62%2Fo6bUMMZZAw554CwOaKBGT1%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;424&quot; height=&quot;301&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;351&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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;이번 시간에는 Numpy를 통해 몬테카를로 시뮬레이션을 진행하는 방법을 배워봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;몬테카를로 시뮬레이션은 불확실한 사건의 가능한 결과를 예측하는 수학적 기법입니다.&lt;br /&gt;말로만 하면 어려우니까 간단하게 예시를 봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 주사위를 굴려서 얻을 수 있는 숫자를 예측한다고 해봅시다.&lt;br /&gt;예측 결과는 굉장히 다양하게 나타날 수 있겠죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과는 1부터 6까지의 수 중 하나일 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하게 주사위와 같은 역할을 하는 함수를 하나 구현해 봅시다.&lt;/p&gt;
&lt;pre id=&quot;code_1692188218332&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import numpy as np

nums = [i+1 for i in range(6)]
prob = np.ones(6) * (1/6)
num = np.random.choice(nums, p = prob)
num&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 함수를 실행할 때마다 1에서 6 사이의 랜덤 한 결과를 출력해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 그래프로도 나타내볼까요?&lt;/p&gt;
&lt;pre id=&quot;code_1692189566723&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import numpy as np
import matplotlib.pyplot as plt

nums = [1, 2, 3, 4, 5, 6]
prob = np.ones(6) * (1/6)
res = np.random.choice(nums, 1000000, p=prob)
plt.hist(res, bins=np.arange(0.5, 7.5, 1), align='mid', rwidth=0.8)
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;577&quot; data-origin-height=&quot;417&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rN6yq/btsrqIekOts/rQZamugkjQjIfVe2sYNmMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rN6yq/btsrqIekOts/rQZamugkjQjIfVe2sYNmMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rN6yq/btsrqIekOts/rQZamugkjQjIfVe2sYNmMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrN6yq%2FbtsrqIekOts%2FrQZamugkjQjIfVe2sYNmMK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;577&quot; height=&quot;417&quot; data-origin-width=&quot;577&quot; data-origin-height=&quot;417&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대략 이런 결과가 나옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확률을 살짝 바꿔볼까요?&lt;/p&gt;
&lt;pre id=&quot;code_1692189635926&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import numpy as np
import matplotlib.pyplot as plt

nums = [1, 2, 3, 4, 5, 6]
prob = [0.5, 0.1, 0.1, 0.1, 0.1, 0.1]
res = np.random.choice(nums, 1000000, p=prob)
plt.hist(res, bins=np.arange(0.5, 7.5, 1), align='mid', rwidth=0.8)
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;579&quot; data-origin-height=&quot;410&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oxhsJ/btsrgNHNOtE/nMCuUlq6m5vzm6BbwoEHX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oxhsJ/btsrgNHNOtE/nMCuUlq6m5vzm6BbwoEHX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oxhsJ/btsrgNHNOtE/nMCuUlq6m5vzm6BbwoEHX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoxhsJ%2FbtsrgNHNOtE%2FnMCuUlq6m5vzm6BbwoEHX1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;579&quot; height=&quot;410&quot; data-origin-width=&quot;579&quot; data-origin-height=&quot;410&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 방식으로 특정 사건에 대한 확률을 그래프로 나타낼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 몬테카를로 시뮬레이션을 구현해 봅시다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;556&quot; data-origin-height=&quot;426&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cySs95/btsroHGL9vw/Q3VlcvQKElkjKH4sW6EwF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cySs95/btsroHGL9vw/Q3VlcvQKElkjKH4sW6EwF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cySs95/btsroHGL9vw/Q3VlcvQKElkjKH4sW6EwF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcySs95%2FbtsroHGL9vw%2FQ3VlcvQKElkjKH4sW6EwF0%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;556&quot; height=&quot;426&quot; data-origin-width=&quot;556&quot; data-origin-height=&quot;426&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 과정으로 진행됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이를 구하기 위한 미래 주가 예측모형에 대해서도 알아봅시다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;536&quot; data-origin-height=&quot;405&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDDha6/btsrkShwlAM/lFjyd4uIz0a7aITMfH8W41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDDha6/btsrkShwlAM/lFjyd4uIz0a7aITMfH8W41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDDha6/btsrkShwlAM/lFjyd4uIz0a7aITMfH8W41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDDha6%2FbtsrkShwlAM%2FlFjyd4uIz0a7aITMfH8W41%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;536&quot; height=&quot;405&quot; data-origin-width=&quot;536&quot; data-origin-height=&quot;405&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시가 58000원 주식이 있다고 가정합시다.&lt;br /&gt;반년 후의 주식 가격에 대해서 예측을 해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;mu; = 0.1&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;sigma; = 0.25&lt;br /&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;553&quot; data-origin-height=&quot;413&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mgn0U/btsrqIrTySY/lioj9zZgL8SvBvW39uuC90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mgn0U/btsrqIrTySY/lioj9zZgL8SvBvW39uuC90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mgn0U/btsrqIrTySY/lioj9zZgL8SvBvW39uuC90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmgn0U%2FbtsrqIrTySY%2Flioj9zZgL8SvBvW39uuC90%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;553&quot; height=&quot;413&quot; data-origin-width=&quot;553&quot; data-origin-height=&quot;413&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 과정을 거칩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계산식을 이용해서 구해봅시다.&lt;/p&gt;
&lt;pre id=&quot;code_1692191109164&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import numpy as np

s0, mu, sigma, T = 58000, 0.1, 0.25, 0.5
epsilon = np.random.randn()
sT = s0 * np.exp((mu - 0.5 * sigma**2) * T + sigma * epsilon * np.sqrt(T)).round(2)
r = (sT - s0) / s0

print(sT)
print(format(r, '.4f'))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 이를 반복해서 실행하여 주가 시뮬레이션을 진행합니다.&lt;br /&gt;일단 5번만 반복해 볼까요?&lt;/p&gt;
&lt;pre id=&quot;code_1692191243609&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import numpy as np
import pandas as pd

s0, mu, sigma, T = 58000, 0.1, 0.25, 0.5
M = 5
res = []

for i in range(M):
    epsilon = np.random.randn()
    sT = s0 * np.exp((mu - 0.5 * sigma**2) * T + sigma * epsilon * np.sqrt(T)).round(2)
    r = (sT - s0) / s0
    res.append(r)

df = pd.DataFrame({'수익률': res})
df&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 반복 횟수를 늘려서 결과를 도출해 봅시다.&lt;/p&gt;
&lt;pre id=&quot;code_1692191402935&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import numpy as np
import pandas as pd
import seaborn as sns

s0, mu, sigma, T = 58000, 0.1, 0.25, 0.5
M = 1000000
res = []

for i in range(M):
    epsilon = np.random.randn()
    sT = s0 * np.exp((mu - 0.5 * sigma**2) * T + sigma * epsilon * np.sqrt(T)).round(2)
    r = (sT - s0) / s0
    res.append(r)

df = pd.DataFrame({'수익률': res})

sns.distplot(df['수익률'], hist = False)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;409&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bztKCR/btsrq9CMpAp/18sWMtETtlk8S7AeZoa9YK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bztKCR/btsrq9CMpAp/18sWMtETtlk8S7AeZoa9YK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bztKCR/btsrq9CMpAp/18sWMtETtlk8S7AeZoa9YK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbztKCR%2Fbtsrq9CMpAp%2F18sWMtETtlk8S7AeZoa9YK%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;540&quot; height=&quot;409&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;409&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 몬테카를로 시뮬레이션을 이용한 주가 예측을 해보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 결과를 요약해 볼까요?&lt;/p&gt;
&lt;pre id=&quot;code_1692191602414&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import numpy as np
import pandas as pd
import seaborn as sns

s0, mu, sigma, T = 58000, 0.1, 0.25, 0.5
M = 1000000
res = []

for i in range(M):
    epsilon = np.random.randn()
    sT = s0 * np.exp((mu - 0.5 * sigma**2) * T + sigma * epsilon * np.sqrt(T)).round(2)
    r = (sT - s0) / s0
    res.append(r)

df = pd.DataFrame({'수익률': res})

stats = df.describe()
stats&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;160&quot; data-origin-height=&quot;243&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BdmUz/btsrgQ5Gt3h/KmCXHwKbx0fd9hKsJKI4kK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BdmUz/btsrgQ5Gt3h/KmCXHwKbx0fd9hKsJKI4kK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BdmUz/btsrgQ5Gt3h/KmCXHwKbx0fd9hKsJKI4kK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBdmUz%2FbtsrgQ5Gt3h%2FKmCXHwKbx0fd9hKsJKI4kK%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;160&quot; height=&quot;243&quot; data-origin-width=&quot;160&quot; data-origin-height=&quot;243&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 Numpy를 통한 몬테카를로 시뮬레이션을 마쳤습니다.&lt;/p&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;br /&gt;몬테카를로 시뮬레이션을 통한 주가 예측을 배웠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 시간에 만나요 안뇽.&lt;/p&gt;</description>
      <category>T-SUM 멘토링</category>
      <category>numpy</category>
      <category>T-SUM</category>
      <category>몬테카를로 시뮬레이션</category>
      <category>파이썬</category>
      <category>파이썬 numpy</category>
      <category>파이썬 기초</category>
      <category>파이썬 데이터</category>
      <category>파이썬 데이터 분석</category>
      <category>파이썬 몬테카를로 시뮬레이션</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/268</guid>
      <comments>https://looancheong.tistory.com/268#entry268comment</comments>
      <pubDate>Wed, 16 Aug 2023 23:13:58 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 2583: 영역 구하기</title>
      <link>https://looancheong.tistory.com/267</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;1053&quot; data-origin-height=&quot;934&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cw9bap/btsrjpejeQh/Xpm76TavM6RjNnm8zMvuHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cw9bap/btsrjpejeQh/Xpm76TavM6RjNnm8zMvuHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cw9bap/btsrjpejeQh/Xpm76TavM6RjNnm8zMvuHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcw9bap%2FbtsrjpejeQh%2FXpm76TavM6RjNnm8zMvuHK%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;1053&quot; height=&quot;934&quot; data-origin-width=&quot;1053&quot; data-origin-height=&quot;934&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2583&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/2583&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1692082080898&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;2583번: 영역 구하기&quot; data-og-description=&quot;첫째 줄에 M과 N, 그리고 K가 빈칸을 사이에 두고 차례로 주어진다. M, N, K는 모두 100 이하의 자연수이다. 둘째 줄부터 K개의 줄에는 한 줄에 하나씩 직사각형의 왼쪽 아래 꼭짓점의 x, y좌표값과 오&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2583&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2583&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/nSLlU/hyTCDKxGbM/ZwBlvTzCFxXvcSbNXaT9D1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2583&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2583&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/nSLlU/hyTCDKxGbM/ZwBlvTzCFxXvcSbNXaT9D1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;2583번: 영역 구하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 M과 N, 그리고 K가 빈칸을 사이에 두고 차례로 주어진다. M, N, K는 모두 100 이하의 자연수이다. 둘째 줄부터 K개의 줄에는 한 줄에 하나씩 직사각형의 왼쪽 아래 꼭짓점의 x, y좌표값과 오&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1692082107224&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
sys.setrecursionlimit(10**7)

m, n, k = map(int, input().split())
ans = []
paper = [(list(0 for i in range(n))) for i in range(m)]

for _ in range(k):
    x, y, dx, dy = map(int, input().split())
    
    for i in range(x, dx):
        for j in range(y, dy):
            paper[j][i] = 1
            
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]

def dfs(x, y):
    global cnt
    cnt += 1
    paper[x][y] = 1
    
    for i in range(4):
        nx = x + dx[i]
        ny = y + dy[i]
        
        if 0 &amp;lt;= nx &amp;lt; m and 0 &amp;lt;= ny &amp;lt; n and paper[nx][ny] == 0:
            dfs(nx, ny)

    return cnt

cnt = 0

for i in range(m):
    for j in range(n):
        if paper[i][j] == 0:
            ans.append(dfs(i, j))
            cnt = 0

print(len(ans))
for i in sorted(ans):
    print(i, end = ' ')&lt;/code&gt;&lt;/pre&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;dfs를 통해서 해결했다.&lt;br /&gt;문제의 접근 자체는 굉장히 빠르게 했는데,&lt;br /&gt;x와 y의 범위에 대한 실수가 잦았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 n, m 만큼의 모눈종이를 0으로 세팅해 준다.&lt;br /&gt;그리고 직사각형의 꼭짓점 좌표를 받아 해당 부분을 1로 처리해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후에 dfs를 진행한다.&lt;br /&gt;dfs의 횟수를 체크하기 위해 global을 통해 cnt를 설정해서 카운트해 주었고,&lt;br /&gt;dfs가 종료될 때 cnt값을 리턴하여 정답 리스트에 넣어주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 몇 개의 영역으로 나누어지는지를 출력하기 위해 정답 리스트의 개수를 써주었고(dfs의 진행 횟수만큼 영역이 존재)&lt;br /&gt;sorted 된 ans에서 각 영역의 넓이를 출력했다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>백준</category>
      <category>백준 2583</category>
      <category>백준 2583 파이썬</category>
      <category>백준 영역 구하기</category>
      <category>백준 영역 구하기 파이썬</category>
      <category>파이썬</category>
      <category>파이썬 dfs</category>
      <category>파이썬 그래프 이론</category>
      <category>파이썬 깊이 우선 탐색</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/267</guid>
      <comments>https://looancheong.tistory.com/267#entry267comment</comments>
      <pubDate>Wed, 16 Aug 2023 10:53:02 +0900</pubDate>
    </item>
    <item>
      <title>[T-SUM] 8주차 자료 - Pandas를 통한 시계열데이터 분석</title>
      <link>https://looancheong.tistory.com/266</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;203&quot; data-origin-height=&quot;53&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lXq98/btsqvksERpi/BYt9pEMcaN0XHvHukFvKkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lXq98/btsqvksERpi/BYt9pEMcaN0XHvHukFvKkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lXq98/btsqvksERpi/BYt9pEMcaN0XHvHukFvKkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlXq98%2FbtsqvksERpi%2FBYt9pEMcaN0XHvHukFvKkK%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;203&quot; height=&quot;53&quot; data-origin-width=&quot;203&quot; data-origin-height=&quot;53&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;오늘의 내용 미리보기&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;287&quot; data-origin-height=&quot;214&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pnMaO/btsqh1gx0Tb/aqr8Vn1yN6aEv8umsfiKs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pnMaO/btsqh1gx0Tb/aqr8Vn1yN6aEv8umsfiKs0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pnMaO/btsqh1gx0Tb/aqr8Vn1yN6aEv8umsfiKs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpnMaO%2Fbtsqh1gx0Tb%2Faqr8Vn1yN6aEv8umsfiKs0%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;287&quot; height=&quot;214&quot; data-origin-width=&quot;287&quot; data-origin-height=&quot;214&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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;/p&gt;
&lt;pre id=&quot;code_1691469475814&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install pandas

pip install numpy&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 두 모듈을 이용해 파이썬으로 데이터 분석이 가능해집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pandas는 파이썬의 &lt;span style=&quot;color: #ee2323;&quot;&gt;데이터 분석&lt;/span&gt; 라이브러리입니다.&lt;br /&gt;수치형 테이블과 시계열 데이터를 조작하고 운영하기 위한 데이터를 제공합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;numpy는 &lt;span style=&quot;color: #ee2323;&quot;&gt;수학 및 과학 연산&lt;/span&gt;을 위한 파이썬 패키지입니다.&lt;br /&gt;파이썬으로 수치해석, 통계 관련 기능을 구현할 때 가장 기본이 되는 모듈입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 이 두 모듈을 사용하기에 앞서 시계열데이터에 대해서 알아봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;시계열데이터&lt;/span&gt;&lt;/b&gt;는 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;일정한 시간 동안 수집 된 일련의 순차적으로 정해진 데이터 셋의 집합&lt;/span&gt;&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;되게 어려워 보이는 데 쉽게 풀어서 설명하면 무언가에 대한 데이터를 시간에 따라 나열한 데이터의 집합입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 파일을 한 번 봅시다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;384&quot; data-origin-height=&quot;224&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AlTNM/btsquDew3HD/0eQF60zun4l8PUom5n65Kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AlTNM/btsquDew3HD/0eQF60zun4l8PUom5n65Kk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AlTNM/btsquDew3HD/0eQF60zun4l8PUom5n65Kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAlTNM%2FbtsquDew3HD%2F0eQF60zun4l8PUom5n65Kk%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;384&quot; height=&quot;224&quot; data-origin-width=&quot;384&quot; data-origin-height=&quot;224&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 일자와 이에 관련된 데이터가 모여있는 집합이라고 생각하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 데이터의 경우 Index가 일자인 Pandas의 DataFrame입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 본격적으로 pandas를 사용해 봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 pandas를 사용하기 위해선 import를 해주어야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1691469880078&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 import를 하게 되면 사용이 가능합니다.&lt;br /&gt;as는 이 import 된 대상의 약칭입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;굳이 pandas.함수() 이런 식으로 쓰지 않고&lt;br /&gt;pd.함수() 이런 식의 사용이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 번 일정한 간격의 DatatimeIndex를 생성해 볼까요?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;291&quot; data-origin-height=&quot;297&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kBxnJ/btsquCNvdlm/tX0X5zhFp6F48E19MQzAr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kBxnJ/btsquCNvdlm/tX0X5zhFp6F48E19MQzAr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kBxnJ/btsquCNvdlm/tX0X5zhFp6F48E19MQzAr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkBxnJ%2FbtsquCNvdlm%2FtX0X5zhFp6F48E19MQzAr1%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;291&quot; height=&quot;297&quot; data-origin-width=&quot;291&quot; data-origin-height=&quot;297&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1691470155161&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pd.date_range('2023-08-01',periods = 5,freq = &quot;H&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 date_range라는 함수를 이용해서 만들 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인자로는 시작 시점, 개수, 간격 등이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 생성을 해보면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;429&quot; data-origin-height=&quot;79&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mdqOk/btsqrELWTi3/CndchSOnL6HShsu8LGcSt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mdqOk/btsqrELWTi3/CndchSOnL6HShsu8LGcSt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mdqOk/btsqrELWTi3/CndchSOnL6HShsu8LGcSt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmdqOk%2FbtsqrELWTi3%2FCndchSOnL6HShsu8LGcSt0%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;429&quot; height=&quot;79&quot; data-origin-width=&quot;429&quot; data-origin-height=&quot;79&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 결과를 얻을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;freq를 변경하게 되면 그에 맞는 값이 나옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번엔 일반 시계열데이터를 Pandas 시계열데이터로 변환해 봅시다.&lt;/p&gt;
&lt;pre id=&quot;code_1691471351137&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd

df = pd.read_excel(&quot;파일경로&quot;)
df.dtypes&lt;/code&gt;&lt;/pre&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;149&quot; data-origin-height=&quot;152&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zlnW7/btsqtacOe3p/jfX6x8Lnqx5XFT4YcLRMw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zlnW7/btsqtacOe3p/jfX6x8Lnqx5XFT4YcLRMw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zlnW7/btsqtacOe3p/jfX6x8Lnqx5XFT4YcLRMw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzlnW7%2FbtsqtacOe3p%2FjfX6x8Lnqx5XFT4YcLRMw0%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;149&quot; height=&quot;152&quot; data-origin-width=&quot;149&quot; data-origin-height=&quot;152&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 파일을 변환해서 알아봅시다.&lt;/p&gt;
&lt;pre id=&quot;code_1691471401630&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd

df = pd.read_excel(&quot;파일경로&quot;)

df[&quot;일자&quot;] = pd.to_datetime(df[&quot;일자&quot;])
df.dtypes&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;192&quot; data-origin-height=&quot;146&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXPHS4/btsqBMVK0JE/xJ0jCVAQjlgwZAB9JVVis1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXPHS4/btsqBMVK0JE/xJ0jCVAQjlgwZAB9JVVis1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXPHS4/btsqBMVK0JE/xJ0jCVAQjlgwZAB9JVVis1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXPHS4%2FbtsqBMVK0JE%2FxJ0jCVAQjlgwZAB9JVVis1%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;192&quot; height=&quot;146&quot; data-origin-width=&quot;192&quot; data-origin-height=&quot;146&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일자에 해당하는 타입이 pandas의 datetime 형식으로 변경된 것을 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 방식으로 datetime을 변경하여 pandas를 사용할 수 있습니다.&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;이번에는 판다스를 이용하여 선차트를 그려봅시다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;446&quot; data-origin-height=&quot;97&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ef1X0e/btsqujtCHnS/WzZ4kk7kI6LTUVZdV52NH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ef1X0e/btsqujtCHnS/WzZ4kk7kI6LTUVZdV52NH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ef1X0e/btsqujtCHnS/WzZ4kk7kI6LTUVZdV52NH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fef1X0e%2FbtsqujtCHnS%2FWzZ4kk7kI6LTUVZdV52NH0%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;446&quot; height=&quot;97&quot; data-origin-width=&quot;446&quot; data-origin-height=&quot;97&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 함수를 이용해서 그릴 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한번 실습해 봅시다.&lt;/p&gt;
&lt;pre id=&quot;code_1691471693648&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd

df = pd.read_excel(&quot;파일경로&quot;)
df.set_index('일자', inplace = True)

df.plot(y = [&quot;SK텔레콤&quot;, &quot;현대모비스&quot;])&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;413&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XtLt9/btsqBN1s3t7/tiNoDiGH3unLkSUIaWnkwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XtLt9/btsqBN1s3t7/tiNoDiGH3unLkSUIaWnkwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XtLt9/btsqBN1s3t7/tiNoDiGH3unLkSUIaWnkwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXtLt9%2FbtsqBN1s3t7%2FtiNoDiGH3unLkSUIaWnkwK%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;413&quot; height=&quot;252&quot; data-origin-width=&quot;413&quot; data-origin-height=&quot;252&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번엔 이동 기술 통계량을 알아봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;이동 기술 통계량&lt;/span&gt;&lt;/b&gt;이란 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;시간의 흐름에 따라 일정 기간 동안의 수치자료의 기술 통계량을 계산한 값입니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방금 데이터의 이동 평균을 계산해 봅시다.&lt;/p&gt;
&lt;pre id=&quot;code_1691471978610&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd

df = pd.read_excel(&quot;파일경로&quot;)
df.set_index('일자', inplace = True)

df[&quot;KT_MA&quot;] = df[&quot;KT&quot;].rolling(20).mean()
df.dropna(axis = 0, inplace = True)

df[[&quot;KT&quot;, &quot;KT_MA&quot;]].plot(title = &quot;KT and KT Moving Average&quot;, legend = True)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;394&quot; data-origin-height=&quot;263&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvVTFd/btsqtzQ20Dd/zKhqA4uzANl8nHeqEsczn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvVTFd/btsqtzQ20Dd/zKhqA4uzANl8nHeqEsczn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvVTFd/btsqtzQ20Dd/zKhqA4uzANl8nHeqEsczn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvVTFd%2FbtsqtzQ20Dd%2FzKhqA4uzANl8nHeqEsczn0%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;394&quot; height=&quot;263&quot; data-origin-width=&quot;394&quot; data-origin-height=&quot;263&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dropna 함수는 결측치를 제거하는 함수,&lt;br /&gt;legend는 범례를 표시하는 기능입니다.&lt;br /&gt;크게 상관 안 해도 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 이동 평균을 계산해 봤습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 주가 API를 이용해서 주가를 받아오는 방법도 알아봅시다.&lt;/p&gt;
&lt;pre id=&quot;code_1691472682161&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install yfinance&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 모듈은 증권 수집 라이브러리입니다.&lt;br /&gt;증권과 관련된 다양한 기능이 있어요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 특정 주식의 주가를 받아와 봅시다.&lt;/p&gt;
&lt;pre id=&quot;code_1691472788292&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import yfinance as yf

SKT = yf.download('017670.KS', '2020-11-01', '2020-11-13')
SKT&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;299&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OagyS/btsqrD0OaSi/Zy24BDo7xkSzLKKevUc160/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OagyS/btsqrD0OaSi/Zy24BDo7xkSzLKKevUc160/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OagyS/btsqrD0OaSi/Zy24BDo7xkSzLKKevUc160/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOagyS%2FbtsqrD0OaSi%2FZy24BDo7xkSzLKKevUc160%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;586&quot; height=&quot;299&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;299&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 해당 주식의 코드와 시작일, 종료일을 정해주면 해당 주식의 주가를 받아와 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 이용해 원하는 주식의 분석을 할 수 있습니다.&lt;/p&gt;
&lt;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;이번 시간에는 pandas를 이용하는 기초적인 방법과&lt;br /&gt;pandas를 이용해 선 차트를 그리는 방법,&lt;br /&gt;그리고 마지막으로 yfinance를 이용해 주가를 받아오는 방법을 배웠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 시간에 만나요 안뇽.&lt;/p&gt;</description>
      <category>T-SUM 멘토링</category>
      <category>numpy</category>
      <category>Pandas</category>
      <category>T-SUM</category>
      <category>yfinance</category>
      <category>주가 분석</category>
      <category>파이썬</category>
      <category>파이썬 pandas</category>
      <category>파이썬 yfinance</category>
      <category>파이썬 주가</category>
      <category>파이썬 주가 분석</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/266</guid>
      <comments>https://looancheong.tistory.com/266#entry266comment</comments>
      <pubDate>Thu, 10 Aug 2023 19:35:43 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 1987: 알파벳</title>
      <link>https://looancheong.tistory.com/265</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;930&quot; data-origin-height=&quot;925&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b39IF0/btso6TDYErG/6Wz7xaX3feacJyWBU9WcK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b39IF0/btso6TDYErG/6Wz7xaX3feacJyWBU9WcK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b39IF0/btso6TDYErG/6Wz7xaX3feacJyWBU9WcK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb39IF0%2Fbtso6TDYErG%2F6Wz7xaX3feacJyWBU9WcK0%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;930&quot; height=&quot;925&quot; data-origin-width=&quot;930&quot; data-origin-height=&quot;925&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1987&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/1987&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1690500894599&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;1987번: 알파벳&quot; data-og-description=&quot;세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1987&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1987&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/rv5I9/hyTrNffsfD/9HfQRfqhsfldT2NuBMrhhk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1987&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1987&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/rv5I9/hyTrNffsfD/9HfQRfqhsfldT2NuBMrhhk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;1987번: 알파벳&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1690500917977&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;r, c = map(int, input().split())
board = [list(input()) for i in range(r)]
visited = set()
ans = 0

dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]

def dfs(x, y):
    global ans
    visited.add(board[x][y])
    ans = max(ans, len(visited))

    for i in range(4):
        nx = x + dx[i]
        ny = y + dy[i]
    
        if 0 &amp;lt;= nx &amp;lt; r and 0 &amp;lt;= ny &amp;lt; c and board[nx][ny] not in visited:
            dfs(nx, ny)
            visited.remove(board[nx][ny])
            
dfs(0, 0)

print(ans)&lt;/code&gt;&lt;/pre&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;결론부터 말하면 PyPy3로 해결했다.&lt;br /&gt;Python 3로는 어떻게 해도 시간 초과의 늪에서 벗어날 수 없었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에 리스트로 visited를 처리해서 방문한 알파벳을 넣는 방법을 사용했는데&lt;br /&gt;이는 시간적인 부분에서 손해가 있어서&lt;br /&gt;set으로 변경해 주고 add와 remove 하는 방법으로 시간을 줄였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 리스트로도 가능할 것 같은데 잘 모르겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 dfs의 진행 자체는 일반적인 dfs 문제와 크게 차이가 없었다.&lt;br /&gt;조금의 차이점이라면 global을 사용해서 전역 변수에 있는 ans와 현재 visited의 개수를 비교하는 점 정도가 있겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 외에는 기본적인 백트래킹을 사용해서 방문한 알파벳에 대해서는 방문하지 않는 방법을 이용했다.&lt;br /&gt;처음에 방문한 알파벳에 대해서 방문 처리를 해주고(visited에 넣어주고)&lt;br /&gt;나중에 빠져 나올 때 제거를 해주었다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>백준</category>
      <category>백준 1987</category>
      <category>백준 1987 pypy</category>
      <category>백준 1987 파이썬</category>
      <category>백준 1987 파이썬 시간 초과</category>
      <category>백준 알파벳</category>
      <category>백준 알파벳 PyPy</category>
      <category>백준 알파벳 시간 초과</category>
      <category>백준 알파벳 파이썬</category>
      <category>백준 알파벳 파이썬 시간 초과</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/265</guid>
      <comments>https://looancheong.tistory.com/265#entry265comment</comments>
      <pubDate>Fri, 28 Jul 2023 10:40:39 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 5525: IOIOI</title>
      <link>https://looancheong.tistory.com/264</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;1171&quot; data-origin-height=&quot;902&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Et363/btsoU71p1LT/XsoOXFbV8uAG99arpk1Ug1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Et363/btsoU71p1LT/XsoOXFbV8uAG99arpk1Ug1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Et363/btsoU71p1LT/XsoOXFbV8uAG99arpk1Ug1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEt363%2FbtsoU71p1LT%2FXsoOXFbV8uAG99arpk1Ug1%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;1171&quot; height=&quot;902&quot; data-origin-width=&quot;1171&quot; data-origin-height=&quot;902&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1168&quot; data-origin-height=&quot;589&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z54W3/btsoTmLmlAr/Os8GG9EcgYDyPFht2CfLlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z54W3/btsoTmLmlAr/Os8GG9EcgYDyPFht2CfLlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z54W3/btsoTmLmlAr/Os8GG9EcgYDyPFht2CfLlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ54W3%2FbtsoTmLmlAr%2FOs8GG9EcgYDyPFht2CfLlk%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;1168&quot; height=&quot;589&quot; data-origin-width=&quot;1168&quot; data-origin-height=&quot;589&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/5525&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/5525&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1690236034819&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;5525번: IOIOI&quot; data-og-description=&quot;N+1개의 I와 N개의 O로 이루어져 있으면, I와 O이 교대로 나오는 문자열을 PN이라고 한다. P1 IOI P2 IOIOI P3 IOIOIOI PN IOIOI...OI (O가 N개) I와 O로만 이루어진 문자열 S와 정수 N이 주어졌을 때, S안에 PN이 몇&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/5525&quot; data-og-url=&quot;https://www.acmicpc.net/problem/5525&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dh2nvC/hyTqr97Lrt/6fA3HBzmUWoagXHtkNAD91/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/5525&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/5525&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dh2nvC/hyTqr97Lrt/6fA3HBzmUWoagXHtkNAD91/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;5525번: IOIOI&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;N+1개의 I와 N개의 O로 이루어져 있으면, I와 O이 교대로 나오는 문자열을 PN이라고 한다. P1 IOI P2 IOIOI P3 IOIOIOI PN IOIOI...OI (O가 N개) I와 O로만 이루어진 문자열 S와 정수 N이 주어졌을 때, S안에 PN이 몇&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1690236176466&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;n = int(input())
m = int(input())
s = input()

s = s[s.find(&quot;IOI&quot;):s.rfind(&quot;IOI&quot;)+3]

start, end = 0, 0
cnt = 0

while end &amp;lt; m:
    if s[end:end + 3] == &quot;IOI&quot;:
        end += 2
        if end - start == 2 * n:
            cnt += 1
            start += 2
    else:
        end += 1
        start = end
        
print(cnt)&lt;/code&gt;&lt;/pre&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;처음에는 단순 슬라이싱으로 해결하려고 하니 서브태스크 1번만 맞아서 다른 방법을 고민했다.&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, m, s를 입력받는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가적으로 s를 변경하는데 시작 점은 IOI가 처음으로 나오는 지점,&lt;br /&gt;끝 지점은 IOI가 마지막으로 나오는 지점+3 까지다. (find의 경우 시작 지점의 인덱스를 반환한다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 start와 end, cnt를 세팅해 주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;end가 m이 되기 전까지 반복을 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 s의 부분문자열이 IOI라면 end를 2 늘려준다.&lt;br /&gt;이렇게 하면 지금 찾은 IOI의 뒤쪽 I로 이동한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 과정 중에 만약 end에서 start를 뺀 것이 2 * n과 같다면,&lt;br /&gt;이는 우리가 찾는 Pn이므로 카운트를 해주고&lt;br /&gt;start를 2 늘려주어 현재의 앞부분에서 IO를 뺀 그 이후 부분을 탐색한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 s의 부분문자열이 IOI가 아니라면,&lt;br /&gt;end를 1 늘려주어 다음 문자열부터 탐색하게 하고,&lt;br /&gt;그 이전의 부분은 의미가 없게 되므로 start를 end로 초기화해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종적으로 cnt를 출력한다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>백준</category>
      <category>백준 5525</category>
      <category>백준 5525 파이썬</category>
      <category>백준 IOIOI</category>
      <category>백준 IOIOI 파이썬</category>
      <category>파이썬 rfind</category>
      <category>파이썬 문자열</category>
      <category>파이썬 문자열 슬라이싱</category>
      <category>파이썬 슬라이싱</category>
      <category>파이썬 투포인터</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/264</guid>
      <comments>https://looancheong.tistory.com/264#entry264comment</comments>
      <pubDate>Thu, 27 Jul 2023 11:09:20 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 11725: 트리의 부모 찾기</title>
      <link>https://looancheong.tistory.com/263</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;1048&quot; data-origin-height=&quot;954&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dbC3OQ/btsoRz5sYPv/tu63bMNuYbxgsijckTIqm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dbC3OQ/btsoRz5sYPv/tu63bMNuYbxgsijckTIqm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dbC3OQ/btsoRz5sYPv/tu63bMNuYbxgsijckTIqm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdbC3OQ%2FbtsoRz5sYPv%2Ftu63bMNuYbxgsijckTIqm0%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;1048&quot; height=&quot;954&quot; data-origin-width=&quot;1048&quot; data-origin-height=&quot;954&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/11725&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/11725&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1690233461532&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;11725번: 트리의 부모 찾기&quot; data-og-description=&quot;루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/11725&quot; data-og-url=&quot;https://www.acmicpc.net/problem/11725&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/HMmPV/hyTo8qNgwX/mklg9uHDHtHuJd9PcvR6ek/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/11725&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/11725&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/HMmPV/hyTo8qNgwX/mklg9uHDHtHuJd9PcvR6ek/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;11725번: 트리의 부모 찾기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1690233497513&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
sys.setrecursionlimit(10**7)
input = sys.stdin.readline

n = int(input())

tree = [[] for _ in range(n+1)]
parents = [0 for _ in range(n+1)]

for _ in range(n-1):
    a, b = map(int, input().split())
    tree[a].append(b)
    tree[b].append(a)
    
def dfs(start):
    for i in tree[start]:
        if parents[i] == 0:
            parents[i] = start
            dfs(i)
            
dfs(1)

for i in range(2, n+1):
    print(parents[i])&lt;/code&gt;&lt;/pre&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;우선 dfs 제한을 풀어주고 시작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력값을 받아주고,&lt;br /&gt;노드의 연결 관계를 세팅할 tree와&lt;br /&gt;각 노드의 부모 정보를 담을 parents를 만들어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 n-1회만큼 반복하며 연결 관계를 세팅해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dfs는 시작점에 대한 정보를 가지고 돌린다.&lt;br /&gt;시작하는 노드의 연결관계에 있는 노드들에 대해서(1번 문제의 1의 경우 4와 6)&lt;br /&gt;만약 그 노드들의 부모가 0으로 되어있다면(부모가 세팅되지 않았다면)&lt;br /&gt;시작점을 부모로 만들어주고 해당 노드에 대해서 추가로 dfs를 돌린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;트리의 루트를 1로 가정했기 때문에 루트 노드를 1로 하고 dfs를 돌려준다.&lt;br /&gt;따라서 dfs(1)을 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 parents의 내용을 2번부터 출력해 준다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>백준</category>
      <category>백준 11725</category>
      <category>백준 11725 파이썬</category>
      <category>백준 11725 파이썬 dfs</category>
      <category>백준 트리의 부모 찾기</category>
      <category>백준 트리의 부모 찾기 파이썬</category>
      <category>백준 트리의 부모 찾기 파이썬 dfs</category>
      <category>파이썬 dfs</category>
      <category>파이썬 노드</category>
      <category>파이썬 트리</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/263</guid>
      <comments>https://looancheong.tistory.com/263#entry263comment</comments>
      <pubDate>Wed, 26 Jul 2023 10:25:03 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 2468: 안전 영역</title>
      <link>https://looancheong.tistory.com/262</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;612&quot; data-origin-height=&quot;977&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bk2dIr/btsoypoSmh8/XYk1Lw321KJYlcHuajwaf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bk2dIr/btsoypoSmh8/XYk1Lw321KJYlcHuajwaf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bk2dIr/btsoypoSmh8/XYk1Lw321KJYlcHuajwaf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbk2dIr%2FbtsoypoSmh8%2FXYk1Lw321KJYlcHuajwaf1%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;612&quot; height=&quot;977&quot; data-origin-width=&quot;612&quot; data-origin-height=&quot;977&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2468&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/2468&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1690084793072&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;2468번: 안전 영역&quot; data-og-description=&quot;재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2468&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2468&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2468&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2468&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;2468번: 안전 영역&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;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1690084842554&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import copy
import sys
sys.setrecursionlimit(10**6)

n = int(input())
land = list(list(map(int, input().split())) for i in range(n))
ans = []

dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]

def dfs(x, y):
    new_land[x][y] = 0
    
    for i in range(4):
        nx = x + dx[i]
        ny = y + dy[i]
    
        if 0 &amp;lt;= nx &amp;lt; n and 0 &amp;lt;= ny &amp;lt; n and new_land[nx][ny] &amp;gt;= 1:
            dfs(nx, ny)
        
for water in range(max(map(max, land))+1):
    new_land = copy.deepcopy(land)
    cnt = 0
    
    for i in range(n):
        for j in range(n):
            if new_land[i][j] &amp;lt;= water:
                new_land[i][j] = 0

    for i in range(n):
        for j in range(n):
            if new_land[i][j] &amp;gt;= 1:
                dfs(i, j)
                cnt += 1

    ans.append(cnt)
    
print(max(ans))&lt;/code&gt;&lt;/pre&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;dfs로 풀어야 한다는 접근 자체는 금방 했지만 중간중간 디테일에서 걸리는 게 많았던 문제였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 입력값을 받아주고 답을 담아둘 ans를 만들어둔다.&lt;br /&gt;그리고 4방향 dfs이므로 4방향을 지정해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dfs는 land의 복사본을 만들어서 돌릴 예정이므로 방문한 땅을 0으로 바꿔서 처리했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;땅의 최대 범위 사이와 1 이상인 경우(땅이 잠기지 않은 경우)만&lt;br /&gt;추가로 dfs를 수행한다(땅이 연결되어 있는 경우).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 물의 범위를 지정해야 하는데 2차원 배열의 max 값을 찾는 방법을 활용했다.&lt;br /&gt;처음에 단순하게 max(max(land))로 설정했다가 에러를 만났다.&lt;br /&gt;예를 들어 땅이 3인 경우&lt;br /&gt;3 3 6&lt;br /&gt;1 1 1&lt;br /&gt;1 1 9&lt;br /&gt;와 같은 땅인 경우 max(land)가 3 3 6이 되어 max(max(land))는 6이 되어버려 max 값에 에러가 난다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 방지하기 위해 각 열의 max 값에서 max를 찾는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 땅을 복사하는 과정에서도 에러가 있었다.&lt;br /&gt;땅을 그냥 new_land = land로 복사하게 되면&lt;br /&gt;메모리값에 영향을 주어 2번째 루프부터 기존 land의 이용이 불가능했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 해결하기 위해 copy의 deepcopy를 사용하여 해결했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 이후에는 물의 깊이에 맞춰&lt;br /&gt;물보다 낮은 땅은 0으로 바꿔주어 방문하지 않게 하고&lt;br /&gt;dfs를 수행했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 결괏값들을 and 리스트에 담아두고&lt;br /&gt;모든 수행이 끝난 후 and의 최댓값을 출력한다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>백준</category>
      <category>백준 2468</category>
      <category>백준 2468 반례</category>
      <category>백준 2468 파이썬</category>
      <category>백준 2468 파이썬 반례</category>
      <category>파이썬 copy</category>
      <category>파이썬 copy.deepcopy()</category>
      <category>파이썬 deepcopy</category>
      <category>파이썬 dfs</category>
      <category>파이썬 복사</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/262</guid>
      <comments>https://looancheong.tistory.com/262#entry262comment</comments>
      <pubDate>Tue, 25 Jul 2023 11:09:37 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 17413: 단어 뒤집기 2</title>
      <link>https://looancheong.tistory.com/261</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;1181&quot; data-origin-height=&quot;855&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxPWRy/btsoyVHC8BI/RrUdO4BMyzQgGwYGU5P9y1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxPWRy/btsoyVHC8BI/RrUdO4BMyzQgGwYGU5P9y1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxPWRy/btsoyVHC8BI/RrUdO4BMyzQgGwYGU5P9y1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxPWRy%2FbtsoyVHC8BI%2FRrUdO4BMyzQgGwYGU5P9y1%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;1181&quot; height=&quot;855&quot; data-origin-width=&quot;1181&quot; data-origin-height=&quot;855&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/17413&quot;&gt;https://www.acmicpc.net/problem/17413&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1690020695522&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;17413번: 단어 뒤집기 2&quot; data-og-description=&quot;문자열 S가 주어졌을 때, 이 문자열에서 단어만&amp;nbsp;뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('&amp;lt;', '&amp;gt;')로만 이루어져 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/17413&quot; data-og-url=&quot;https://www.acmicpc.net/problem/17413&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/3I76y/hyTnOsiY8K/rseMzK2fa4tJyyTQ0x8B90/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/17413&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/17413&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/3I76y/hyTnOsiY8K/rseMzK2fa4tJyyTQ0x8B90/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;17413번: 단어 뒤집기 2&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;문자열 S가 주어졌을 때, 이 문자열에서 단어만&amp;nbsp;뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('&amp;lt;', '&amp;gt;')로만 이루어져&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1690020719512&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;s = input()
stack = []
ans = []
reverse = True

for i in s:
    if i == ' ':
        while stack:
            ans.append(stack.pop())
        ans.append(i)
        
    elif i == '&amp;lt;':
        reverse = False
        while stack:
            ans.append(stack.pop())
        ans.append(i)
        
    elif i == '&amp;gt;':
        reverse = True
        ans.append(i)
        
    else:
        if not reverse:
            ans.append(i)
        else:
            stack.append(i)
            
while stack:
    ans.append(stack.pop())

print(''.join(ans))&lt;/code&gt;&lt;/pre&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;우선 입력값을 s로 받아주고,&lt;br /&gt;뒤집힐 글자를 넣어둘 stack과 정답을 넣어둘 ans를 리스트로 만들어주었다.&lt;br /&gt;그리고 뒤집힐 상태를 정해줄 reverse도 만들어 주었다.&lt;br /&gt;'&amp;lt;'가 오는 경우가 아니면 뒤집어야 하기에 기본 상태를 True로 설정했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열을 돌며 행동을 취한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 문자가 공백(' ') 일 경우&lt;br /&gt;기존까지 쌓아놨던 문자열이 있다면 문자열을 역순으로 정답에 넣어준다.&lt;br /&gt;이후 공백을 정답에 추가한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 문자가 '&amp;lt;'일 경우&lt;br /&gt;reverse 상태를 False로 바꿔준다.&lt;br /&gt;기존까지 쌓아놨던 문자열이 있다면 문자열을 역순으로 정답에 넣어준다.&lt;br /&gt;이후 '&amp;lt;'를 정답에 추가한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 문자가 '&amp;gt;'일 경우&lt;br /&gt;reverse 상태를 True로 바꿔준다.&lt;br /&gt;'&amp;gt;'를 정답에 추가한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 그 외의 경우(그냥 문자인 경우)&lt;br /&gt;reverse의 상태에 맞춰&lt;br /&gt;True라면 스택에,&lt;br /&gt;False라면 정답에 넣어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열을 다 돌고 남은 스택을 확인한다.&lt;br /&gt;스택이 남아있다면 역순으로 정답에 넣어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종적으로 정답을 출력한다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>백준</category>
      <category>백준 17413</category>
      <category>백준 17413 파이썬</category>
      <category>백준 단어 뒤집기 2</category>
      <category>백준 단어 뒤집기 2 파이썬</category>
      <category>백준 단어 뒤집기2</category>
      <category>백준 단어 뒤집기2 파이썬</category>
      <category>파이썬</category>
      <category>파이썬 문자열</category>
      <category>파이썬 문자열 reverse</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/261</guid>
      <comments>https://looancheong.tistory.com/261#entry261comment</comments>
      <pubDate>Mon, 24 Jul 2023 11:17:32 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 2407: 조합</title>
      <link>https://looancheong.tistory.com/260</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;1167&quot; data-origin-height=&quot;477&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yNqRs/btsol7JJLlk/WB4wD5r9w6s5R5OHBUnm3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yNqRs/btsol7JJLlk/WB4wD5r9w6s5R5OHBUnm3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yNqRs/btsol7JJLlk/WB4wD5r9w6s5R5OHBUnm3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyNqRs%2Fbtsol7JJLlk%2FWB4wD5r9w6s5R5OHBUnm3K%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;1167&quot; height=&quot;477&quot; data-origin-width=&quot;1167&quot; data-origin-height=&quot;477&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2407&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/2407&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689846250802&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;2407번: 조합&quot; data-og-description=&quot;n과 m이 주어진다. (5 &amp;le;&amp;nbsp;n &amp;le;&amp;nbsp;100, 5 &amp;le;&amp;nbsp;m &amp;le;&amp;nbsp;100, m &amp;le;&amp;nbsp;n)&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2407&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2407&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/uBMe1/hyTmtPmfuo/0tkbTKqnV6kKDR3EJZcskK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2407&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2407&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/uBMe1/hyTmtPmfuo/0tkbTKqnV6kKDR3EJZcskK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;2407번: 조합&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;n과 m이 주어진다. (5 &amp;le;&amp;nbsp;n &amp;le;&amp;nbsp;100, 5 &amp;le;&amp;nbsp;m &amp;le;&amp;nbsp;100, m &amp;le;&amp;nbsp;n)&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1689846271795&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from math import comb
n, m = map(int, input().split())
print(comb(n, m))&lt;/code&gt;&lt;/pre&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;math 라이브러리에 있는 comb를 이용해서 구했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;factorial()을 이용해서 구하는 방법도 있다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>백준</category>
      <category>백준 2407</category>
      <category>백준 2407 파이썬</category>
      <category>백준 조합</category>
      <category>백준 조합 파이썬</category>
      <category>파이썬</category>
      <category>파이썬 comb</category>
      <category>파이썬 math</category>
      <category>파이썬 조합</category>
      <category>파이썬 팩토리얼</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/260</guid>
      <comments>https://looancheong.tistory.com/260#entry260comment</comments>
      <pubDate>Fri, 21 Jul 2023 10:46:04 +0900</pubDate>
    </item>
    <item>
      <title>[T-SUM] 7주차 자료 - Data Structure(List, Tuple, Dictionary), For 반복문</title>
      <link>https://looancheong.tistory.com/259</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;203&quot; data-origin-height=&quot;53&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FqvXZ/btsoftZFPs9/HitaoJQn7woQNsbErosvM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FqvXZ/btsoftZFPs9/HitaoJQn7woQNsbErosvM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FqvXZ/btsoftZFPs9/HitaoJQn7woQNsbErosvM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFqvXZ%2FbtsoftZFPs9%2FHitaoJQn7woQNsbErosvM1%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;203&quot; height=&quot;53&quot; data-origin-width=&quot;203&quot; data-origin-height=&quot;53&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;오늘의 내용 미리보기&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;77&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Hmf6D/btsobJ29Obf/w4077hxqtwW8y5OGRdUW5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Hmf6D/btsobJ29Obf/w4077hxqtwW8y5OGRdUW5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Hmf6D/btsobJ29Obf/w4077hxqtwW8y5OGRdUW5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHmf6D%2FbtsobJ29Obf%2Fw4077hxqtwW8y5OGRdUW5K%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;257&quot; height=&quot;77&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;77&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬에는 3가지 자료 구조가 존재합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 리스트&lt;br /&gt;2. 튜플&lt;br /&gt;3. 딕셔너리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 이 세 가지를 배워보고 각각의 차이점에 대해서 알아볼 건데 그전에 'Method'부터 알고 넘어갑시다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Method&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메소드는 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;데이터 뒤에 결합된 function&lt;/b&gt;&lt;/span&gt;을 뜻합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 우리가 사용하던 print와 같이 함수지만 어떤 데이터와 결합하여 사용할 수 있습니다.&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;180&quot; data-origin-height=&quot;91&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bk5xz0/btsoe22aaB1/HGvnejqEWkD2hQpVBJ8NI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bk5xz0/btsoe22aaB1/HGvnejqEWkD2hQpVBJ8NI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bk5xz0/btsoe22aaB1/HGvnejqEWkD2hQpVBJ8NI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbk5xz0%2Fbtsoe22aaB1%2FHGvnejqEWkD2hQpVBJ8NI0%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;180&quot; height=&quot;91&quot; data-origin-width=&quot;180&quot; data-origin-height=&quot;91&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;upper() 메소드는 입력받은 문자열을 대문자로 반환해 줍니다.&lt;br /&gt;다른 예시도 볼까요?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;215&quot; data-origin-height=&quot;98&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Log2T/btsofaeO5oP/PFrV70TtnwfUAaFajeTyrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Log2T/btsofaeO5oP/PFrV70TtnwfUAaFajeTyrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Log2T/btsofaeO5oP/PFrV70TtnwfUAaFajeTyrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLog2T%2FbtsofaeO5oP%2FPFrV70TtnwfUAaFajeTyrK%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;215&quot; height=&quot;98&quot; data-origin-width=&quot;215&quot; data-origin-height=&quot;98&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;captialize() 메소드는 입력받은 문자열의 첫 글자를 대문자로 반환합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 어떤 자료형과 엮여있는 함수를 우리는 메소드라고 부릅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하게 살펴봤으니 이제 자료 구조들을 배우고 여기서 어떻게 적용되는지 알아봅시다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;List&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리스트는 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;원소들이 연속적으로 저장되는 형태의 자료형&lt;/b&gt;&lt;/span&gt;입니다.&lt;br /&gt;이때 저장되는 요소들이 꼭 같은 자료형일 필요는 없습니다.&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;69&quot; data-origin-height=&quot;21&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvfVLn/btsobdpyTL5/qCtTANAFCjOkPwQ9zf5N1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvfVLn/btsobdpyTL5/qCtTANAFCjOkPwQ9zf5N1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvfVLn/btsobdpyTL5/qCtTANAFCjOkPwQ9zf5N1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvfVLn%2FbtsobdpyTL5%2FqCtTANAFCjOkPwQ9zf5N1K%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;69&quot; height=&quot;21&quot; data-origin-width=&quot;69&quot; data-origin-height=&quot;21&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하게 대괄호를 열고 닫으면 리스트가 완성됩니다.&lt;br /&gt;혹은 이런 방식도 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;98&quot; data-origin-height=&quot;26&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UtSlF/btsofOCeygL/1XuPqOwUc7Vl1CO62K3Gk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UtSlF/btsofOCeygL/1XuPqOwUc7Vl1CO62K3Gk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UtSlF/btsofOCeygL/1XuPqOwUc7Vl1CO62K3Gk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUtSlF%2FbtsofOCeygL%2F1XuPqOwUc7Vl1CO62K3Gk1%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;98&quot; height=&quot;26&quot; data-origin-width=&quot;98&quot; data-origin-height=&quot;26&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이와 같은 방식으로 리스트를 생성할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 리스트에 원소를 넣어볼까요?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;184&quot; data-origin-height=&quot;26&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JoK7y/btsoe0Desh4/LPQ4cV8rm7seL7LwC0kDt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JoK7y/btsoe0Desh4/LPQ4cV8rm7seL7LwC0kDt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JoK7y/btsoe0Desh4/LPQ4cV8rm7seL7LwC0kDt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJoK7y%2Fbtsoe0Desh4%2FLPQ4cV8rm7seL7LwC0kDt0%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;184&quot; height=&quot;26&quot; data-origin-width=&quot;184&quot; data-origin-height=&quot;26&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 굉장히 다양한 원소를 넣을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열, 숫자, 불리언까지 모든 원소를 가질 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;244&quot; data-origin-height=&quot;27&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckbfEX/btsoe19XJQW/njchdKmLqxbHaAMrxLtLYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckbfEX/btsoe19XJQW/njchdKmLqxbHaAMrxLtLYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckbfEX/btsoe19XJQW/njchdKmLqxbHaAMrxLtLYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckbfEX%2Fbtsoe19XJQW%2FnjchdKmLqxbHaAMrxLtLYK%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;27&quot; data-origin-width=&quot;244&quot; data-origin-height=&quot;27&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 이런 식으로 중복된 원소를 가질 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리스트에서 쓸 수 있는 메소드를 몇 개 알아볼까요?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;250&quot; data-origin-height=&quot;57&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vdK7p/btsoe9tu3sc/koLgJiIgwnbQmPyCewqThk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vdK7p/btsoe9tu3sc/koLgJiIgwnbQmPyCewqThk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vdK7p/btsoe9tu3sc/koLgJiIgwnbQmPyCewqThk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvdK7p%2Fbtsoe9tu3sc%2FkoLgJiIgwnbQmPyCewqThk%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;250&quot; height=&quot;57&quot; data-origin-width=&quot;250&quot; data-origin-height=&quot;57&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;count라는 메소드는 해당 리스트 안에 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;목표하는 원소의 개수&lt;/b&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;249&quot; data-origin-height=&quot;54&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d6J4rL/btsoeZYEocF/8Ofw2wRwOw4XBvOuwzwjv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d6J4rL/btsoeZYEocF/8Ofw2wRwOw4XBvOuwzwjv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d6J4rL/btsoeZYEocF/8Ofw2wRwOw4XBvOuwzwjv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd6J4rL%2FbtsoeZYEocF%2F8Ofw2wRwOw4XBvOuwzwjv1%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;249&quot; height=&quot;54&quot; data-origin-width=&quot;249&quot; data-origin-height=&quot;54&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;clear의 경우 리스트를 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;빈 리스트로 초기화해 줍니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;254&quot; data-origin-height=&quot;89&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oKB3B/btsogf0LSM9/u2NUqP50m0uX24MxoeLqK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oKB3B/btsogf0LSM9/u2NUqP50m0uX24MxoeLqK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oKB3B/btsogf0LSM9/u2NUqP50m0uX24MxoeLqK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoKB3B%2Fbtsogf0LSM9%2Fu2NUqP50m0uX24MxoeLqK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;254&quot; height=&quot;89&quot; data-origin-width=&quot;254&quot; data-origin-height=&quot;89&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;append는 리스트의 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;끝부분에 해당 요소를 추가해 줍니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;252&quot; data-origin-height=&quot;94&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zvZ3q/btsn9URpa7E/DDBUmT0l0PkKWfyM0rK6BK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zvZ3q/btsn9URpa7E/DDBUmT0l0PkKWfyM0rK6BK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zvZ3q/btsn9URpa7E/DDBUmT0l0PkKWfyM0rK6BK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzvZ3q%2Fbtsn9URpa7E%2FDDBUmT0l0PkKWfyM0rK6BK%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;252&quot; height=&quot;94&quot; data-origin-width=&quot;252&quot; data-origin-height=&quot;94&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pop은 리스트의 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;끝에 있는 요소를 제거&lt;/span&gt;&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;247&quot; data-origin-height=&quot;95&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XU4JB/btsobcYw0eD/I48QVWjH0WK2INVDCjUxWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XU4JB/btsobcYw0eD/I48QVWjH0WK2INVDCjUxWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XU4JB/btsobcYw0eD/I48QVWjH0WK2INVDCjUxWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXU4JB%2FbtsobcYw0eD%2FI48QVWjH0WK2INVDCjUxWk%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;247&quot; height=&quot;95&quot; data-origin-width=&quot;247&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;remove는 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;목표한 원소를 제거&lt;/span&gt;&lt;/b&gt;합니다.&lt;br /&gt;이때 2개 이상이라면 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;가장 처음 만나는 원소를 제거&lt;/b&gt;&lt;/span&gt;합니다.&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;261&quot; data-origin-height=&quot;56&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c1Fb32/btsofalDwXt/QjutQRUqTJeK1fvhESgvSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c1Fb32/btsofalDwXt/QjutQRUqTJeK1fvhESgvSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c1Fb32/btsofalDwXt/QjutQRUqTJeK1fvhESgvSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1Fb32%2FbtsofalDwXt%2FQjutQRUqTJeK1fvhESgvSK%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;261&quot; height=&quot;56&quot; data-origin-width=&quot;261&quot; data-origin-height=&quot;56&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 리스트의 뒤에 대괄호를 붙여서 숫자를 넣어주면 해당 위치의 값만 나오게 됩니다.&lt;br /&gt;이를 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;인덱스(index)&lt;/span&gt;&lt;/b&gt;라고 합니다.&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;51&quot; data-origin-height=&quot;27&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/y7xPk/btsoicIVthS/s0GopepoKH7yJfpehW39e1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/y7xPk/btsoicIVthS/s0GopepoKH7yJfpehW39e1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/y7xPk/btsoicIVthS/s0GopepoKH7yJfpehW39e1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fy7xPk%2FbtsoicIVthS%2Fs0GopepoKH7yJfpehW39e1%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;51&quot; height=&quot;27&quot; data-origin-width=&quot;51&quot; data-origin-height=&quot;27&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상하게도 토마토가 튀어나옵니다.&lt;br /&gt;분명 토마토는 3번째에 있는데 무언가 오류가 있는 걸까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사람은 숫자를 1부터 세지만&lt;br /&gt;컴퓨터는 숫자를 0부터 셉니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 0은 'Apple' 1은 'Banana' 2가 'Tomato'가 됩니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Tuple&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 튜플에 대해서 알아봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;튜플도 리스트와 굉장히 비슷하게 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대괄호 대신 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;소괄호를 사용&lt;/span&gt;&lt;/b&gt;하는 차이가 있겠네요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;261&quot; data-origin-height=&quot;19&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kyDbM/btsohp2TQUu/R8g0cvN5SXysL8jwQZSrV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kyDbM/btsohp2TQUu/R8g0cvN5SXysL8jwQZSrV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kyDbM/btsohp2TQUu/R8g0cvN5SXysL8jwQZSrV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkyDbM%2Fbtsohp2TQUu%2FR8g0cvN5SXysL8jwQZSrV1%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;261&quot; height=&quot;19&quot; data-origin-width=&quot;261&quot; data-origin-height=&quot;19&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 가장 중요한 차이는 튜플은 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;한 번 생성하면 값을 수정할 수 없습니다&lt;/span&gt;&lt;/b&gt;.&lt;br /&gt;이를 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;불변성&lt;/b&gt;&lt;/span&gt;이 있다고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 튜플은 메소드의 개수도 적습니다.&lt;br /&gt;2개만 가지고 있는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. count()&lt;br /&gt;2. index()&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;count는 위에서 봤으니까 index를 한 번 볼까요?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;260&quot; data-origin-height=&quot;54&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btCQQe/btsofssVmO4/PcRY0cQaVtw8r2V7dkyzg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btCQQe/btsofssVmO4/PcRY0cQaVtw8r2V7dkyzg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btCQQe/btsofssVmO4/PcRY0cQaVtw8r2V7dkyzg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtCQQe%2FbtsofssVmO4%2FPcRY0cQaVtw8r2V7dkyzg0%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;260&quot; height=&quot;54&quot; data-origin-width=&quot;260&quot; data-origin-height=&quot;54&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;index는 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;원하는 원소의 인덱스를 반환&lt;/span&gt;&lt;/b&gt;합니다.&lt;br /&gt;이 경우에는 1을 반환하겠네요.&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;258&quot; data-origin-height=&quot;60&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvIAu2/btsobJB6dBO/Oeyo8KhegOyRwYPmfOKnQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvIAu2/btsobJB6dBO/Oeyo8KhegOyRwYPmfOKnQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvIAu2/btsobJB6dBO/Oeyo8KhegOyRwYPmfOKnQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvIAu2%2FbtsobJB6dBO%2FOeyo8KhegOyRwYPmfOKnQ0%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;258&quot; height=&quot;60&quot; data-origin-width=&quot;258&quot; data-origin-height=&quot;60&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Dictionary&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딕셔너리는 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Key와 Value를 쌍으로 갖습니다&lt;/span&gt;&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딕셔너리는 중괄호를 사용해서 표현합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시를 봅시다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;120&quot; data-origin-height=&quot;92&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpiD0Q/btsoeBjvDEK/ljOe2mYkaQ5awYBytikBl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpiD0Q/btsoeBjvDEK/ljOe2mYkaQ5awYBytikBl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpiD0Q/btsoeBjvDEK/ljOe2mYkaQ5awYBytikBl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpiD0Q%2FbtsoeBjvDEK%2FljOe2mYkaQ5awYBytikBl0%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;120&quot; height=&quot;92&quot; data-origin-width=&quot;120&quot; data-origin-height=&quot;92&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Apple이라는 키는 3이라는 밸류를,&lt;br /&gt;Banana라는 키는 4라는 밸류를,&lt;br /&gt;Tomato라는 키는 2라는 밸류를 갖습니다.&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;178&quot; data-origin-height=&quot;23&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMunEx/btsoe8OZmGV/EGNxOxNpRV84PYKLpH9Fa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMunEx/btsoe8OZmGV/EGNxOxNpRV84PYKLpH9Fa1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMunEx/btsoe8OZmGV/EGNxOxNpRV84PYKLpH9Fa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMunEx%2Fbtsoe8OZmGV%2FEGNxOxNpRV84PYKLpH9Fa1%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;178&quot; height=&quot;23&quot; data-origin-width=&quot;178&quot; data-origin-height=&quot;23&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;get은 키값을 입력하면 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;해당 키의 밸류를 반환&lt;/b&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;142&quot; data-origin-height=&quot;19&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/A1i4K/btsogZDuxce/31voyzkA4GauyNyPUeGxNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/A1i4K/btsogZDuxce/31voyzkA4GauyNyPUeGxNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/A1i4K/btsogZDuxce/31voyzkA4GauyNyPUeGxNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA1i4K%2FbtsogZDuxce%2F31voyzkA4GauyNyPUeGxNK%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;142&quot; height=&quot;19&quot; data-origin-width=&quot;142&quot; data-origin-height=&quot;19&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;135&quot; data-origin-height=&quot;41&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Dwh8W/btsofqPqX3n/7gHEAkmntlZzEKOYRlkHAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Dwh8W/btsofqPqX3n/7gHEAkmntlZzEKOYRlkHAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Dwh8W/btsofqPqX3n/7gHEAkmntlZzEKOYRlkHAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDwh8W%2FbtsofqPqX3n%2F7gHEAkmntlZzEKOYRlkHAk%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;135&quot; height=&quot;41&quot; data-origin-width=&quot;135&quot; data-origin-height=&quot;41&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pop을 통해 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;해당 키값을 제거&lt;/span&gt;&lt;/b&gt;할 수 있습니다.&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;153&quot; data-origin-height=&quot;123&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGmpCQ/btsogdu8G8x/2uB9uONXKEWDeNGMr3dgK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGmpCQ/btsogdu8G8x/2uB9uONXKEWDeNGMr3dgK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGmpCQ/btsogdu8G8x/2uB9uONXKEWDeNGMr3dgK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGmpCQ%2Fbtsogdu8G8x%2F2uB9uONXKEWDeNGMr3dgK0%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;153&quot; height=&quot;123&quot; data-origin-width=&quot;153&quot; data-origin-height=&quot;123&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딕셔너리의 밸류도 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;문자형, 숫자형, 불리언을 모두 가질 수 있습니다&lt;/span&gt;&lt;/b&gt;.&lt;br /&gt;그리고 리스트도 밸류로 가질 수 있습니다.&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;205&quot; data-origin-height=&quot;39&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CeSN5/btsobaNioUg/bJs7MIYLPZsQszHigsdDH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CeSN5/btsobaNioUg/bJs7MIYLPZsQszHigsdDH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CeSN5/btsobaNioUg/bJs7MIYLPZsQszHigsdDH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCeSN5%2FbtsobaNioUg%2FbJs7MIYLPZsQszHigsdDH1%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;205&quot; height=&quot;39&quot; data-origin-width=&quot;205&quot; data-origin-height=&quot;39&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리스트에서 사용했던 append를 이용해 값을 추가할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다양한 자료구조와 메소드를 알아보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 이 자료구조를 이용해 사용할 수 있는 for 문에 대해서 알아봅시다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;For 반복문&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아까 봤던 음식에 대한 리스트를 한 번 가져와볼까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;263&quot; data-origin-height=&quot;27&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wEofM/btsogfs4il7/rjg0sjrjoCwVgSE4lMzjIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wEofM/btsogfs4il7/rjg0sjrjoCwVgSE4lMzjIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wEofM/btsogfs4il7/rjg0sjrjoCwVgSE4lMzjIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwEofM%2Fbtsogfs4il7%2Frjg0sjrjoCwVgSE4lMzjIk%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;263&quot; height=&quot;27&quot; data-origin-width=&quot;263&quot; data-origin-height=&quot;27&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;107&quot; data-origin-height=&quot;57&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUBn4R/btsogZjdRIl/3lVfQLH7xsUTpMspPGhNL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUBn4R/btsogZjdRIl/3lVfQLH7xsUTpMspPGhNL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUBn4R/btsogZjdRIl/3lVfQLH7xsUTpMspPGhNL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUBn4R%2FbtsogZjdRIl%2F3lVfQLH7xsUTpMspPGhNL0%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;107&quot; height=&quot;57&quot; data-origin-width=&quot;107&quot; data-origin-height=&quot;57&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 할 수 있겠죠?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 귀찮잖아요.&lt;br /&gt;그래서 조금 더 간결하게 지난 시간에 배운 while 문을 이용해 줄여봅시다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;256&quot; data-origin-height=&quot;110&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clo7Kp/btsohzR0lk2/jE4auV17R7Pp9w2dhMurj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clo7Kp/btsohzR0lk2/jE4auV17R7Pp9w2dhMurj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clo7Kp/btsohzR0lk2/jE4auV17R7Pp9w2dhMurj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fclo7Kp%2FbtsohzR0lk2%2FjE4auV17R7Pp9w2dhMurj1%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;256&quot; height=&quot;110&quot; data-origin-width=&quot;256&quot; data-origin-height=&quot;110&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 인덱스를 표시할 수를 하나 만들고 반복문을 돌며 하나씩 늘려나가는 방법이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 이것도 귀찮잖아요?&lt;br /&gt;조금 더 줄이기 위해 for 문을 사용해 봅시다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;112&quot; data-origin-height=&quot;41&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/on98x/btsoe8BtDMJ/v7fXloQBUpbM3RKN1skk7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/on98x/btsoe8BtDMJ/v7fXloQBUpbM3RKN1skk7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/on98x/btsoe8BtDMJ/v7fXloQBUpbM3RKN1skk7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fon98x%2Fbtsoe8BtDMJ%2Fv7fXloQBUpbM3RKN1skk7k%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;112&quot; height=&quot;41&quot; data-origin-width=&quot;112&quot; data-origin-height=&quot;41&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;놀랍게도 굉장히 간결해졌죠?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 i의 자리에는 다른 문자가 와도 상관없습니다.&lt;br /&gt;임의의 변수를 하나 생성해 주는 거예요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 i는 food의 목록 순서에 따라서 변화합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 Apple, 그다음 반복이 될 때는 Banana, 마지막에는 Tomato가 되는 것이죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이와 비슷하게 range를 사용해서도 나타낼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;188&quot; data-origin-height=&quot;36&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DhL1P/btsog1gVsNn/BTt8XDveBKskqnsXpHbn0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DhL1P/btsog1gVsNn/BTt8XDveBKskqnsXpHbn0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DhL1P/btsog1gVsNn/BTt8XDveBKskqnsXpHbn0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDhL1P%2Fbtsog1gVsNn%2FBTt8XDveBKskqnsXpHbn0k%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;188&quot; height=&quot;36&quot; data-origin-width=&quot;188&quot; data-origin-height=&quot;36&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때는 i가 0, 1, 2 순서로 변화합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;len은 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;문자열의 길이를 반환하는 함수&lt;/span&gt;&lt;/b&gt;입니다.&lt;br /&gt;여기서는 food의 길이인 2를 반환합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 i는 0부터 2까지 반복을 하며,&lt;br /&gt;food[i] 에 맞는 각 원소를 반환하는 것이죠.&lt;/p&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;br /&gt;파이썬의 3가지 자료 구조인 리스트, 튜플, 딕셔너리&lt;br /&gt;그리고 for 반복문까지 학습했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음시간에 만나요 안뇽!&lt;/p&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2438&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/2438&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689769280732&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;2438번: 별 찍기 - 1&quot; data-og-description=&quot;첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2438&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2438&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cikY8S/hyTmvsdnKg/l5Limg4aoyTeQLtRjc4681/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2438&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2438&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cikY8S/hyTmvsdnKg/l5Limg4aoyTeQLtRjc4681/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;2438번: 별 찍기 - 1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2439&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/2439&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689769290264&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;2439번: 별 찍기 - 2&quot; data-og-description=&quot;첫째 줄에는 별 1개, 둘째&amp;nbsp;줄에는 별 2개, N번째&amp;nbsp;줄에는 별 N개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2439&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2439&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ER0VP/hyTmzIi7QV/WL5JLTmYXlGWUAsiLnRP40/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2439&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2439&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ER0VP/hyTmzIi7QV/WL5JLTmYXlGWUAsiLnRP40/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;2439번: 별 찍기 - 2&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에는 별 1개, 둘째&amp;nbsp;줄에는 별 2개, N번째&amp;nbsp;줄에는 별 N개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/10950&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/10950&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689769303474&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;10950번: A+B - 3&quot; data-og-description=&quot;두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/10950&quot; data-og-url=&quot;https://www.acmicpc.net/problem/10950&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/GrZph/hyTnJbs9B2/8OUPK2rnzqG5XJwpUw5Us1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/10950&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/10950&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/GrZph/hyTnJbs9B2/8OUPK2rnzqG5XJwpUw5Us1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;10950번: A+B - 3&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/10952&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/10952&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689769314560&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;10952번: A+B - 5&quot; data-og-description=&quot;두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/10952&quot; data-og-url=&quot;https://www.acmicpc.net/problem/10952&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/5llsp/hyTnKOZt2H/uJaU5b8yuf5ckHGCmkFugK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/10952&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/10952&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/5llsp/hyTnKOZt2H/uJaU5b8yuf5ckHGCmkFugK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;10952번: A+B - 5&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/8393&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/8393&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689769333282&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;8393번: 합&quot; data-og-description=&quot;n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/8393&quot; data-og-url=&quot;https://www.acmicpc.net/problem/8393&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Yf8sM/hyTnJWQ5Lo/649iPUWrWieLQjW8KyFMl1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/8393&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/8393&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Yf8sM/hyTnJWQ5Lo/649iPUWrWieLQjW8KyFMl1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;8393번: 합&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/25304&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/25304&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689769363553&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;25304번: 영수증&quot; data-og-description=&quot;준원이는 저번 주에 살면서 처음으로 코스트코를 가 봤다. 정말 멋졌다. 그런데, 몇 개 담지도 않았는데&amp;nbsp;수상하게 높은&amp;nbsp;금액이 나오는&amp;nbsp;것이다!&amp;nbsp;준원이는 영수증을 보면서 정확하게 계산된 것&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/25304&quot; data-og-url=&quot;https://www.acmicpc.net/problem/25304&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bXkBZ3/hyTmqYTsLX/JdFoNvY3R09ygkCc5Ywi61/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/25304&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/25304&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bXkBZ3/hyTmqYTsLX/JdFoNvY3R09ygkCc5Ywi61/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;25304번: 영수증&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;준원이는 저번 주에 살면서 처음으로 코스트코를 가 봤다. 정말 멋졌다. 그런데, 몇 개 담지도 않았는데&amp;nbsp;수상하게 높은&amp;nbsp;금액이 나오는&amp;nbsp;것이다!&amp;nbsp;준원이는 영수증을 보면서 정확하게 계산된 것&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>T-SUM 멘토링</category>
      <category>T-SUM</category>
      <category>파이썬</category>
      <category>파이썬 dictionary</category>
      <category>파이썬 for</category>
      <category>파이썬 for i in</category>
      <category>파이썬 for i in range</category>
      <category>파이썬 list</category>
      <category>파이썬 tuple</category>
      <category>파이썬 강의</category>
      <category>파이썬 기초</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/259</guid>
      <comments>https://looancheong.tistory.com/259#entry259comment</comments>
      <pubDate>Thu, 20 Jul 2023 19:50:48 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 4963: 섬의 개수</title>
      <link>https://looancheong.tistory.com/258</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;783&quot; data-origin-height=&quot;948&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sW3Ky/btsoe0CFKJe/vXNNzQduJwtQkpF5S9ko10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sW3Ky/btsoe0CFKJe/vXNNzQduJwtQkpF5S9ko10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sW3Ky/btsoe0CFKJe/vXNNzQduJwtQkpF5S9ko10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsW3Ky%2Fbtsoe0CFKJe%2FvXNNzQduJwtQkpF5S9ko10%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;783&quot; height=&quot;948&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;948&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/4963&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/4963&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689749884863&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;4963번: 섬의 개수&quot; data-og-description=&quot;입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/4963&quot; data-og-url=&quot;https://www.acmicpc.net/problem/4963&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/T313H/hyTmqqF3zp/VCPY7ESvn3rAKvbg8DqlB0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/4963&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/4963&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/T313H/hyTmqqF3zp/VCPY7ESvn3rAKvbg8DqlB0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;4963번: 섬의 개수&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1689749922547&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
sys.setrecursionlimit(10**6)

dx = [1, 1, -1, -1, 1, -1, 0, 0]
dy = [0, 1, 0, 1, -1, -1, 1, -1]

def dfs(x, y):
    land[x][y] = 0
    
    for i in range(8):
        nx = x + dx[i]
        ny = y + dy[i]
        
        if 0 &amp;lt;= nx &amp;lt; h and 0 &amp;lt;= ny &amp;lt; w and land[nx][ny] == 1:
            dfs(nx, ny)

while True:
    w, h = map(int, input().split())
    
    if w == 0 and h == 0:
        break
        
    land = list(list(map(int, input().split())) for i in range(h))
    
    cnt = 0
    
    for i in range(h):
        for j in range(w):
            if land[i][j] == 1:
                dfs(i, j)
                cnt += 1
            
    print(cnt)&lt;/code&gt;&lt;/pre&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;dfs를 이용해서 풀이했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 8방향을 모두 방문해야 하기에 그에 맞춰서 dx, dy를 설정해 주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 그에 맞춰 dfs를 진행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 방문한 땅을 0으로 변경해서 추가로 방문하지 않도록 한다.&lt;br /&gt;그리고 8방향을 탐색한다.&lt;br /&gt;만약 해당 수가 땅의 범위를 넘어가거나 땅이 아니라면(1이 아니라면) 탐색하지 않는다.&lt;br /&gt;그 외에 조건에 맞는 수라면 탐색을 진행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력 조건의 경우 w와 h를 각각 받아주고,&lt;br /&gt;두 수가 모두 0이면 break 해주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;땅의 경우 리스트로 받아주고&lt;br /&gt;섬의 개수를 세기 위한 cnt도 만들어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 h와 w를 고려하고 땅이 존재하는 경우 dfs를 진행해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종적으로 카운트된 섬의 개수를 출력한다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>dfs</category>
      <category>백준</category>
      <category>백준 4963</category>
      <category>백준 4963 파이썬</category>
      <category>백준 4963 파이썬 dfs</category>
      <category>백준 섬의 개수</category>
      <category>백준 섬의 개수 파이썬</category>
      <category>백준 섬의 개수 파이썬 dfs</category>
      <category>파이썬</category>
      <category>파이썬 dfs</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/258</guid>
      <comments>https://looancheong.tistory.com/258#entry258comment</comments>
      <pubDate>Thu, 20 Jul 2023 11:03:14 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 6603: 로또</title>
      <link>https://looancheong.tistory.com/257</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;1186&quot; data-origin-height=&quot;859&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1lY0l/btsn1JPEZ31/S6MEwpu9zveQYJlbIhaSWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1lY0l/btsn1JPEZ31/S6MEwpu9zveQYJlbIhaSWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1lY0l/btsn1JPEZ31/S6MEwpu9zveQYJlbIhaSWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1lY0l%2Fbtsn1JPEZ31%2FS6MEwpu9zveQYJlbIhaSWK%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;1186&quot; height=&quot;859&quot; data-origin-width=&quot;1186&quot; data-origin-height=&quot;859&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/6603&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/6603&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689684422041&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;6603번: 로또&quot; data-og-description=&quot;입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 &amp;lt; k &amp;lt; 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/6603&quot; data-og-url=&quot;https://www.acmicpc.net/problem/6603&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cD81S5/hyTmrvm823/uYz1CPmZBfx69sTNxiLxKK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/6603&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/6603&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cD81S5/hyTmrvm823/uYz1CPmZBfx69sTNxiLxKK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;6603번: 로또&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 &amp;lt; k &amp;lt; 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1689684485158&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from collections import deque

while True:
    nums = deque(map(int, input().split()))
    k = nums.popleft()
    if k == 0:
        break

    s = []

    def dfs():
        if len(s) == 6:
            print(' '.join(map(str,s)))
            return

        for i in sorted(nums):
            if i not in s:
                if s:
                    if s[-1] &amp;gt; i:
                        continue
                s.append(i)
                dfs()
                s.pop()

    dfs()
    print()&lt;/code&gt;&lt;/pre&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;연속적으로 주어지는 수의 제일 첫 입력(k)을 빠르게 제거하기 위해 덱을 사용해서 popleft 해주었다.&lt;br /&gt;이때 k가 0이면 break 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 외의 경우에는 백트래킹을 통해 문제를 해결해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 빈 리스트 s를 생성해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dfs를 돌리는데 정렬된 nums의 요소에 대해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. s안에 존재하지 않는 수&lt;br /&gt;2. 만약 s가 있다면 s의 -1번 인덱스(끝 수) 보다 큰 수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이와 같은 기준으로 s에 추가해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;s의 개수가 6개가 되었다면 해당 수를 출력해 준다.&lt;br /&gt;출력 형식을 맞추기 위해 한 사이클이 끝났으면 빈 공백을 프린트한다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>dfs</category>
      <category>백준</category>
      <category>백준 6603</category>
      <category>백준 6603 파이썬</category>
      <category>백준 로또</category>
      <category>백준 로또 파이썬</category>
      <category>백트래킹</category>
      <category>파이썬</category>
      <category>파이썬 dfs</category>
      <category>파이썬 백트래킹</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/257</guid>
      <comments>https://looancheong.tistory.com/257#entry257comment</comments>
      <pubDate>Wed, 19 Jul 2023 10:53:54 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 2417: 정수 제곱근</title>
      <link>https://looancheong.tistory.com/256</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;1168&quot; data-origin-height=&quot;486&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNwOLN/btsnYZq7UdV/8jwuWXP0yQykGetCJZvib1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNwOLN/btsnYZq7UdV/8jwuWXP0yQykGetCJZvib1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNwOLN/btsnYZq7UdV/8jwuWXP0yQykGetCJZvib1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNwOLN%2FbtsnYZq7UdV%2F8jwuWXP0yQykGetCJZvib1%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;1168&quot; height=&quot;486&quot; data-origin-width=&quot;1168&quot; data-origin-height=&quot;486&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2417&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/2417&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689611300139&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;2417번: 정수 제곱근&quot; data-og-description=&quot;정수가 주어지면, 그 수의 정수 제곱근을 구하는 프로그램을 작성하시오.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2417&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2417&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bkYzsw/hyTk33P1IZ/bZvPRApClFuNSC6WSJlJH0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2417&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2417&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bkYzsw/hyTk33P1IZ/bZvPRApClFuNSC6WSJlJH0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;2417번: 정수 제곱근&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;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1689611325284&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;n = int(input())

start = 0
end = int(n ** (1/2))

while start &amp;lt;= end:
    mid = (start + end) // 2
    
    if mid ** 2 &amp;gt;= n:
        end = mid - 1
    else:
        start = mid + 1
        
print(start)&lt;/code&gt;&lt;/pre&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시작지점은 0으로 잡아주고,&lt;br /&gt;끝 지점은 n의 제곱근을 정수화해서 잡아줬다.&lt;br /&gt;(이 이상의 수는 무의미하다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이분 탐색을 통해 결괏값을 도출했다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>백준</category>
      <category>백준 2417</category>
      <category>백준 2417 파이썬</category>
      <category>백준 정수 제곱근</category>
      <category>백준 정수 제곱근 파이썬</category>
      <category>파이썬</category>
      <category>파이썬 루트</category>
      <category>파이썬 이분 탐색</category>
      <category>파이썬 이분탐색</category>
      <category>파이썬 제곱근</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/256</guid>
      <comments>https://looancheong.tistory.com/256#entry256comment</comments>
      <pubDate>Wed, 19 Jul 2023 10:32:35 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 1072: 게임</title>
      <link>https://looancheong.tistory.com/255</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;925&quot; data-origin-height=&quot;966&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLmmgw/btsnFeWIRzq/7f4XFmBVqhhd8y7vqcKbC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLmmgw/btsnFeWIRzq/7f4XFmBVqhhd8y7vqcKbC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLmmgw/btsnFeWIRzq/7f4XFmBVqhhd8y7vqcKbC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLmmgw%2FbtsnFeWIRzq%2F7f4XFmBVqhhd8y7vqcKbC1%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;925&quot; height=&quot;966&quot; data-origin-width=&quot;925&quot; data-origin-height=&quot;966&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1072&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/1072&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689519804290&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;1072번: 게임&quot; data-og-description=&quot;김형택은 지금 몰래 Spider Solitaire(스파이더 카드놀이)를 하고 있다. 형택이는 이 게임을 이길 때도 있었지만, 질 때도 있었다. 누군가의 시선이 느껴진 형택이는 게임을 중단하고 코딩을 하기 시&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1072&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1072&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/CXiZZ/hyTlc6w8YJ/TMP0Mx7f2kkULGtIlV89Zk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1072&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1072&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/CXiZZ/hyTlc6w8YJ/TMP0Mx7f2kkULGtIlV89Zk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;1072번: 게임&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;김형택은 지금 몰래 Spider Solitaire(스파이더 카드놀이)를 하고 있다. 형택이는 이 게임을 이길 때도 있었지만, 질 때도 있었다. 누군가의 시선이 느껴진 형택이는 게임을 중단하고 코딩을 하기 시&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1689519837457&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;x, y = map(int, input().split())
z = (y * 100) // x

if z &amp;gt;= 99:
    print(-1)
else:
    ans = 0
    start = 1
    end = x
    
    while start &amp;lt;= end:
        mid = (start + end) // 2
        if (y + mid) * 100 // (x + mid) &amp;lt;= z:
            start = mid + 1
        else:
            ans = mid
            end = mid - 1
            
    print(ans)&lt;/code&gt;&lt;/pre&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;우선 기존 승률이 99퍼센트 이상이라면 어떻게 해도 100퍼센트에 도달이 불가능하기 때문에 제외해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 외의 경우를 생각해야 하는데,&lt;br /&gt;브루트포스로 해결하게 되면 입력 값이 10억이기 때문에 타임아웃이 난다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 이분 탐색으로 범위를 빠르게 좁혀서 탐색한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시작 지점은 1로 정해주고&lt;br /&gt;끝 지점은 x로 정한다.&lt;br /&gt;x인 이유는 승률이 98퍼센트 일 때,&lt;br /&gt;x회 더 진행하게 되면 99퍼센트가 되기 때문에 최댓값은 x이다.&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;br /&gt;start를 갱신해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇지 않다면 현재의 승률이 더 높은 셈이므로 정답을 우선 갱신해 주고&lt;br /&gt;end를 갱신해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;탐색을 마치고 최종적으로 ans를 출력한다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>백준</category>
      <category>백준 1072</category>
      <category>백준 1072 파이썬</category>
      <category>백준 게임</category>
      <category>백준 게임 파이썬</category>
      <category>이분 탐색</category>
      <category>이분 탐색 알고리즘</category>
      <category>이분탐색</category>
      <category>파이썬</category>
      <category>파이썬 이분탐색</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/255</guid>
      <comments>https://looancheong.tistory.com/255#entry255comment</comments>
      <pubDate>Tue, 18 Jul 2023 11:07:22 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 15655: N과 M (6)</title>
      <link>https://looancheong.tistory.com/254</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;1156&quot; data-origin-height=&quot;951&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kIsOW/btsnujYskJA/Yx8rMj5n4pDRSxoiKbIZAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kIsOW/btsnujYskJA/Yx8rMj5n4pDRSxoiKbIZAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kIsOW/btsnujYskJA/Yx8rMj5n4pDRSxoiKbIZAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkIsOW%2FbtsnujYskJA%2FYx8rMj5n4pDRSxoiKbIZAk%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;1156&quot; height=&quot;951&quot; data-origin-width=&quot;1156&quot; data-origin-height=&quot;951&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/15655&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/15655&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689276825750&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;15655번: N과 M (6)&quot; data-og-description=&quot;N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/15655&quot; data-og-url=&quot;https://www.acmicpc.net/problem/15655&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/8H1qh/hyTjMl8d96/UKv6jkh7gxb6vKbfByqRt0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/15655&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/15655&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/8H1qh/hyTjMl8d96/UKv6jkh7gxb6vKbfByqRt0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;15655번: N과 M (6)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1689276782687&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;n, m = map(int, input().split())
nums = sorted(list(map(int, input().split())))

s = []

def dfs(start):
    if len(s) == m:
        print(' '.join(map(str,s)))
        return
    
    for i in range(start, len(nums)):
        if nums[i] not in s:
            s.append(nums[i])
            dfs(i + 1)
            s.pop()

dfs(0)&lt;/code&gt;&lt;/pre&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;a href=&quot;https://looancheong.tistory.com/163&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://looancheong.tistory.com/163&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689276793459&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[파이썬, Python] 백준 15650: N과 M (2)&quot; data-og-description=&quot;문제 https://www.acmicpc.net/problem/15650 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 &quot; data-og-host=&quot;looancheong.tistory.com&quot; data-og-source-url=&quot;https://looancheong.tistory.com/163&quot; data-og-url=&quot;https://looancheong.tistory.com/163&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bosDHH/hyTjQPzRQv/2KJW6Vc0Cmz88OKJIhmk6K/img.png?width=800&amp;amp;height=636&amp;amp;face=0_0_800_636,https://scrap.kakaocdn.net/dn/zMa5W/hyTiCrS6ds/trsW3RKk2EzksaZlrbA3gk/img.png?width=800&amp;amp;height=636&amp;amp;face=0_0_800_636,https://scrap.kakaocdn.net/dn/pAcyH/hyTizWefPv/r9Kfvjrh84CXkCGKDvhOGK/img.png?width=1159&amp;amp;height=922&amp;amp;face=0_0_1159_922&quot;&gt;&lt;a href=&quot;https://looancheong.tistory.com/163&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://looancheong.tistory.com/163&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bosDHH/hyTjQPzRQv/2KJW6Vc0Cmz88OKJIhmk6K/img.png?width=800&amp;amp;height=636&amp;amp;face=0_0_800_636,https://scrap.kakaocdn.net/dn/zMa5W/hyTiCrS6ds/trsW3RKk2EzksaZlrbA3gk/img.png?width=800&amp;amp;height=636&amp;amp;face=0_0_800_636,https://scrap.kakaocdn.net/dn/pAcyH/hyTizWefPv/r9Kfvjrh84CXkCGKDvhOGK/img.png?width=1159&amp;amp;height=922&amp;amp;face=0_0_1159_922');&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;[파이썬, Python] 백준 15650: N과 M (2)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;문제 https://www.acmicpc.net/problem/15650 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;looancheong.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제와 유사한 문제다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;차이점은 주어지는 수가 다르기 때문에 이를 유의해야 한다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>백준</category>
      <category>백준 15655</category>
      <category>백준 15655 파이썬</category>
      <category>백준 n과 m</category>
      <category>백준 n과 m 파이썬</category>
      <category>백트래킹</category>
      <category>파이썬</category>
      <category>파이썬 백트래킹</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/254</guid>
      <comments>https://looancheong.tistory.com/254#entry254comment</comments>
      <pubDate>Mon, 17 Jul 2023 11:35:09 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 15654: N과 M (5)</title>
      <link>https://looancheong.tistory.com/253</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;1043&quot; data-origin-height=&quot;965&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfS3PI/btsnxC9Yd10/EHFVMZMuT9Mtq5MDhXkKk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfS3PI/btsnxC9Yd10/EHFVMZMuT9Mtq5MDhXkKk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfS3PI/btsnxC9Yd10/EHFVMZMuT9Mtq5MDhXkKk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfS3PI%2FbtsnxC9Yd10%2FEHFVMZMuT9Mtq5MDhXkKk0%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;1043&quot; height=&quot;965&quot; data-origin-width=&quot;1043&quot; data-origin-height=&quot;965&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/15654&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/15654&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689276091439&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;15654번: N과 M (5)&quot; data-og-description=&quot;N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/15654&quot; data-og-url=&quot;https://www.acmicpc.net/problem/15654&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bjehgc/hyTjQowsc8/GDZgMffLTPyCrw0hJZ81Kk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/15654&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/15654&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bjehgc/hyTjQowsc8/GDZgMffLTPyCrw0hJZ81Kk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;15654번: N과 M (5)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1689276117057&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;n, m = map(int, input().split())
nums = list(map(int, input().split()))

s = []

def dfs():
    if len(s) == m:
        print(' '.join(map(str,s)))
        return
    
    for i in sorted(nums):
        if i not in s:
            s.append(i)
            dfs()
            s.pop()

dfs()&lt;/code&gt;&lt;/pre&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;a href=&quot;https://looancheong.tistory.com/147&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://looancheong.tistory.com/147&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689276124251&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[파이썬, Python] 백준 15649: N과 M (1)&quot; data-og-description=&quot;문제 https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 &quot; data-og-host=&quot;looancheong.tistory.com&quot; data-og-source-url=&quot;https://looancheong.tistory.com/147&quot; data-og-url=&quot;https://looancheong.tistory.com/147&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bBywGZ/hyTiw6hCDl/znASDGQSu2HnpZvHoqLlv1/img.png?width=800&amp;amp;height=834&amp;amp;face=0_0_800_834,https://scrap.kakaocdn.net/dn/cgB5wd/hyTjP4cVUz/xwEBKk0VrruZzPblGnoIpK/img.png?width=800&amp;amp;height=834&amp;amp;face=0_0_800_834,https://scrap.kakaocdn.net/dn/8SezP/hyTjIjHZI5/mYSIyOTjygNPSNoIKA7KT0/img.png?width=932&amp;amp;height=972&amp;amp;face=0_0_932_972&quot;&gt;&lt;a href=&quot;https://looancheong.tistory.com/147&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://looancheong.tistory.com/147&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bBywGZ/hyTiw6hCDl/znASDGQSu2HnpZvHoqLlv1/img.png?width=800&amp;amp;height=834&amp;amp;face=0_0_800_834,https://scrap.kakaocdn.net/dn/cgB5wd/hyTjP4cVUz/xwEBKk0VrruZzPblGnoIpK/img.png?width=800&amp;amp;height=834&amp;amp;face=0_0_800_834,https://scrap.kakaocdn.net/dn/8SezP/hyTjIjHZI5/mYSIyOTjygNPSNoIKA7KT0/img.png?width=932&amp;amp;height=972&amp;amp;face=0_0_932_972');&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;[파이썬, Python] 백준 15649: N과 M (1)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;문제 https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;looancheong.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제와 유사하므로 큰 틀의 설명은 생략한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;백트래킹을 진행하는 수의 범위를 sorted(nums)로 바꿔서 풀이하면 된다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>백준</category>
      <category>백준 15654</category>
      <category>백준 15654 파이썬</category>
      <category>백준 n과 m</category>
      <category>백준 n과 m 파이썬</category>
      <category>백트래킹</category>
      <category>백트래킹 알고리즘</category>
      <category>파이썬</category>
      <category>파이썬 백트래킹</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/253</guid>
      <comments>https://looancheong.tistory.com/253#entry253comment</comments>
      <pubDate>Fri, 14 Jul 2023 11:23:20 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 1940: 주몽</title>
      <link>https://looancheong.tistory.com/251</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;1173&quot; data-origin-height=&quot;699&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pFffw/btsngJJhlms/zS3D3B5Pm1FIuUrthOLCzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pFffw/btsngJJhlms/zS3D3B5Pm1FIuUrthOLCzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pFffw/btsngJJhlms/zS3D3B5Pm1FIuUrthOLCzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpFffw%2FbtsngJJhlms%2FzS3D3B5Pm1FIuUrthOLCzk%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;1173&quot; height=&quot;699&quot; data-origin-width=&quot;1173&quot; data-origin-height=&quot;699&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1940&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/1940&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689107991788&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;1940번: 주몽&quot; data-og-description=&quot;첫째 줄에는 재료의 개수 N(1 &amp;le; N &amp;le; 15,000)이 주어진다. 그리고 두 번째 줄에는 갑옷을 만드는데 필요한&amp;nbsp;수 M(1 &amp;le; M &amp;le; 10,000,000) 주어진다. 그리고 마지막으로 셋째 줄에는 N개의 재료들이 가진 고&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1940&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1940&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bwwkUp/hyTgPY5rx5/ku3TzkkVpbKrVBfSLUkWqk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1940&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1940&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bwwkUp/hyTgPY5rx5/ku3TzkkVpbKrVBfSLUkWqk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;1940번: 주몽&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에는 재료의 개수 N(1 &amp;le; N &amp;le; 15,000)이 주어진다. 그리고 두 번째 줄에는 갑옷을 만드는데 필요한&amp;nbsp;수 M(1 &amp;le; M &amp;le; 10,000,000) 주어진다. 그리고 마지막으로 셋째 줄에는 N개의 재료들이 가진 고&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1689108010081&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;n = int(input())
m = int(input())
a = sorted(list(map(int, input().split())))

cnt = 0
start = 0
end = n - 1

while start &amp;lt; end:
    if a[start] + a[end] &amp;gt; m:
        end -= 1
    elif a[start] + a[end] &amp;lt; m:
        start += 1
    else:
        end -= 1
        cnt += 1
        
print(cnt)&lt;/code&gt;&lt;/pre&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;start는 0으로,&lt;br /&gt;end는 n-1로 지정해 주고 포인터를 이용해서 풀이를 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 두 포인터를 더한 값이 목표한 m보다 크다면 end의 값을 1 줄여주고,&lt;br /&gt;두 포인터를 더한 값이 목표한 m보다 작다면 start의 값을 1 늘려준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 목표한 값이라면 cnt를 1 늘려주고,&lt;br /&gt;end를 1 줄여준다.(혹은 start를 1 늘려준다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종적으로 결괏값을 출력한다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>백준</category>
      <category>백준 1940</category>
      <category>백준 1940 파이썬</category>
      <category>백준 주몽</category>
      <category>백준 주몽 파이썬</category>
      <category>알고리즘</category>
      <category>투 포인터</category>
      <category>파이썬</category>
      <category>파이썬 두 포인터</category>
      <category>파이썬 투 포인터</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/251</guid>
      <comments>https://looancheong.tistory.com/251#entry251comment</comments>
      <pubDate>Thu, 13 Jul 2023 10:44:09 +0900</pubDate>
    </item>
    <item>
      <title>[T-SUM] 6주차 자료 - while 반복문, 라이브러리</title>
      <link>https://looancheong.tistory.com/252</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;203&quot; data-origin-height=&quot;53&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dulRsW/btsnocLzp9r/W61ORuNKF6NZvW1FnXoGnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dulRsW/btsnocLzp9r/W61ORuNKF6NZvW1FnXoGnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dulRsW/btsnocLzp9r/W61ORuNKF6NZvW1FnXoGnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdulRsW%2FbtsnocLzp9r%2FW61ORuNKF6NZvW1FnXoGnK%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;203&quot; height=&quot;53&quot; data-origin-width=&quot;203&quot; data-origin-height=&quot;53&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;오늘의 내용 미리보기&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;118&quot; data-origin-height=&quot;41&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2IHBi/btsnnVcfkD4/0OwhoBsxCAV8yfhM0Dgf3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2IHBi/btsnnVcfkD4/0OwhoBsxCAV8yfhM0Dgf3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2IHBi/btsnnVcfkD4/0OwhoBsxCAV8yfhM0Dgf3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2IHBi%2FbtsnnVcfkD4%2F0OwhoBsxCAV8yfhM0Dgf3k%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;118&quot; height=&quot;41&quot; data-origin-width=&quot;118&quot; data-origin-height=&quot;41&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.python.org/ko/3/library/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.python.org/ko/3/library/index.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689168605719&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;The Python Standard Library&quot; data-og-description=&quot;While The Python Language Reference describes the exact syntax and semantics of the Python language, this library reference manual describes the standard library that is distributed with Python. It...&quot; data-og-host=&quot;docs.python.org&quot; data-og-source-url=&quot;https://docs.python.org/ko/3/library/index.html&quot; data-og-url=&quot;https://docs.python.org/3/library/index.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/PzVV0/hyTishDZBg/UaKfOUUMSK35dkBHIulffK/img.png?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200&quot;&gt;&lt;a href=&quot;https://docs.python.org/ko/3/library/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.python.org/ko/3/library/index.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/PzVV0/hyTishDZBg/UaKfOUUMSK35dkBHIulffK/img.png?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200');&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;The Python Standard Library&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;While The Python Language Reference describes the exact syntax and semantics of the Python language, this library reference manual describes the standard library that is distributed with Python. It...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.python.org&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;230&quot; data-origin-height=&quot;95&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ck3nIW/btsnqUCBupn/Enb1mL0SsKoS6pi4NUPSV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ck3nIW/btsnqUCBupn/Enb1mL0SsKoS6pi4NUPSV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ck3nIW/btsnqUCBupn/Enb1mL0SsKoS6pi4NUPSV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fck3nIW%2FbtsnqUCBupn%2FEnb1mL0SsKoS6pi4NUPSV1%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;230&quot; height=&quot;95&quot; data-origin-width=&quot;230&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;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;내장 함수&lt;/b&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;564&quot; data-origin-height=&quot;549&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Pe136/btsno6w2gZA/qJQ9mfFeiBInygs0ZdKBs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Pe136/btsno6w2gZA/qJQ9mfFeiBInygs0ZdKBs1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Pe136/btsno6w2gZA/qJQ9mfFeiBInygs0ZdKBs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPe136%2Fbtsno6w2gZA%2FqJQ9mfFeiBInygs0ZdKBs1%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;564&quot; height=&quot;549&quot; data-origin-width=&quot;564&quot; data-origin-height=&quot;549&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 자주 사용하는 print 함수도 보이고 그 외에도 다양한 함수가 보입니다.&lt;br /&gt;이는 파이썬에서 기본적으로 제공하는 함수입니다.&lt;br /&gt;이를 사용하기 위해서 무언가 별도로 하지 않아도 되는 함수들입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 print를 사용하면서 파이썬을 설치하고 나서 따로 했던 작업이 없죠?&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;427&quot; data-origin-height=&quot;362&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nnI6U/btsnnT6xvXK/K7Ghmarqfk2lHfgpwCKOlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nnI6U/btsnnT6xvXK/K7Ghmarqfk2lHfgpwCKOlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nnI6U/btsnnT6xvXK/K7Ghmarqfk2lHfgpwCKOlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnnI6U%2FbtsnnT6xvXK%2FK7Ghmarqfk2lHfgpwCKOlK%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;427&quot; height=&quot;362&quot; data-origin-width=&quot;427&quot; data-origin-height=&quot;362&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 함수들은 파이썬을 설치하면 기본으로 들어는 있지만 사용을 하려면 별도의 동작을 해줘야 합니다.&lt;br /&gt;이를 'import'라고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 개수가 너무 많기 때문에 용량적인 문제를 고려해서&lt;br /&gt;자주 사용하는 함수 외에는 import를 해서 사용을 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 이 중에서 오늘 random이라는 라이브러리를 사용해 봅시다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;420&quot; data-origin-height=&quot;178&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cm1Cmf/btsnoHD5Dep/VWYZ8mM3NpTw9RgaSjIvnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cm1Cmf/btsnoHD5Dep/VWYZ8mM3NpTw9RgaSjIvnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cm1Cmf/btsnoHD5Dep/VWYZ8mM3NpTw9RgaSjIvnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcm1Cmf%2FbtsnoHD5Dep%2FVWYZ8mM3NpTw9RgaSjIvnK%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;178&quot; data-origin-width=&quot;420&quot; data-origin-height=&quot;178&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이름에서 알 수 있듯이 랜덤 한 무언가를 생성해내는 함수를 가지고 있어요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;random 함수 내에서 randint라는 함수를 찾아봅시다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;656&quot; data-origin-height=&quot;61&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FZTyY/btsno6RkrcN/XqTyIitiYAk6MP4u3cF3x0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FZTyY/btsno6RkrcN/XqTyIitiYAk6MP4u3cF3x0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FZTyY/btsno6RkrcN/XqTyIitiYAk6MP4u3cF3x0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFZTyY%2Fbtsno6RkrcN%2FXqTyIitiYAk6MP4u3cF3x0%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;656&quot; height=&quot;61&quot; data-origin-width=&quot;656&quot; data-origin-height=&quot;61&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;184&quot; data-origin-height=&quot;95&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwBwni/btsno6qe5KH/APrK6j5SKo7dGTcqrrk9n1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwBwni/btsno6qe5KH/APrK6j5SKo7dGTcqrrk9n1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwBwni/btsno6qe5KH/APrK6j5SKo7dGTcqrrk9n1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwBwni%2Fbtsno6qe5KH%2FAPrK6j5SKo7dGTcqrrk9n1%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;184&quot; height=&quot;95&quot; data-origin-width=&quot;184&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;이런 식으로 import를 해서 사용할 수 있습니다.&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;210&quot; data-origin-height=&quot;93&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRxYqh/btsnsfNf11n/H13CaRF1RDRsihEwCIZvJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRxYqh/btsnsfNf11n/H13CaRF1RDRsihEwCIZvJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRxYqh/btsnsfNf11n/H13CaRF1RDRsihEwCIZvJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRxYqh%2FbtsnsfNf11n%2FH13CaRF1RDRsihEwCIZvJ0%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;210&quot; height=&quot;93&quot; data-origin-width=&quot;210&quot; data-origin-height=&quot;93&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 아래 문법의 차이는 가져오는 함수의 양에 달려있습니다.&lt;br /&gt;위의 사진과 같이 import로 random을 가져오게 되면 random에 포함되어 있는 모든 함수를 같이 가져옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, 아래 사진과 같이 random에서 randint만을 가져오게 된다면 용량적으로 조금 더 최적화가 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 randint를 이용해서 유저가 고른 숫자와 컴퓨터가 고른 숫자를 비교하는 게임을 만들어봅시다.&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;317&quot; data-origin-height=&quot;225&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cePP20/btsnom79Vaq/dKTFVE8kuJjCfylh5Fkkn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cePP20/btsnom79Vaq/dKTFVE8kuJjCfylh5Fkkn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cePP20/btsnom79Vaq/dKTFVE8kuJjCfylh5Fkkn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcePP20%2Fbtsnom79Vaq%2FdKTFVE8kuJjCfylh5Fkkn1%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;317&quot; height=&quot;225&quot; data-origin-width=&quot;317&quot; data-origin-height=&quot;225&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;randint를 통해서 컴퓨터가 랜덤한 숫자를 골라주고,&lt;br /&gt;유저가 입력한 숫자와 비교해서 높고 낮음을 판단해 줍니다.&lt;br /&gt;만약 정답이면 정답이라고 출력을 해줍니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 이런 방식으로 하게 되면 1번만 숫자를 고르고 끝이 나게 되겠죠?&lt;br /&gt;정답을 맞힐 때까지 게임을 지속하기 위해 우리는 다른 방법을 사용해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이럴 때 사용할 수 있는 것이 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;while&lt;/b&gt;&lt;/span&gt;을 통한 반복문입니다.&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;114&quot; data-origin-height=&quot;38&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MxZJC/btsnkL8AIqw/ynCZaSeAEPnKvmRZElu5y0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MxZJC/btsnkL8AIqw/ynCZaSeAEPnKvmRZElu5y0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MxZJC/btsnkL8AIqw/ynCZaSeAEPnKvmRZElu5y0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMxZJC%2FbtsnkL8AIqw%2FynCZaSeAEPnKvmRZElu5y0%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;114&quot; height=&quot;38&quot; data-origin-width=&quot;114&quot; data-origin-height=&quot;38&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 작성을 하고 한 번 실행시켜 봅시다.&lt;br /&gt;컴퓨터가 끝도 없이 인사를 해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;while 반복문의 경우 조건이 참인 동안 실행을 지속합니다.&lt;br /&gt;즉, while의 조건이 False가 될 때 까지 반복합니다.&lt;br /&gt;따라서 반복문을 멈추기 위해서는 조건이 끝나는 지점을 잘 정해주어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 무언가 파일과 관련된 개발자라고 가정해 봅시다.&lt;br /&gt;다운로드하는 동안 파일이 얼마나 다운됐는지를 보여주는 프로그램이 있습니다.&lt;br /&gt;이를 한 번 만들어볼까요?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;278&quot; data-origin-height=&quot;88&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b042vm/btsnqvQsqty/a50jTwXVQ7Ri11YhDKPGI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b042vm/btsnqvQsqty/a50jTwXVQ7Ri11YhDKPGI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b042vm/btsnqvQsqty/a50jTwXVQ7Ri11YhDKPGI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb042vm%2FbtsnqvQsqty%2Fa50jTwXVQ7Ri11YhDKPGI1%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;278&quot; height=&quot;88&quot; data-origin-width=&quot;278&quot; data-origin-height=&quot;88&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 변수를 생성하고 그 변수를 이용해서 끝 지점을 정해주는 방법이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 프로그램의 경우 download의 수가 반복할 때마다 증가하므로 언젠가는 끝이 나게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 보너스로 한 문제를 더 풀어볼까요?&lt;br /&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;279&quot; data-origin-height=&quot;141&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJsyil/btsnruqcJtl/7SIQJpc14PEGq2x86mKuj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJsyil/btsnruqcJtl/7SIQJpc14PEGq2x86mKuj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJsyil/btsnruqcJtl/7SIQJpc14PEGq2x86mKuj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJsyil%2FbtsnruqcJtl%2F7SIQJpc14PEGq2x86mKuj0%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;279&quot; height=&quot;141&quot; data-origin-width=&quot;279&quot; data-origin-height=&quot;141&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;지난 시간에 배운 조건문도 사용해 봤습니다.&lt;/p&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;우리는 이 게임이 언제 종료되어야 할지 정해야 합니다.&lt;br /&gt;언제 종료되어야 할까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맞습니다. 유저가 맞추면 종료되어야 하겠죠?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 기반으로 한 번 코드를 작성해 봅시다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;345&quot; data-origin-height=&quot;239&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o0f9V/btsnkMsYGKf/TSVQrFPTEtSS4ZaJneOkQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o0f9V/btsnkMsYGKf/TSVQrFPTEtSS4ZaJneOkQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o0f9V/btsnkMsYGKf/TSVQrFPTEtSS4ZaJneOkQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo0f9V%2FbtsnkMsYGKf%2FTSVQrFPTEtSS4ZaJneOkQK%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;345&quot; height=&quot;239&quot; data-origin-width=&quot;345&quot; data-origin-height=&quot;239&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 플레이의 여부를 확인하기 위해서 playing이라는 변수를 하나 만들었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;playing이 True인 동안 유저는 계속 번호를 입력하면서 정답에 다가가게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 유저의 입력값이 정답이라면 while의 조건은 False가 되고 해당 게임은 종료가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;343&quot; data-origin-height=&quot;296&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPRU2j/btsnqUWU1JT/76clDQ4uaReD4mYIknHnjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPRU2j/btsnqUWU1JT/76clDQ4uaReD4mYIknHnjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPRU2j/btsnqUWU1JT/76clDQ4uaReD4mYIknHnjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPRU2j%2FbtsnqUWU1JT%2F76clDQ4uaReD4mYIknHnjK%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;343&quot; height=&quot;296&quot; data-origin-width=&quot;343&quot; data-origin-height=&quot;296&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;카운트를 하기 위한 변수를 하나 생성하고&lt;br /&gt;반복문이 실행될 때마다 실행을 해주면 됩니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&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;이번 시간에는 라이브러리를 살펴보고 while 반복문을 배웠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 시간에 만나요 안뇽.&lt;/p&gt;</description>
      <category>T-SUM 멘토링</category>
      <category>T-SUM</category>
      <category>파이썬</category>
      <category>파이썬 import</category>
      <category>파이썬 randint</category>
      <category>파이썬 random</category>
      <category>파이썬 while</category>
      <category>파이썬 강의</category>
      <category>파이썬 기초</category>
      <category>파이썬 반복</category>
      <category>파이썬 반복문</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/252</guid>
      <comments>https://looancheong.tistory.com/252#entry252comment</comments>
      <pubDate>Wed, 12 Jul 2023 23:48:19 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 10026: 적록색약</title>
      <link>https://looancheong.tistory.com/250</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;1163&quot; data-origin-height=&quot;960&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kWvXe/btsnbJQsrA6/MhOb51KlV1flvxHkEfDIKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kWvXe/btsnbJQsrA6/MhOb51KlV1flvxHkEfDIKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kWvXe/btsnbJQsrA6/MhOb51KlV1flvxHkEfDIKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkWvXe%2FbtsnbJQsrA6%2FMhOb51KlV1flvxHkEfDIKk%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;1163&quot; height=&quot;960&quot; data-origin-width=&quot;1163&quot; data-origin-height=&quot;960&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/10026&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/10026&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689077233822&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;10026번: 적록색약&quot; data-og-description=&quot;적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N&amp;times;N인 그리드의 각 칸에 R(빨강), G(초록)&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/10026&quot; data-og-url=&quot;https://www.acmicpc.net/problem/10026&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/brYguB/hyTgXvVB29/KkAUd16iomrkkAhIlNRnwK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/10026&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/10026&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/brYguB/hyTgXvVB29/KkAUd16iomrkkAhIlNRnwK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;10026번: 적록색약&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N&amp;times;N인 그리드의 각 칸에 R(빨강), G(초록)&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1689077273282&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from collections import deque

def bfs(x, y):
    q.append((x, y))
    dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1]
    visited[x][y] = 1
    
    while q:
        x, y = q.popleft()
        for i in range(4):
            nx = dx[i] + x
            ny = dy[i] + y
            if 0 &amp;lt;= nx &amp;lt; n and 0 &amp;lt;= ny &amp;lt; n and pic[nx][ny] == pic[x][y] and not visited[nx][ny]:
                visited[nx][ny] = 1
                q.append((nx, ny))
                
n = int(input())
pic = [list(input()) for _ in range(n)]
q = deque()
                
visited = [[0] * n for _ in range(n)]
cnt_a = 0

for i in range(n):
    for j in range(n):
        if not visited[i][j]:
            bfs(i, j)
            cnt_a += 1
            
for i in range(n):
    for j in range(n):
        if pic[i][j] == 'G':
            pic[i][j] = 'R'

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

for i in range(n):
    for j in range(n):
        if not visited[i][j]:
            bfs(i, j)
            cnt_b += 1
            
print(cnt_a, cnt_b)&lt;/code&gt;&lt;/pre&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;bfs로 접근해서 해결했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적인 세팅을 해주고,&lt;br /&gt;체크를 해야 할 조건에 제일 초기의 입력값(RGB)과 비교하여 동일하고 방문하지 않은 좌표에 대해서만 처리하도록 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 적록색약의 경우 간단하게 접근해서&lt;br /&gt;기존에 주어진 초록색을 빨간색으로 변경해서 처리하는 방법을 사용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BFS 설명: &lt;a href=&quot;https://looancheong.tistory.com/138&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://looancheong.tistory.com/138&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689077391270&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[파이썬, Python] 백준 1260: DFS와 BFS&quot; data-og-description=&quot;문제 https://www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 &amp;le; N &amp;le; 1,000), 간선의 개수 M(1 &amp;le; M &amp;le; 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결&quot; data-og-host=&quot;looancheong.tistory.com&quot; data-og-source-url=&quot;https://looancheong.tistory.com/138&quot; data-og-url=&quot;https://looancheong.tistory.com/138&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Kc2mE/hyTg2jKFpq/HHNIvtlcSvYGTdlkFpejIK/img.png?width=800&amp;amp;height=780&amp;amp;face=0_0_800_780,https://scrap.kakaocdn.net/dn/bJH5Nd/hyTgOsc5H3/qznkKBwN8QcP4KfARHp6lk/img.png?width=800&amp;amp;height=780&amp;amp;face=0_0_800_780,https://scrap.kakaocdn.net/dn/dj6IBg/hyTgS9bYXI/YdJ6bLhVggbP4J7eKDP7Rk/img.png?width=932&amp;amp;height=909&amp;amp;face=0_0_932_909&quot;&gt;&lt;a href=&quot;https://looancheong.tistory.com/138&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://looancheong.tistory.com/138&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Kc2mE/hyTg2jKFpq/HHNIvtlcSvYGTdlkFpejIK/img.png?width=800&amp;amp;height=780&amp;amp;face=0_0_800_780,https://scrap.kakaocdn.net/dn/bJH5Nd/hyTgOsc5H3/qznkKBwN8QcP4KfARHp6lk/img.png?width=800&amp;amp;height=780&amp;amp;face=0_0_800_780,https://scrap.kakaocdn.net/dn/dj6IBg/hyTgS9bYXI/YdJ6bLhVggbP4J7eKDP7Rk/img.png?width=932&amp;amp;height=909&amp;amp;face=0_0_932_909');&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;[파이썬, Python] 백준 1260: DFS와 BFS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;문제 https://www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 &amp;le; N &amp;le; 1,000), 간선의 개수 M(1 &amp;le; M &amp;le; 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;looancheong.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>BFS</category>
      <category>dfs</category>
      <category>백준</category>
      <category>백준 10026</category>
      <category>백준 10026 파이썬</category>
      <category>백준 적록색약</category>
      <category>백준 적록색약 파이썬</category>
      <category>파이썬 bfs</category>
      <category>파이썬 넓이 우선 탐색</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/250</guid>
      <comments>https://looancheong.tistory.com/250#entry250comment</comments>
      <pubDate>Wed, 12 Jul 2023 11:10:24 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 11000: 강의실 배정</title>
      <link>https://looancheong.tistory.com/248</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;1162&quot; data-origin-height=&quot;722&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HPphh/btsm919VL9D/Tim5LTV6tk0DKXrsoEzzYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HPphh/btsm919VL9D/Tim5LTV6tk0DKXrsoEzzYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HPphh/btsm919VL9D/Tim5LTV6tk0DKXrsoEzzYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHPphh%2Fbtsm919VL9D%2FTim5LTV6tk0DKXrsoEzzYK%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;1162&quot; height=&quot;722&quot; data-origin-width=&quot;1162&quot; data-origin-height=&quot;722&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/11000&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/11000&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1688981635743&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;11000번: 강의실 배정&quot; data-og-description=&quot;첫 번째 줄에 N이 주어진다. (1 &amp;le; N &amp;le; 200,000) 이후 N개의 줄에 Si, Ti가 주어진다. (0 &amp;le; Si &amp;lt; Ti&amp;nbsp;&amp;le;&amp;nbsp;109)&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/11000&quot; data-og-url=&quot;https://www.acmicpc.net/problem/11000&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/I3FKV/hyTgXaFRRW/0H8uJGPgDjq9NltC7iN9T1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/11000&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/11000&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/I3FKV/hyTgXaFRRW/0H8uJGPgDjq9NltC7iN9T1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;11000번: 강의실 배정&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫 번째 줄에 N이 주어진다. (1 &amp;le; N &amp;le; 200,000) 이후 N개의 줄에 Si, Ti가 주어진다. (0 &amp;le; Si &amp;lt; Ti&amp;nbsp;&amp;le;&amp;nbsp;109)&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1688981655436&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
input = sys.stdin.readline
import heapq

n = int(input())

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

cls.sort()

room = []

heapq.heappush(room, cls[0][1])

for i in range(1, n):
    if cls[i][0] &amp;lt; room[0]:
        heapq.heappush(room, cls[i][1])
    else:
        heapq.heappop(room)
        heapq.heappush(room, cls[i][1])

print(len(room))&lt;/code&gt;&lt;/pre&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;아이디어는 쉽게 떠올렸는데 heap을 통한 접근을 생각하는데 오래 걸렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;heap으로 리스트를 정리하게 되면 가장 최솟값이 자동으로 제일 앞에 위치하므로&lt;br /&gt;강의가 가장 빨리 끝나는 강의실을 구하기 용이하기 때문에 heap을 사용해 주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 강의시간을 각각 받아서 sort 해준다.&lt;br /&gt;이렇게 하면 시작 시간을 기준으로 sort 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 강의실을 담을 리스트를 만들어준다.&lt;br /&gt;여기에 첫 강의의 끝시간을 넣고 반복문을 통해 나머지도 계산해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 그다음 강의의 시작 시간이 현재 가장 빨리 끝나는 강의의 시간보다 작다면&lt;br /&gt;(수업이 끝나기 전에 수업이 시작한다면)&lt;br /&gt;강의실 리스트에 해당 강의를 추가해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇지 않다면 가장 처음에 있는 강의를 pop 해주고&lt;br /&gt;새로운 강의의 끝 시간을 push 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 모든 강의 시간을 반복문을 통해 확인한 후&lt;br /&gt;강의실 리스트의 개수를 확인하면 된다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>백준</category>
      <category>백준 11000</category>
      <category>백준 11000 파이썬</category>
      <category>백준 강의실 배정</category>
      <category>백준 강의실 배정 파이썬</category>
      <category>파이썬</category>
      <category>파이썬 heap</category>
      <category>파이썬 heapq</category>
      <category>파이썬 힙</category>
      <category>힙</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/248</guid>
      <comments>https://looancheong.tistory.com/248#entry248comment</comments>
      <pubDate>Tue, 11 Jul 2023 10:39:48 +0900</pubDate>
    </item>
    <item>
      <title>[JavaScript, Node.js] 유튜브 클론 정리 8장 (5) - 비디오 업로더</title>
      <link>https://looancheong.tistory.com/249</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;머리글&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;노마드-유튜브클론.png&quot; data-origin-width=&quot;380&quot; data-origin-height=&quot;257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b40PA7/btsm83NZcWa/VkCbRd6R4nWjzvFPkY8SG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b40PA7/btsm83NZcWa/VkCbRd6R4nWjzvFPkY8SG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b40PA7/btsm83NZcWa/VkCbRd6R4nWjzvFPkY8SG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb40PA7%2Fbtsm83NZcWa%2FVkCbRd6R4nWjzvFPkY8SG0%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;380&quot; height=&quot;257&quot; data-filename=&quot;노마드-유튜브클론.png&quot; data-origin-width=&quot;380&quot; data-origin-height=&quot;257&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 시간에는 각 영상의 업로더를 표시하는 방법과&lt;br /&gt;본인 영상의 경우 수정이 가능하도록 하는 법을 알아보자.&lt;/p&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 컨트롤러를 수정하자.&lt;/p&gt;
&lt;pre id=&quot;code_1688983630805&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const video = await Video.findById(id);
-&amp;gt;
const video = await Video.findById(id).populate(&quot;owner&quot;);

...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 아이디를 기반으로 찾았던 비디오를 populate를 통해 검색해 주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;populate는 Mongoose의 기능이다.&lt;br /&gt;이는 문서의 지정된 경로를 다른 컬렉션의 문서로 자동 교체하는 프로세스이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 풀어서 설명하면 비디오뿐 아니라 비디오 owner의 정보도 같이 넘기겠다는 얘기다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 비디오의 업로드를 담당하는 컨트롤러도 수정하자.&lt;/p&gt;
&lt;pre id=&quot;code_1688983820908&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  const {
    user: { _id },
  } = req.session;
  
  ...
    try {
    await Video.create({
	...
      owner: _id,
  	...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업로드할 때, 유저의 아이디를 세션을 통해 받아오고 이를 비디오를 생성할 때 같이 넣어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 비디오의 스키마도 수정을 해주어야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1688983868334&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...
  owner: { type: mongoose.Schema.Types.ObjectId, required: true, ref: &quot;User&quot; },
...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 기능적인 부분의 수정은 끝났다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프런트엔드도 조금 수정해 주자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 비디오의 업로더일 때,&lt;br /&gt;영상 수정과 삭제 버튼을 활성화해 보자.&lt;/p&gt;
&lt;pre id=&quot;code_1688983983266&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...
		small Uploaded by 
            a(href=`/users/${video.owner._id}`)=video.owner.name
    if String(video.owner._id) === String(loggedInUser._id)
        a(href=`${video.id}/edit`) Edit Video &amp;amp;rarr;
        br
        a(href=`${video.id}/delete`) Delete Video &amp;amp;rarr;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 비디오 업로더의 이름을 표기해 주었고&lt;br /&gt;비디오의 업로더일 경우 수정 페이지와 삭제 페이지에 접근이 가능하게 했다.&lt;/p&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 시간부터는 본격적으로 Webpack을 다뤄보자.&lt;/p&gt;</description>
      <category>노마드 코더/유튜브 클론</category>
      <category>mongoose</category>
      <category>mongoose populate</category>
      <category>Node</category>
      <category>node.js</category>
      <category>nodejs</category>
      <category>노마드 코더</category>
      <category>유튜브 클론</category>
      <category>자바스크립트</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/249</guid>
      <comments>https://looancheong.tistory.com/249#entry249comment</comments>
      <pubDate>Mon, 10 Jul 2023 19:15:04 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 1149: RGB거리</title>
      <link>https://looancheong.tistory.com/247</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;934&quot; data-origin-height=&quot;973&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VerHt/btsmHDP9eCh/da7c31WBbbOLTOzGHwIkX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VerHt/btsmHDP9eCh/da7c31WBbbOLTOzGHwIkX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VerHt/btsmHDP9eCh/da7c31WBbbOLTOzGHwIkX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVerHt%2FbtsmHDP9eCh%2Fda7c31WBbbOLTOzGHwIkX0%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;934&quot; height=&quot;973&quot; data-origin-width=&quot;934&quot; data-origin-height=&quot;973&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1149&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/1149&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1688699537727&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;1149번: RGB거리&quot; data-og-description=&quot;첫째 줄에 집의 수 N(2 &amp;le; N &amp;le; 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1149&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1149&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bI5JlE/hyTebgUsxB/qTaTunYvgjqRDDT4KoO9k1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1149&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1149&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bI5JlE/hyTebgUsxB/qTaTunYvgjqRDDT4KoO9k1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;1149번: RGB거리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 집의 수 N(2 &amp;le; N &amp;le; 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1688699559243&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
input = sys.stdin.readline


n = int(input())
dp = list(list(map(int, input().split())) for _ in range(n))

for i in range(1, n):
    dp[i][0] += min(dp[i-1][1], dp[i-1][2])
    dp[i][1] += min(dp[i-1][0], dp[i-1][2])
    dp[i][2] += min(dp[i-1][0], dp[i-1][1])
    
print(min(dp[n-1]))&lt;/code&gt;&lt;/pre&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;처음에 최솟값만 dp 리스트에 넣으려고 하다가 반례를 찾아서 다른 방법을 모색했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;100 100 1&lt;br /&gt;100 100 100&lt;br /&gt;1 100 100&lt;br /&gt;이런 리스트의 경우 최솟값의 인덱스만 가지고 풀려고 하면 오류가 났다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 다른 방법을 찾았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 색에 대한 최솟값을 비교를 해주어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2번째 집에 각각 RGB를 칠한다고 가정하고 계산을 해야 한다.&lt;br /&gt;그러려면 그 이전에 색칠한 색의 최솟값을 가져와야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;R을 칠한다고 가정하면 1번째 집의 G, B 중의 최솟값을 가져와서 R의 값과 더해야 한다.&lt;br /&gt;G를 칠한다고 가정하면 1번째 집의 R, B 중의 최솟값을 가져와서 G의 값과 더해야 한다.&lt;br /&gt;B를 칠한다고 가정하면 1번째 집의 R, G 중의 최솟값을 가져와서 B의 값과 더해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 쭉 마지막까지 더했을 때의 최솟값이 정답이 된다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>다이나믹 프로그래밍</category>
      <category>백준</category>
      <category>백준 1149</category>
      <category>백준 1149 파이썬</category>
      <category>백준 RGB거리</category>
      <category>백준 RGB거리 파이썬</category>
      <category>파이썬</category>
      <category>파이썬 DP</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/247</guid>
      <comments>https://looancheong.tistory.com/247#entry247comment</comments>
      <pubDate>Mon, 10 Jul 2023 11:16:49 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 3986: 좋은 단어</title>
      <link>https://looancheong.tistory.com/245</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;929&quot; data-origin-height=&quot;911&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cv3ypT/btsmFfhyClP/8oz3Uxoicrs7nRAh9kOky0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cv3ypT/btsmFfhyClP/8oz3Uxoicrs7nRAh9kOky0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cv3ypT/btsmFfhyClP/8oz3Uxoicrs7nRAh9kOky0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcv3ypT%2FbtsmFfhyClP%2F8oz3Uxoicrs7nRAh9kOky0%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;929&quot; height=&quot;911&quot; data-origin-width=&quot;929&quot; data-origin-height=&quot;911&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/3986&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/3986&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1688624763173&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;3986번: 좋은 단어&quot; data-og-description=&quot;이번 계절학기에 심리학 개론을 수강 중인 평석이는 오늘 자정까지 보고서를 제출해야 한다. 보고서 작성이 너무 지루했던 평석이는 노트북에 엎드려서 꾸벅꾸벅 졸다가 제출 마감 1시간 전에 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/3986&quot; data-og-url=&quot;https://www.acmicpc.net/problem/3986&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dMb03Q/hyTfvqVyz4/LXCfMG7ImRDMA33VrqLUZ1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/3986&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/3986&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dMb03Q/hyTfvqVyz4/LXCfMG7ImRDMA33VrqLUZ1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;3986번: 좋은 단어&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이번 계절학기에 심리학 개론을 수강 중인 평석이는 오늘 자정까지 보고서를 제출해야 한다. 보고서 작성이 너무 지루했던 평석이는 노트북에 엎드려서 꾸벅꾸벅 졸다가 제출 마감 1시간 전에&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1688624768200&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;n = int(input())
cnt = 0

for _ in range(n):
    s = input()
    stack = []
    
    for i in s:
        if stack and stack[-1] == i:
            stack.pop()
        else:
            stack.append(i)
            
    if not stack:
        cnt += 1
        
print(cnt)&lt;/code&gt;&lt;/pre&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;우선 n을 받아주고,&lt;br /&gt;정답을 카운트할 cnt를 만들어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 n의 수만큼 반복해서 반복문을 돌린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반복문에서 각각 문장을 입력받아준다.&lt;br /&gt;그리고 문장을 처리할 스택을 하나 만들어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좋은 단어의 조건을 만족하려면&lt;br /&gt;같은 단어 사이에 다른 단어가 없거나,&lt;br /&gt;짝수 개로만 존재해야 한다.&lt;br /&gt;ex) abba, aabb 등&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 스택을 만들어서 각 단어를 하나씩 넣어주고,&lt;br /&gt;stack의 제일 끝단어(앞에서 처리되지 않은 단어)가 현재의 단어와 같다면 스택에서 pop을 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇지 않은 경우는 입력되는 단어를 스택에 추가해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 과정이 종료되고 스택이 남아있지 않다면 cnt를 1 늘려준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종적으로 cnt를 출력해 준다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>백준</category>
      <category>백준 3986</category>
      <category>백준 3986 파이썬</category>
      <category>백준 좋은 단어</category>
      <category>백준 좋은 단어 파이썬</category>
      <category>파이썬</category>
      <category>파이썬 append</category>
      <category>파이썬 pop</category>
      <category>파이썬 stack</category>
      <category>파이썬 스택</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/245</guid>
      <comments>https://looancheong.tistory.com/245#entry245comment</comments>
      <pubDate>Fri, 7 Jul 2023 11:32:04 +0900</pubDate>
    </item>
    <item>
      <title>[T-SUM] 5주차 자료 - if/else/elif 조건문, and/or</title>
      <link>https://looancheong.tistory.com/243</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;203&quot; data-origin-height=&quot;53&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mzEdZ/btsmsSy3O2s/zj8h5iy5EapL8kKkLK4VRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mzEdZ/btsmsSy3O2s/zj8h5iy5EapL8kKkLK4VRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mzEdZ/btsmsSy3O2s/zj8h5iy5EapL8kKkLK4VRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmzEdZ%2FbtsmsSy3O2s%2Fzj8h5iy5EapL8kKkLK4VRK%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;203&quot; height=&quot;53&quot; data-origin-width=&quot;203&quot; data-origin-height=&quot;53&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;오늘의 내용 미리보기&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;260&quot; data-origin-height=&quot;173&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvK8F3/btsml4HWuvp/5AukDJtZJTgEkNOKKi1WU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvK8F3/btsml4HWuvp/5AukDJtZJTgEkNOKKi1WU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvK8F3/btsml4HWuvp/5AukDJtZJTgEkNOKKi1WU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvK8F3%2Fbtsml4HWuvp%2F5AukDJtZJTgEkNOKKi1WU0%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;260&quot; height=&quot;173&quot; data-origin-width=&quot;260&quot; data-origin-height=&quot;173&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비밀번호가 맞으면 금고가 열린다거나,&lt;br /&gt;올바른 출입증이 아니면 출입이 안 된다거나 뭐 그런 상황이 있어요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코딩을 하다가도 이런 상황을 자주 마주칩니다.&lt;br /&gt;특정 사용자는 이용이 불가능한 게시판이 있다던지,&lt;br /&gt;로그인을 하지 않으면 접속이 안된다던지 하는 그런 상황이 있죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 이런 상황을 이렇게 표현합니다.&lt;br /&gt;'만약 ~ 라면'&lt;br /&gt;이를 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;조건문&lt;/b&gt;&lt;/span&gt;이라고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬에서는 이를 if와 else를 사용해서 표현합니다.&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;125&quot; data-origin-height=&quot;37&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEcCD3/btsmlS1UI2f/xAG0VnH2yR9lF2ZgywZD6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEcCD3/btsmlS1UI2f/xAG0VnH2yR9lF2ZgywZD6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEcCD3/btsmlS1UI2f/xAG0VnH2yR9lF2ZgywZD6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEcCD3%2FbtsmlS1UI2f%2FxAG0VnH2yR9lF2ZgywZD6k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;125&quot; height=&quot;37&quot; data-origin-width=&quot;125&quot; data-origin-height=&quot;37&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배우지는 않았지만 어째서인지 읽을 수는 있을 것 같죠?&lt;br /&gt;있는 그대로 읽으면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 &lt;b&gt;10이 7보다 크다면&lt;/b&gt;(&lt;span style=&quot;color: #ee2323;&quot;&gt;조건&lt;/span&gt;) &lt;b&gt;정답을 출력하라&lt;/b&gt;(&lt;span style=&quot;color: #ee2323;&quot;&gt;결과&lt;/span&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 조건문은 조건과 그에 따른 결과로 이루어져 있습니다.&lt;br /&gt;사용 방법은 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;if를 써주고 그 뒤에 조건&lt;/span&gt;&lt;/b&gt;을 작성하면 됩니다.&lt;br /&gt;그 이후 함수를 만들던 것과 같이 콜론(:)을 작성해 주고&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;한 칸 들여 쓰기 해서 안에 결과&lt;/b&gt;&lt;/span&gt;를 작성하면 됩니다.&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;121&quot; data-origin-height=&quot;43&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EbNQe/btsmmzHNdYN/JZETNr21kao6ckg3fb93Gk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EbNQe/btsmmzHNdYN/JZETNr21kao6ckg3fb93Gk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EbNQe/btsmmzHNdYN/JZETNr21kao6ckg3fb93Gk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEbNQe%2FbtsmmzHNdYN%2FJZETNr21kao6ckg3fb93Gk%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;121&quot; height=&quot;43&quot; data-origin-width=&quot;121&quot; data-origin-height=&quot;43&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 직관적으로 보기에는 틀린 문장입니다.&lt;br /&gt;그렇다면 파이썬은 어떤 응답을 줄까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드를 실행해 봅시다.&lt;br /&gt;그러면 아무런 응답도 하지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오류일까요?&lt;br /&gt;그렇지 않아요.&lt;br /&gt;파이썬은 제대로 작동했습니다!&lt;br /&gt;다만 우리는 조건이 참일 때, 정답을 출력하라고 했기 때문에&lt;br /&gt;조건이 거짓이 된 지금 아무것도 출력하지 않은 상태입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중요한 문장이 나왔습니다.&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;조건이 참이면 결과를 수행한다.&lt;br /&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;조건이 거짓&lt;/span&gt;&lt;/b&gt;이면 해당 조건문은 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;실행되지 않습니다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&lt;/b&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;147&quot; data-origin-height=&quot;58&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWWGVc/btsmrBkA49X/Tlp9KegNbkKWVgm5SPuiH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWWGVc/btsmrBkA49X/Tlp9KegNbkKWVgm5SPuiH0/img.png&quot; data-alt=&quot;조건이 거짓&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWWGVc/btsmrBkA49X/Tlp9KegNbkKWVgm5SPuiH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWWGVc%2FbtsmrBkA49X%2FTlp9KegNbkKWVgm5SPuiH0%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;147&quot; height=&quot;58&quot; data-origin-width=&quot;147&quot; data-origin-height=&quot;58&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;조건이 거짓&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그럼 모든 조건을 찾아서 작성해주어야 하는 걸까요?&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇지 않습니다.&lt;br /&gt;이러한 상황에는 else를 사용해서 해결합니다.&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;126&quot; data-origin-height=&quot;73&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NiRot/btsmsdccDRM/g9Yu4jd2LkSogOkgdVk4Vk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NiRot/btsmsdccDRM/g9Yu4jd2LkSogOkgdVk4Vk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NiRot/btsmsdccDRM/g9Yu4jd2LkSogOkgdVk4Vk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNiRot%2FbtsmsdccDRM%2Fg9Yu4jd2LkSogOkgdVk4Vk%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;126&quot; height=&quot;73&quot; data-origin-width=&quot;126&quot; data-origin-height=&quot;73&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;else는 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;조건에 맞지 않는 모든 상황에 대해서 결과를 수행합니다.&lt;br /&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉,&lt;/span&gt;&lt;b&gt; if가 아닌 모든 상황에 대해서 결과를 수행합니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시를 하나 봅시다.&lt;br /&gt;유저가 로그인하면 인사를 하는 페이지가 있다고 가정합시다.&lt;br /&gt;로그인을 하지 않았으면 로그인을 하라고 안내를 한다고도 가정합시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 조건은? &quot;유저가 로그인한다.&quot;&lt;br /&gt;이 때 결과는? &quot;인사를 한다.&quot;&lt;br /&gt;그렇지 않으면? &quot;로그인 요청을 한다.&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이에 맞춰서 조건문을 작성해 봅시다.&lt;br /&gt;편의상 로그인은 True/False로 작성합시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;229&quot; data-origin-height=&quot;108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVyHnd/btsmlnnsFAq/kcE7Wc9QpyW1s0IVK7U1Vk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVyHnd/btsmlnnsFAq/kcE7Wc9QpyW1s0IVK7U1Vk/img.png&quot; data-alt=&quot;어렵지 않았죠?&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVyHnd/btsmlnnsFAq/kcE7Wc9QpyW1s0IVK7U1Vk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVyHnd%2FbtsmlnnsFAq%2FkcE7Wc9QpyW1s0IVK7U1Vk%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;108&quot; data-origin-width=&quot;229&quot; data-origin-height=&quot;108&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;어렵지 않았죠?&lt;/figcaption&gt;
&lt;/figure&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;그런데 가끔은 조건이 여러 가지일 때가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;놀이공원 이용 요금을 받는다고 생각해 봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어린이(~7세)는 무료입장&lt;br /&gt;청소년은(8세~18세) 7천 원&lt;br /&gt;성인(19세~64세)은 1만 원&lt;br /&gt;노인(65세~)은 5천 원이라고 해봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 상황에서는 어떻게 해야 할까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바로 'elif'를 사용합니다.&lt;br /&gt;elif는 else if의 줄임말입니다.&lt;br /&gt;파이썬에서만 사용되는 문법이에요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if라는 조건이 있고,&lt;br /&gt;또 다른 조건을 달고 싶을 때 elif를 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떻게 사용할지 한 번 작성해 볼까요?&lt;br /&gt;age를 입력을 받아서 실행하는 코드를 만들어보세요.&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;260&quot; data-origin-height=&quot;173&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvK8F3/btsml4HWuvp/5AukDJtZJTgEkNOKKi1WU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvK8F3/btsml4HWuvp/5AukDJtZJTgEkNOKKi1WU0/img.png&quot; data-alt=&quot;범위에 유의합시다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvK8F3/btsml4HWuvp/5AukDJtZJTgEkNOKKi1WU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvK8F3%2Fbtsml4HWuvp%2F5AukDJtZJTgEkNOKKi1WU0%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;260&quot; height=&quot;173&quot; data-origin-width=&quot;260&quot; data-origin-height=&quot;173&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;범위에 유의합시다&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;범위를 잘못 처리하면 이렇게 됩니다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;338&quot; data-origin-height=&quot;235&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kN9l0/btsmnP4BNFJ/VQlUeYCLQmnl23oKMbQ8y1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kN9l0/btsmnP4BNFJ/VQlUeYCLQmnl23oKMbQ8y1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kN9l0/btsmnP4BNFJ/VQlUeYCLQmnl23oKMbQ8y1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkN9l0%2FbtsmnP4BNFJ%2FVQlUeYCLQmnl23oKMbQ8y1%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;338&quot; height=&quot;235&quot; data-origin-width=&quot;338&quot; data-origin-height=&quot;235&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;8살의 경우 어느 범위에도 포함되지 않기 때문에 else의 결과를 출력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 범위가 중복인 경우에도 주의합시다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;330&quot; data-origin-height=&quot;234&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dM5huM/btsmrE9iQb0/9lBW7koWjrigFlSr6zOIP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dM5huM/btsmrE9iQb0/9lBW7koWjrigFlSr6zOIP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dM5huM/btsmrE9iQb0/9lBW7koWjrigFlSr6zOIP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdM5huM%2FbtsmrE9iQb0%2F9lBW7koWjrigFlSr6zOIP0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;330&quot; height=&quot;234&quot; data-origin-width=&quot;330&quot; data-origin-height=&quot;234&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;7살의 경우 무료입장도 가능하고,&lt;br /&gt;7천 원에 입장도 가능한 범위로 지정이 되었습니다.&lt;br /&gt;이런 때는 제일 우선 만난 조건을 기준으로 처리를 합니다.&lt;br /&gt;그래서 위의 예시의 경우 무료입장으로 결과가 나왔습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조건의 케이스가 여러 가지인 경우도 있지만&lt;br /&gt;다음과 같은 경우도 존재합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 아까 놀이공원의 예시에서 군인도 무료로 입장이 가능하다고 합시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 age가 7세 이하이거나(&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;or&lt;/b&gt;&lt;/span&gt;) 군인이면 무료입장이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇듯 '&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;or&lt;/b&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;259&quot; data-origin-height=&quot;196&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ScxdR/btsmsePQI7h/3PMQuTQzjDBImBRNFu9CGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ScxdR/btsmsePQI7h/3PMQuTQzjDBImBRNFu9CGk/img.png&quot; data-alt=&quot;이렇게&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ScxdR/btsmsePQI7h/3PMQuTQzjDBImBRNFu9CGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FScxdR%2FbtsmsePQI7h%2F3PMQuTQzjDBImBRNFu9CGk%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;259&quot; height=&quot;196&quot; data-origin-width=&quot;259&quot; data-origin-height=&quot;196&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이렇게&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 경우에는 군인이므로 나이에 상관없이 무료입장이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 여러 개의 조건을 만족했을 때,&lt;br /&gt;결과를 출력하고 싶은 경우가 있을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 봅시다.&lt;br /&gt;비밀번호가 정확하고,&lt;br /&gt;본인인 경우에만 열리는 핸드폰이 있다고 가정합시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 경우에는 조건이 2가지 있습니다.&lt;br /&gt;1. 비밀번호가 맞다.&lt;br /&gt;2. 본인이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 2가지 모두에 해당되지 않는 경우 핸드폰이 열리지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 조건이 2가지이므로 이 2가지를 동시에 만족하는 조건문이 필요합니다.&lt;br /&gt;이 경우에는 '&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;and&lt;/b&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;164&quot; data-origin-height=&quot;129&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bA6bA8/btsmrC4PfCG/8XHilGWzr4vnkkqs1d7M31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bA6bA8/btsmrC4PfCG/8XHilGWzr4vnkkqs1d7M31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bA6bA8/btsmrC4PfCG/8XHilGWzr4vnkkqs1d7M31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbA6bA8%2FbtsmrC4PfCG%2F8XHilGWzr4vnkkqs1d7M31%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;164&quot; height=&quot;129&quot; data-origin-width=&quot;164&quot; data-origin-height=&quot;129&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 사용이 가능합니다.&lt;br /&gt;그리고 여러 번 사용하는 것도 가능합니다.&lt;br /&gt;qr코드 인증도 추가가 되었다고 생각해 봅시다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;219&quot; data-origin-height=&quot;138&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rGtBw/btsmrBkNBVg/9OUeJmSuBKQueyF9lygY91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rGtBw/btsmrBkNBVg/9OUeJmSuBKQueyF9lygY91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rGtBw/btsmrBkNBVg/9OUeJmSuBKQueyF9lygY91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrGtBw%2FbtsmrBkNBVg%2F9OUeJmSuBKQueyF9lygY91%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;219&quot; height=&quot;138&quot; data-origin-width=&quot;219&quot; data-origin-height=&quot;138&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 조건을 여러 가지 사용하는 방법도 있습니다.&lt;/p&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;이번 시간에는 if/elif/else와 and/or를 사용한 조건문을 배웠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 시간에 만나요 안뇽&lt;/p&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;a href=&quot;https://www.acmicpc.net/problem/9498&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/9498&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1688460654625&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;9498번: 시험 성적&quot; data-og-description=&quot;시험 점수를 입력받아 90 ~ 100점은 A, 80 ~ 89점은 B, 70 ~ 79점은 C, 60 ~ 69점은 D, 나머지 점수는 F를 출력하는 프로그램을 작성하시오.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/9498&quot; data-og-url=&quot;https://www.acmicpc.net/problem/9498&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/mERVK/hyTcNz488x/oHSCtBCBEt8yTqPDKexRwk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/9498&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/9498&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/mERVK/hyTcNz488x/oHSCtBCBEt8yTqPDKexRwk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;9498번: 시험 성적&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;시험 점수를 입력받아 90 ~ 100점은 A, 80 ~ 89점은 B, 70 ~ 79점은 C, 60 ~ 69점은 D, 나머지 점수는 F를 출력하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1330&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/1330&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1688460684730&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;1330번: 두 수 비교하기&quot; data-og-description=&quot;두 정수 A와 B가 주어졌을 때, A와 B를 비교하는 프로그램을 작성하시오.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1330&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1330&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dKcpgk/hyTcNfMEGK/ddk3ihLxTvHwlMr7IUPhH0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1330&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1330&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dKcpgk/hyTcNfMEGK/ddk3ihLxTvHwlMr7IUPhH0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;1330번: 두 수 비교하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;두 정수 A와 B가 주어졌을 때, A와 B를 비교하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2753&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/2753&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1688460702105&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;2753번: 윤년&quot; data-og-description=&quot;연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오. 윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다. 예를 들어, 2012년은 4의 배수이면서&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2753&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2753&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/rO5jM/hyTegtPuv4/4anZiJ8Kn914UilZEPSX61/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2753&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2753&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/rO5jM/hyTegtPuv4/4anZiJ8Kn914UilZEPSX61/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;2753번: 윤년&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오. 윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다. 예를 들어, 2012년은 4의 배수이면서&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;얘는 보너스&lt;br /&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/11942&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/11942&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1688460884142&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;11942번: 고려대는 사랑입니다&quot; data-og-description=&quot;첫째 줄에 &amp;ldquo;고려대학교&amp;rdquo;를 출력하세요.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/11942&quot; data-og-url=&quot;https://www.acmicpc.net/problem/11942&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bciLj4/hyTd6krH24/v2cHUPrmKHtVgs6nKUZubK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/11942&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/11942&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bciLj4/hyTd6krH24/v2cHUPrmKHtVgs6nKUZubK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;11942번: 고려대는 사랑입니다&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 &amp;ldquo;고려대학교&amp;rdquo;를 출력하세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>T-SUM 멘토링</category>
      <category>T-SUM</category>
      <category>파이썬</category>
      <category>파이썬 and</category>
      <category>파이썬 elif</category>
      <category>파이썬 else</category>
      <category>파이썬 if</category>
      <category>파이썬 or</category>
      <category>파이썬 강의</category>
      <category>파이썬 기초</category>
      <category>파이썬 조건문</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/243</guid>
      <comments>https://looancheong.tistory.com/243#entry243comment</comments>
      <pubDate>Thu, 6 Jul 2023 18:32:15 +0900</pubDate>
    </item>
    <item>
      <title>[JavaScript, Node.js] 유튜브 클론 정리 8장 (4) - 유저 프로필 페이지</title>
      <link>https://looancheong.tistory.com/246</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;머리글&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;노마드-유튜브클론.png&quot; data-origin-width=&quot;380&quot; data-origin-height=&quot;257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfk4Jz/btsmFgVCsOx/zkOJpgStJ3Ll8OT7CGl0fK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfk4Jz/btsmFgVCsOx/zkOJpgStJ3Ll8OT7CGl0fK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfk4Jz/btsmFgVCsOx/zkOJpgStJ3Ll8OT7CGl0fK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbfk4Jz%2FbtsmFgVCsOx%2FzkOJpgStJ3Ll8OT7CGl0fK%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;380&quot; height=&quot;257&quot; data-filename=&quot;노마드-유튜브클론.png&quot; data-origin-width=&quot;380&quot; data-origin-height=&quot;257&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 시간에는 유저의 프로필 페이지를 제작해 보자.&lt;br /&gt;기존에 했던 작업과 큰 차이가 없다.&lt;/p&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;/p&gt;
&lt;pre id=&quot;code_1688635533035&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;                        ...
                        li
                            a(href=`/users/${loggedInUser._id}`) My Profile
                        ...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그인 한 유저의 아이디를 통해서 접근을 하기로 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 유저 프로필 페이지 접근을 위한 컨트롤러를 제작해 보자.&lt;/p&gt;
&lt;pre id=&quot;code_1688635468946&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export const see = async (req, res) =&amp;gt; {
  const { id } = req.params;
  const user = await User.findById(id);
  if (!user) {
    return res.status(404).render(&quot;404&quot;, { pageTitle: &quot;User not found.&quot; });
  }
  return res.render(&quot;users/profile&quot;, {
    pageTitle: user.name,
    user,
  });
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;params에 있는 유저의 id를 받아오고,&lt;br /&gt;그를 기반으로 유저를 검색한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유저가 존재하지 않으면 404 페이지로 리턴해주고&lt;br /&gt;유저가 존재한다면 유저의 프로필 페이지로 렌더링 해준다.&lt;br /&gt;이때, 유저의 정보를 같이 넘겨준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라우터도 설정을 해줘야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1688635607177&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;userRouter.get(&quot;/:id&quot;, see);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'/'를 잘 넣어주어 경로 설정에 유의하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로필 페이지는 추후에 작업을 추가적으로 할 예정이다.&lt;/p&gt;
&lt;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;br /&gt;기존에 했던 작업을 그대로 했기 때문에 추가적인 설명은 생략했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 시간에는 비디오의 owner에 대한 작업을 해보자.&lt;/p&gt;</description>
      <category>노마드 코더/유튜브 클론</category>
      <category>JavaScript</category>
      <category>Node</category>
      <category>node.js</category>
      <category>PUG</category>
      <category>Pug 템플릿</category>
      <category>노마드 코더</category>
      <category>유튜브 클론</category>
      <category>자바스크립트</category>
      <category>프로필 페이지 제작</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/246</guid>
      <comments>https://looancheong.tistory.com/246#entry246comment</comments>
      <pubDate>Thu, 6 Jul 2023 18:29:10 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 1439: 뒤집기</title>
      <link>https://looancheong.tistory.com/244</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;880&quot; data-origin-height=&quot;984&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4k3AT/btsmtecJF47/0mEjWYPwm2enjVeiu4vvW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4k3AT/btsmtecJF47/0mEjWYPwm2enjVeiu4vvW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4k3AT/btsmtecJF47/0mEjWYPwm2enjVeiu4vvW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4k3AT%2FbtsmtecJF47%2F0mEjWYPwm2enjVeiu4vvW1%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;880&quot; height=&quot;984&quot; data-origin-width=&quot;880&quot; data-origin-height=&quot;984&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1439&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/1439&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1688535799386&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;1439번: 뒤집기&quot; data-og-description=&quot;다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1439&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1439&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1439&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1439&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;1439번: 뒤집기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1688535831265&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;s = input()
cnt = 0

for i in range(len(s) - 1):
    if s[i] != s[i + 1]:
        cnt += 1
        
print((cnt + 1) // 2)&lt;/code&gt;&lt;/pre&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0에서 1로 혹은 1에서 0으로 변하는 부분을 카운트해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러고 나서 2로 나눈 몫을 출력할 건데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0 혹은 1로 변하는 부분 중 하나의 부분만 체크하면 되기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0101 &amp;gt; 3번 바뀜 &amp;gt; (3+1) // 2 = 2번 뒤집으면 됨&lt;br /&gt;010101 &amp;gt; 5번 바뀜 &amp;gt; (5+1) // 2 = 3번 뒤집으면 됨&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>그리디 알고리즘</category>
      <category>백준</category>
      <category>백준 1439</category>
      <category>백준 1439 파이썬</category>
      <category>백준 그리디 알고리즘</category>
      <category>백준 뒤집기</category>
      <category>백준 뒤집기 파이썬</category>
      <category>파이썬</category>
      <category>파이썬 그리디</category>
      <category>파이썬 그리디 알고리즘</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/244</guid>
      <comments>https://looancheong.tistory.com/244#entry244comment</comments>
      <pubDate>Thu, 6 Jul 2023 10:50:34 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 1541: 잃어버린 괄호</title>
      <link>https://looancheong.tistory.com/241</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;1168&quot; data-origin-height=&quot;885&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xQbRk/btsmnBSwwE1/SIATq8mZq3hvK5x0qSzSik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xQbRk/btsmnBSwwE1/SIATq8mZq3hvK5x0qSzSik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xQbRk/btsmnBSwwE1/SIATq8mZq3hvK5x0qSzSik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxQbRk%2FbtsmnBSwwE1%2FSIATq8mZq3hvK5x0qSzSik%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;1168&quot; height=&quot;885&quot; data-origin-width=&quot;1168&quot; data-origin-height=&quot;885&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1541&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/1541&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1688447985746&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;1541번: 잃어버린 괄호&quot; data-og-description=&quot;첫째 줄에 식이 주어진다. 식은 &amp;lsquo;0&amp;rsquo;~&amp;lsquo;9&amp;rsquo;, &amp;lsquo;+&amp;rsquo;, 그리고 &amp;lsquo;-&amp;rsquo;만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1541&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1541&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/xHAF4/hyTeb60CxU/tA378kVQKVbqKsKuWOFyak/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1541&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1541&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/xHAF4/hyTeb60CxU/tA378kVQKVbqKsKuWOFyak/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;1541번: 잃어버린 괄호&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 식이 주어진다. 식은 &amp;lsquo;0&amp;rsquo;~&amp;lsquo;9&amp;rsquo;, &amp;lsquo;+&amp;rsquo;, 그리고 &amp;lsquo;-&amp;rsquo;만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1688448070838&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;exp = input().split('-')
ans = 0

for i in exp[0].split('+'):
    ans += int(i)
    
for i in exp[1:]:
    for j in i.split('+'):
        ans -= int(j)
    
print(ans)&lt;/code&gt;&lt;/pre&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, '-' 뒤의 모든 + 값을 괄호로 묶어주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[3 + 5 - 7 + 2 + 8 - 4]&lt;br /&gt;이런 식이 있다고 가정하자.&lt;br /&gt;그렇다면 7과 2와 8을 묶어서 빼주는 게 가장 작은 답이 도출된다.&lt;br /&gt;(3+5), -(7+2+8), -(4)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마이너스를 기준으로 나누어주고 첫 마이너스가 오기 전까지의 수는 다 더해준다.&lt;br /&gt;그리고 그 이후의 수는 다 빼주면 간단하게 답을 도출할 수 있다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>그리디 알고리즘</category>
      <category>백준</category>
      <category>백준 1541</category>
      <category>백준 1541 파이썬</category>
      <category>백준 잃어버린 괄호</category>
      <category>백준 잃어버린 괄호 파이썬</category>
      <category>욕심쟁이 알고리즘</category>
      <category>탐욕 알고리즘</category>
      <category>파이썬 그리디</category>
      <category>파이썬 그리디 알고리즘</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/241</guid>
      <comments>https://looancheong.tistory.com/241#entry241comment</comments>
      <pubDate>Wed, 5 Jul 2023 11:27:31 +0900</pubDate>
    </item>
    <item>
      <title>[JavaScript, Node.js] 유튜브 클론 정리 8장 (3) - 비디오 업로드</title>
      <link>https://looancheong.tistory.com/242</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;머리글&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;노마드-유튜브클론.png&quot; data-origin-width=&quot;380&quot; data-origin-height=&quot;257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kRczW/btsmrEaefti/7ieVAk7wT9fXvKVj1nG7v1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kRczW/btsmrEaefti/7ieVAk7wT9fXvKVj1nG7v1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kRczW/btsmrEaefti/7ieVAk7wT9fXvKVj1nG7v1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkRczW%2FbtsmrEaefti%2F7ieVAk7wT9fXvKVj1nG7v1%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;380&quot; height=&quot;257&quot; data-filename=&quot;노마드-유튜브클론.png&quot; data-origin-width=&quot;380&quot; data-origin-height=&quot;257&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 시간에는 비디오를 업로드해보자.&lt;/p&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;/p&gt;
&lt;pre id=&quot;code_1688451793378&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    form(method=&quot;POST&quot;, enctype=&quot;multipart/form-data&quot;)
        label(for=&quot;video&quot;) Video File
        input(type=&quot;file&quot;, accept=&quot;video/*&quot;, required, id=&quot;video&quot;, name=&quot;video&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 형식의 비디오를 accept 했고, required 옵션으로 필수로 넣게 지정했다.&lt;br /&gt;그리고 multer를 사용하기 위해 enctype를 설정해 주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 미들웨어를 생성해 주자.&lt;br /&gt;기존의 아바타와 같은 미들웨어를 사용해도 상관은 없지만,&lt;br /&gt;파일 사이즈의 제한을 위해서 하나 더 생성해 보자.&lt;/p&gt;
&lt;pre id=&quot;code_1688451960124&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export const videoUpload = multer({
  dest: &quot;uploads/videos/&quot;,
  limits: {
    fileSize: 10000000,
  },
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;limit 옵션은 여러 가지를 둘 수 있고&lt;br /&gt;그중 하나인 fileSize 옵션으로 파일의 용량을 제한할 수 있다.&lt;br /&gt;이때, Byte를 기준으로 하므로 지금은 10MB의 제한을 두었다고 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 업로드와 관련된 컨트롤러도 살짝 수정해 주자.&lt;/p&gt;
&lt;pre id=&quot;code_1688452214064&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...
	const file = req.file;
    ...
    try {
    	await Video.create({
        	...
            fileUrl: file.path,
            ...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 req.file을 이용해서 파일의 path를 받아준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 비디오 스키마에 fileUrl을 추가해 주어야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1688452264923&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const videoSchema = new mongoose.Schema({
	...
    fileUrl: { type: String, required: true },
    ...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 비디오 파일 없이는 게시글을 업로드하지 못하게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 업로드해 보면 비디오 파일을 videos 폴더에서 찾을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 경로를 이용해서 watch 페이지에 비디오를 추가하자.&lt;/p&gt;
&lt;pre id=&quot;code_1688452389268&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;extends base

block content
    video(src=&quot;/&quot; + video.fileUrl, controls)
    ...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;controls 옵션은 비디오 컨트롤러를 추가하기 위해 사용했다.&lt;/p&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 시간에는 유저의 프로필 페이지를 생성해 보자.&lt;/p&gt;</description>
      <category>노마드 코더/유튜브 클론</category>
      <category>FileSize</category>
      <category>JavaScript</category>
      <category>multer</category>
      <category>multer limits</category>
      <category>Node</category>
      <category>node.js</category>
      <category>노마드코더</category>
      <category>유튜브 클론</category>
      <category>자바스크립트</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/242</guid>
      <comments>https://looancheong.tistory.com/242#entry242comment</comments>
      <pubDate>Tue, 4 Jul 2023 15:35:41 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 3273: 두 수의 합</title>
      <link>https://looancheong.tistory.com/240</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;1167&quot; data-origin-height=&quot;568&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vmc40/btsl3jE9zS0/kU1zvm2BUvMopgDIKjYuXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vmc40/btsl3jE9zS0/kU1zvm2BUvMopgDIKjYuXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vmc40/btsl3jE9zS0/kU1zvm2BUvMopgDIKjYuXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvmc40%2Fbtsl3jE9zS0%2FkU1zvm2BUvMopgDIKjYuXk%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;1167&quot; height=&quot;568&quot; data-origin-width=&quot;1167&quot; data-origin-height=&quot;568&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/3273&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/3273&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1688356070502&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;3273번: 두 수의 합&quot; data-og-description=&quot;n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 &amp;le; i &amp;lt; j &amp;le; n)을 만족하는&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/3273&quot; data-og-url=&quot;https://www.acmicpc.net/problem/3273&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cXpOEu/hyTbbahD3m/lKgHkhbp9CNX4CT6rSaxvk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/3273&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/3273&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cXpOEu/hyTbbahD3m/lKgHkhbp9CNX4CT6rSaxvk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;3273번: 두 수의 합&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 &amp;le; i &amp;lt; j &amp;le; n)을 만족하는&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1688356093341&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
input = sys.stdin.readline

n = int(input())
nums = sorted(list(map(int, input().split())))
x = int(input())

cnt = 0
start = 0
end = n - 1

while start &amp;lt; end:
    inter_sum = nums[start] + nums[end]
    
    if inter_sum == x:
        cnt += 1
        start += 1
    elif inter_sum &amp;gt; x:
        end -= 1
    else:
        start += 1

print(cnt)&lt;/code&gt;&lt;/pre&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 받은 수를 정렬해서 투 포인터를 사용할 수 있게 해 준다.&lt;br /&gt;그리고 시작 지점과 끝 지점의 인덱스를 지정해 준다.&lt;br /&gt;시작의 경우 0으로 끝 지점의 경우 n-1로 지정했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시작 지점이 끝 지점보다 커지기 전까지 반복하며&lt;br /&gt;각 인덱스를 가진 수를 더해서 목푯값과 같은지 확인한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 목푯값보다 크다면 end를 1 줄여서 더 작은 값을 더할 수 있게 한다.&lt;br /&gt;목표값보다 작다면 start를 1 늘려서 더 큰 값을 더할 수 있게 한다.&lt;br /&gt;만약 목푯값과 일치한다면 카운트를 1 늘려주고 start를 1 늘려서 계산한다.(end를 줄여도 상관없다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종적으로 카운트된 값을 출력한다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>백준</category>
      <category>백준 3273</category>
      <category>백준 3273 파이썬</category>
      <category>백준 두 수의 합</category>
      <category>백준 두 수의 합 파이썬</category>
      <category>백준 두수의합</category>
      <category>투 포인터</category>
      <category>투 포인터 알고리즘</category>
      <category>파이썬</category>
      <category>파이썬 투 포인터</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/240</guid>
      <comments>https://looancheong.tistory.com/240#entry240comment</comments>
      <pubDate>Tue, 4 Jul 2023 10:52:45 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 2559: 수열</title>
      <link>https://looancheong.tistory.com/239</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;939&quot; data-origin-height=&quot;952&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bP3Kpe/btsl4mOAtwY/KGln6Bcm3tfYIjLMGj0GbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bP3Kpe/btsl4mOAtwY/KGln6Bcm3tfYIjLMGj0GbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bP3Kpe/btsl4mOAtwY/KGln6Bcm3tfYIjLMGj0GbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbP3Kpe%2Fbtsl4mOAtwY%2FKGln6Bcm3tfYIjLMGj0GbK%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;939&quot; height=&quot;952&quot; data-origin-width=&quot;939&quot; data-origin-height=&quot;952&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2559&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/2559&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1688293884671&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;2559번: 수열&quot; data-og-description=&quot;첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2559&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2559&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bdMHta/hyTbaPz5aO/kJRKFOG4yyhHaPSnYSsv5K/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2559&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2559&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bdMHta/hyTbaPz5aO/kJRKFOG4yyhHaPSnYSsv5K/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;2559번: 수열&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1688293922227&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
input = sys.stdin.readline

n, k = map(int, input().split())
nums = list(map(int, input().split()))
part_sum = sum(nums[:k])
max_sum = part_sum

for i in range(k, n):
    part_sum += nums[i] - nums[i - k]
    max_sum = max(part_sum, max_sum)

print(max_sum)&lt;/code&gt;&lt;/pre&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;슬라이딩 윈도우라는 알고리즘을 이용해서 해결했다.&lt;br /&gt;이 문제의 경우 더하는 부분이 크게 변하지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 0번부터 5번까지의 인덱스를 더해서 계산을 했으면,&lt;br /&gt;다음 합을 계산할 때는 1번부터 6번까지를 계산하게 된다.&lt;br /&gt;이때, 1번부터 5번의 값은 그대로 유지하고&lt;br /&gt;0번을 빼주고 6번을 더해준다면 조금 더 빠르게 구할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 구현해서 계산한 코드이다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>백준</category>
      <category>백준 2559</category>
      <category>백준 2559 파이썬</category>
      <category>백준 수열</category>
      <category>백준 수열 파이썬</category>
      <category>백준 슬라이딩 윈도우</category>
      <category>슬라이딩 윈도우</category>
      <category>파이썬 누적 합</category>
      <category>파이썬 슬라이딩 윈도우</category>
      <category>파이썬 투 포인터</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/239</guid>
      <comments>https://looancheong.tistory.com/239#entry239comment</comments>
      <pubDate>Mon, 3 Jul 2023 10:35:43 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 2776: 암기왕</title>
      <link>https://looancheong.tistory.com/237</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;1157&quot; data-origin-height=&quot;765&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWdEJw/btslKejXr2e/GH6soDNQ7uwTkgTTorK0Bk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWdEJw/btslKejXr2e/GH6soDNQ7uwTkgTTorK0Bk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWdEJw/btslKejXr2e/GH6soDNQ7uwTkgTTorK0Bk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWdEJw%2FbtslKejXr2e%2FGH6soDNQ7uwTkgTTorK0Bk%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;1157&quot; height=&quot;765&quot; data-origin-width=&quot;1157&quot; data-origin-height=&quot;765&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2776&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/2776&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1688012385338&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;2776번: 암기왕&quot; data-og-description=&quot;연종이는 엄청난 기억력을 가지고 있다. 그래서 하루 동안 본 정수들을 모두 기억 할 수 있다. 하지만 이를 믿을 수 없는 동규는 그의 기억력을 시험해 보기로 한다. 동규는 연종을 따라 다니며, &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2776&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2776&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2776&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2776&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;2776번: 암기왕&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;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1688012407359&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
input = sys.stdin.readline

t = int(input())

for _ in range(t):
    n = int(input())
    note1 = set(map(int, input().split()))
    m = int(input())
    note2 = list(map(int, input().split()))
    
    for num in note2:
        if num in note1:
            print(1)
        else:
            print(0)&lt;/code&gt;&lt;/pre&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1번 노트는 숫자가 중복으로 올 이유가 없기 때문에 set으로 받아준다.&lt;br /&gt;2번 노트는 모든 숫자가 필요하므로 list로 받아줘야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 이후 숫자를 비교해서 출력해 준다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>백준</category>
      <category>백준 2776</category>
      <category>백준 2776 파이썬</category>
      <category>백준 암기왕</category>
      <category>백준 암기왕 파이썬</category>
      <category>파이썬</category>
      <category>파이썬 list</category>
      <category>파이썬 set</category>
      <category>파이썬 리스트 비교</category>
      <category>파이썬 비교</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/237</guid>
      <comments>https://looancheong.tistory.com/237#entry237comment</comments>
      <pubDate>Fri, 30 Jun 2023 10:21:41 +0900</pubDate>
    </item>
    <item>
      <title>[JavaScript, Node.js] 유튜브 클론 정리 8장 (2) - 유저 아바타, 파일 업로드(Multer)</title>
      <link>https://looancheong.tistory.com/238</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;머리글&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;노마드-유튜브클론.png&quot; data-origin-width=&quot;380&quot; data-origin-height=&quot;257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/elzOTq/btslRIqkuLr/xVhiVfCTLmubKW0rMukk7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/elzOTq/btslRIqkuLr/xVhiVfCTLmubKW0rMukk7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/elzOTq/btslRIqkuLr/xVhiVfCTLmubKW0rMukk7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FelzOTq%2FbtslRIqkuLr%2FxVhiVfCTLmubKW0rMukk7K%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;380&quot; height=&quot;257&quot; data-filename=&quot;노마드-유튜브클론.png&quot; data-origin-width=&quot;380&quot; data-origin-height=&quot;257&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 시간에는 유저의 아바타 기능을 위해 파일 업로드 하는 방법을 알아보자.&lt;/p&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로필 수정 페이지를 변경해 주자.&lt;/p&gt;
&lt;pre id=&quot;code_1688013907300&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    form(method=&quot;POST&quot;, enctype=&quot;multipart/form-data&quot;)
        label(for=&quot;avatar&quot;) Avatar
        input(type=&quot;file&quot;, id=&quot;avatar&quot;, name=&quot;avatar&quot;, accept=&quot;image/*&quot;)
        ...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;label과 아바타 파일을 업로드하기 위한 input을 만들어주었다.&lt;br /&gt;그리고 이미지 형식만 선택할 수 있게 accept 항목을 정해주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 미들웨어를 사용해야 하는데 이를 설치해 보자.&lt;/p&gt;
&lt;pre id=&quot;code_1688013982603&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm i multer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Multer는 파일을 업로드할 수 있게 해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Multer를 사용하기 위해선 우리의 form을 multipart form으로 만들어야 한다.&lt;br /&gt;그래서 form의 enctype에 설정을 해주었다.&lt;br /&gt;이는 우리의 form이 다르게 encode 된다는 것을 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 middleware를 만들어서 설정해줘야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1688014143747&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export const uploadFiles = multer({ dest: &quot;uploads/&quot; });&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정을 해야 할 목록은 dest부분인데 이는 유저가 파일을 올리면 어디에 저장할지 정하는 것이다.&lt;br /&gt;기본적으로 파일 자체를 저장하는 것보다는 파일은 다른 곳에 저장하고 파일의 주소를 가지고 있는 것이 더 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 라우터도 설정을 해줘야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1688014260188&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;userRouter
  .route(&quot;/edit&quot;)
  .all(protectorMiddleware)
  .get(getEdit)
  .post(uploadFiles.single(&quot;avatar&quot;), postEdit);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 post 라우터에 사용을 할 예정이므로 post 라우터를 수정했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;middleware를 사용하고 컨트롤러 함수를 사용하면 된다.&lt;br /&gt;middleware를 작성하면 많은 항목이 뜨는데 우리는 1개의 파일만 사용하므로 single을 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 fieldName을 작성해 주어야 한다.&lt;br /&gt;우리의 파일의 경우 form의 avatar에서 나오므로 이를 적어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 작성하게 되면 request에 req.file 항목이 추가된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 req.file을 통해 업로드한 사진을 사용이 가능하다.&lt;br /&gt;이렇게 하고 파일을 업로드해 보면 저장 폴더에 파일이 생성된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 생성한 파일의 경로를 req.file.path를 통해서 얻을 수 있다.&lt;br /&gt;이 경로를 유저 업데이트에 넣어주자.&lt;/p&gt;
&lt;pre id=&quot;code_1688014576001&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export const postEdit = async (req, res) =&amp;gt; {
  const {
    session: {
      user: { _id, avatarUrl },
    },
    body: { name, email, username, location },
    file,
  } = req;
...
const updatedUser = await User.findByIdAndUpdate(
    _id,
    {
      avatarUrl: file ? file.path : avatarUrl,
...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자가 아바타를 사용하지 않은 경우 undefined가 되므로&lt;br /&gt;이를 대비해서 이를 예외처리도 해줬다.&lt;br /&gt;(세션에서 avatarUrl을 보내줬다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이렇게 받은 아바타를 표시해 보자.&lt;/p&gt;
&lt;pre id=&quot;code_1688014789421&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;block content
    img(src=&quot;/&quot; + loggedInUser.avatarUrl, width=&quot;100&quot;, height=&quot;100&quot;)
    ...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유저 프로필 수정 페이지에 이미지의 주소를 받아와서 이미지를 만들어주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 아직 사진이 제대로 보이지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 아직 브라우저가 서버에 있는 upload 파일에 접근이 불가능해서 그렇다.&lt;br /&gt;브라우저가 서버의 어떤 폴더에든 접근이 가능하면 보안상 좋지 않기 때문에 막혀있다.&lt;br /&gt;이를 해결해주어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 static files serving을 활성화해서 해결이 가능하다.&lt;br /&gt;폴더 전체를 브라우저에게 노출시킨다는 의미이다.&lt;br /&gt;즉, 접근이 가능해진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 route를 생성해 주자.&lt;/p&gt;
&lt;pre id=&quot;code_1688014975180&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;app.use(&quot;/uploads&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 폴더를 노출시키기 위한 설정을 해주자.&lt;br /&gt;이를 위해서 express의 static이라는 기능을 사용한다.&lt;/p&gt;
&lt;pre id=&quot;code_1688015012133&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;app.use(&quot;/uploads&quot;, express.static(&quot;uploads&quot;));&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;static 안에는 노출시키고자 하는 폴더를 작성해 주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 사진이 보인다.&lt;/p&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 시간에는 비디오를 업로드해 보자.&lt;/p&gt;</description>
      <category>노마드 코더/유튜브 클론</category>
      <category>express.static</category>
      <category>express.static()</category>
      <category>javascirpt</category>
      <category>multer</category>
      <category>Node</category>
      <category>node.js</category>
      <category>노마드코더</category>
      <category>유튜브 클론</category>
      <category>자바스크립트</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/238</guid>
      <comments>https://looancheong.tistory.com/238#entry238comment</comments>
      <pubDate>Thu, 29 Jun 2023 14:05:05 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 10974: 모든 순열</title>
      <link>https://looancheong.tistory.com/235</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-filename=&quot;10974.PNG&quot; data-origin-width=&quot;1161&quot; data-origin-height=&quot;606&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqfCao/btslGAUetXM/vbG975YAzcqfleUH9Zw6NK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqfCao/btslGAUetXM/vbG975YAzcqfleUH9Zw6NK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqfCao/btslGAUetXM/vbG975YAzcqfleUH9Zw6NK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqfCao%2FbtslGAUetXM%2FvbG975YAzcqfleUH9Zw6NK%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;1161&quot; height=&quot;606&quot; data-filename=&quot;10974.PNG&quot; data-origin-width=&quot;1161&quot; data-origin-height=&quot;606&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/10974&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/10974&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1687929718775&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;10974번: 모든 순열&quot; data-og-description=&quot;N이 주어졌을 때, 1부터 N까지의 수로 이루어진 순열을 사전순으로 출력하는 프로그램을 작성하시오.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/10974&quot; data-og-url=&quot;https://www.acmicpc.net/problem/10974&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/10974&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/10974&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;10974번: 모든 순열&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;N이 주어졌을 때, 1부터 N까지의 수로 이루어진 순열을 사전순으로 출력하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1687929741549&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;n = int(input())

s = []

def dfs():
    if len(s) == n:
        print(' '.join(map(str,s)))
        return
    
    for i in range(1, n+1):
        if i not in s:
            s.append(i)
            dfs()
            s.pop()
dfs()&lt;/code&gt;&lt;/pre&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;a href=&quot;https://looancheong.tistory.com/147&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://looancheong.tistory.com/147&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1687929747497&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[파이썬, Python] 백준 15649: N과 M (1)&quot; data-og-description=&quot;문제 https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 &quot; data-og-host=&quot;looancheong.tistory.com&quot; data-og-source-url=&quot;https://looancheong.tistory.com/147&quot; data-og-url=&quot;https://looancheong.tistory.com/147&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bFtzRU/hyS9D3IDa0/vLjmRITSKOghJdDLjKcoq0/img.png?width=800&amp;amp;height=834&amp;amp;face=0_0_800_834,https://scrap.kakaocdn.net/dn/bU2AVd/hyS8z2W76a/YyfLaTsgk5kbllUd0idxOk/img.png?width=800&amp;amp;height=834&amp;amp;face=0_0_800_834,https://scrap.kakaocdn.net/dn/kiHgP/hyS8o8cSE3/Ym2WJh0L4ssAvRR698DGG0/img.png?width=932&amp;amp;height=972&amp;amp;face=0_0_932_972&quot;&gt;&lt;a href=&quot;https://looancheong.tistory.com/147&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://looancheong.tistory.com/147&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bFtzRU/hyS9D3IDa0/vLjmRITSKOghJdDLjKcoq0/img.png?width=800&amp;amp;height=834&amp;amp;face=0_0_800_834,https://scrap.kakaocdn.net/dn/bU2AVd/hyS8z2W76a/YyfLaTsgk5kbllUd0idxOk/img.png?width=800&amp;amp;height=834&amp;amp;face=0_0_800_834,https://scrap.kakaocdn.net/dn/kiHgP/hyS8o8cSE3/Ym2WJh0L4ssAvRR698DGG0/img.png?width=932&amp;amp;height=972&amp;amp;face=0_0_932_972');&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;[파이썬, Python] 백준 15649: N과 M (1)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;문제 https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;looancheong.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제와 굉장히 유사한 문제였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;m이라는 개수 조건이 n으로 변한 것 말고는 다른 게 없다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>백준</category>
      <category>백준 10974</category>
      <category>백준 10974 파이썬</category>
      <category>백준 15649</category>
      <category>백준 15649 파이썬</category>
      <category>백트래킹</category>
      <category>파이썬</category>
      <category>파이썬 dfs</category>
      <category>파이썬 dfs 백트래킹</category>
      <category>파이썬 백트래킹</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/235</guid>
      <comments>https://looancheong.tistory.com/235#entry235comment</comments>
      <pubDate>Thu, 29 Jun 2023 11:24:01 +0900</pubDate>
    </item>
    <item>
      <title>[JavaScript, Node.js] 유튜브 클론 정리 8장 (2) - 비밀번호 수정</title>
      <link>https://looancheong.tistory.com/236</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;머리글&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;노마드-유튜브클론.png&quot; data-origin-width=&quot;380&quot; data-origin-height=&quot;257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Xs7Zs/btslKDWMhYh/U6Wa3khSOqz9KEAxKAApTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Xs7Zs/btslKDWMhYh/U6Wa3khSOqz9KEAxKAApTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Xs7Zs/btslKDWMhYh/U6Wa3khSOqz9KEAxKAApTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXs7Zs%2FbtslKDWMhYh%2FU6Wa3khSOqz9KEAxKAApTK%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;380&quot; height=&quot;257&quot; data-filename=&quot;노마드-유튜브클론.png&quot; data-origin-width=&quot;380&quot; data-origin-height=&quot;257&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 시간에는 유저의 비밀번호를 변경하는 방법에 대해서 알아보자.&lt;/p&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 페이지를 하나 생성해 주자.&lt;/p&gt;
&lt;pre id=&quot;code_1687932669047&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;extends ../base

block content
    form(method=&quot;post&quot;)
        input(placeholder=&quot;Old Password&quot;)
        input(placeholder=&quot;New Password&quot;)
        input(placeholder=&quot;New Password Confirmation&quot;)
        input(value=&quot;Change Password&quot;, type=&quot;submit&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 라우터도 만들어주자.&lt;/p&gt;
&lt;pre id=&quot;code_1687932697753&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...
userRouter
  .route(&quot;/change-password&quot;)
  .all(protectorMiddleware)
  .get(getChangePassword)
  .post(postChangePassword);
...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서 만들었던 미들웨어도 적용을 해줬다.&lt;br /&gt;비밀번호 변경의 경우 로그인 한 사용자만 접근이 가능해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비밀번호 변경의 경우 앞서했던 유저의 프로필 변경과 크게 차이가 없지만&lt;br /&gt;우리가 비밀번호를 bcrypt를 통해 암호화해서 저장했으므로 이를 비교해주어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 정보를 비교하는 과정에서 bcrypt의 compare 기능을 이용한다.&lt;/p&gt;
&lt;pre id=&quot;code_1687932810136&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export const postChangePassword = async (req, res) =&amp;gt; {
  const {
    session: {
      user: { _id },
    },
    body: { oldPassword, newPassword, newPasswordConfirmation },
  } = req;
  const user = await User.findById(_id);
  const ok = await bcrypt.compare(oldPassword, user.password);
...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 사용하게 되면&lt;br /&gt;입력받은 암호와 기존에 암호화되어 있던 암호를 비교해서 ok 값에 boolean을 리턴한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 기존 비밀번호가 틀리다면 이를 알려주는 에러메시지도 출력해 주자.&lt;/p&gt;
&lt;pre id=&quot;code_1687932893869&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...
if (!ok) {
    return res.status(400).render(&quot;users/change-password&quot;, {
      pageTitle: &quot;Change Password&quot;,
      errorMessage: &quot;The current password is incorrect&quot;,
    });
  }
...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 새로 입력한 비밀번호와 비밀번호 확인이 다르다면 이도 알려주는 메시지를 출력해 주자.&lt;/p&gt;
&lt;pre id=&quot;code_1687932920005&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...
 if (newPassword !== newPasswordConfirmation) {
    return res.status(400).render(&quot;users/change-password&quot;, {
      pageTitle: &quot;Change Password&quot;,
      errorMessage: &quot;The password does not match the confirmation&quot;,
    });
  }
...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 하면 에러 케이스에 대해 처리가 완료되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 최종적으로 비밀번호를 변경해 주자.&lt;/p&gt;
&lt;pre id=&quot;code_1687932948691&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...
user.password = newPassword;
  await user.save();
  return res.redirect(&quot;/users/logout&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유저의 패스워드를 새로 바꾼 패스워드의 값으로 바꿔주고 이를 저장해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 비밀번호 변경이 완료되었다.&lt;/p&gt;
&lt;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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 시간에는 파일을 업로드하는 방법을 알아보자.&lt;/p&gt;</description>
      <category>노마드 코더/유튜브 클론</category>
      <category>JavaScript</category>
      <category>mongoose</category>
      <category>Node</category>
      <category>node.js</category>
      <category>npm</category>
      <category>노마드 코더</category>
      <category>유튜브 클론</category>
      <category>자바스크립트</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/236</guid>
      <comments>https://looancheong.tistory.com/236#entry236comment</comments>
      <pubDate>Wed, 28 Jun 2023 15:17:18 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 9372: 상근이의 여행</title>
      <link>https://looancheong.tistory.com/233</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-filename=&quot;9372.PNG&quot; data-origin-width=&quot;1048&quot; data-origin-height=&quot;913&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJpXbP/btsltT1UBpJ/MFatRkkZH4RQtTuRumKoZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJpXbP/btsltT1UBpJ/MFatRkkZH4RQtTuRumKoZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJpXbP/btsltT1UBpJ/MFatRkkZH4RQtTuRumKoZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJpXbP%2FbtsltT1UBpJ%2FMFatRkkZH4RQtTuRumKoZK%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;1048&quot; height=&quot;913&quot; data-filename=&quot;9372.PNG&quot; data-origin-width=&quot;1048&quot; data-origin-height=&quot;913&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/9372&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/9372&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1687846393213&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;9372번: 상근이의 여행&quot; data-og-description=&quot;첫 번째 줄에는 테스트 케이스의 수 T(T&amp;nbsp;&amp;le;&amp;nbsp;100)가 주어지고, 각 테스트 케이스마다 다음과 같은 정보가 주어진다. 첫 번째 줄에는 국가의 수 N(2 &amp;le; N &amp;le; 1 000)과 비행기의 종류 M(1 &amp;le; M &amp;le; 10 000) 가 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/9372&quot; data-og-url=&quot;https://www.acmicpc.net/problem/9372&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/9372&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/9372&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;9372번: 상근이의 여행&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫 번째 줄에는 테스트 케이스의 수 T(T&amp;nbsp;&amp;le;&amp;nbsp;100)가 주어지고, 각 테스트 케이스마다 다음과 같은 정보가 주어진다. 첫 번째 줄에는 국가의 수 N(2 &amp;le; N &amp;le; 1 000)과 비행기의 종류 M(1 &amp;le; M &amp;le; 10 000) 가&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1687846453114&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**9)

def dfs(idx, cnt):
    visited[idx] = 1
    
    for i in graph[idx]:
        if visited[i] == 0:
            cnt = dfs(i, cnt+1)
    
    return cnt

t = int(input())

for i in range(t):
    n, m = map(int, input().split())
    graph = [[] for i in range(n+1)]
    visited = [0] * (n+1)
    
    for i in range(m):
        a, b = map(int, input().split())
        graph[a].append(b)
        graph[b].append(a)
        
    print(dfs(1,0))&lt;/code&gt;&lt;/pre&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;DFS로 풀이했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방문하지 않은 모든 국가를 방문해야 하므로 dfs를 사용해서&lt;br /&gt;방문하지 않은 국가를 만날 경우 방문을 하는 것으로 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 풀다 보니 모든 국가를 방문해야 하고,&lt;br /&gt;모든 국가는 연결되어 있으므로&lt;br /&gt;그냥 n-1개의 비행기를 타면 된다는 간단한 문제였다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>백준</category>
      <category>백준 9372</category>
      <category>백준 9372 파이썬</category>
      <category>백준 상근이의 여행</category>
      <category>백준 상근이의 여행 파이썬</category>
      <category>파이썬</category>
      <category>파이썬 dfs</category>
      <category>파이썬 그래프</category>
      <category>파이썬 트리</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/233</guid>
      <comments>https://looancheong.tistory.com/233#entry233comment</comments>
      <pubDate>Wed, 28 Jun 2023 11:20:41 +0900</pubDate>
    </item>
    <item>
      <title>[JavaScript, Node.js] 유튜브 클론 정리 8장 (1) - 유저 프로필 수정, Middleware 추가</title>
      <link>https://looancheong.tistory.com/234</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;머리글&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;노마드-유튜브클론.png&quot; data-origin-width=&quot;380&quot; data-origin-height=&quot;257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBD0Uf/btslCHSGLhi/m9VlKDd5tZihA5V4Og7tMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBD0Uf/btslCHSGLhi/m9VlKDd5tZihA5V4Og7tMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBD0Uf/btslCHSGLhi/m9VlKDd5tZihA5V4Og7tMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBD0Uf%2FbtslCHSGLhi%2Fm9VlKDd5tZihA5V4Og7tMK%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;380&quot; height=&quot;257&quot; data-filename=&quot;노마드-유튜브클론.png&quot; data-origin-width=&quot;380&quot; data-origin-height=&quot;257&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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;br /&gt;이미 여러 번 다뤘던 내용이므로 자세한 내용은 생략하고 넘어갑시다.&lt;/p&gt;
&lt;pre id=&quot;code_1687851655809&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;extends base

block content
    form(method=&quot;POST&quot;)
        input(placeholder=&quot;Name&quot;, name=&quot;name&quot;, type=&quot;text&quot;, required, value=loggedInUser.name)
        input(placeholder=&quot;Email&quot;, name=&quot;email&quot;, type=&quot;email&quot;, required, value=loggedInUser.email)
        input(placeholder=&quot;Username&quot;, name=&quot;username&quot;, type=&quot;text&quot;, required, value=loggedInUser.username)
        input(placeholder=&quot;Location&quot;, name=&quot;location&quot;, type=&quot;text&quot;, required, value=loggedInUser.location)
        input(type=&quot;submit&quot;, value=&quot;Update Profile&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;페이지를 만들어주고&lt;/p&gt;
&lt;pre id=&quot;code_1687851674849&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...
userRouter.route(&quot;/edit&quot;).get(getEdit).post(postEdit);
...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라우터도 만들어주고&lt;/p&gt;
&lt;pre id=&quot;code_1687851690812&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export const getEdit = (req, res) =&amp;gt; {
  return res.render(&quot;edit-profile&quot;, { pageTitle: &quot;Edit Profile&quot; });
};
export const postEdit = (req, res) =&amp;gt; {
  return res.render(&quot;edit-profile&quot;);
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨트롤러도 만들어줍시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 본격적으로 수정하기에 앞서 필요한 Middleware를 생성해 봅시다.&lt;/p&gt;
&lt;pre id=&quot;code_1687851750716&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export const protectorMiddleware = (req, res, next) =&amp;gt; {
  if (req.session.loggedIn) {
    return next();
  } else {
    return res.redirect(&quot;/login&quot;);
  }
};

export const publicOnlyMiddleware = (req, res, next) =&amp;gt; {
  if (!req.session.loggedIn) {
    return next();
  } else {
    return res.redirect(&quot;/&quot;);
  }
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 미들웨어는 로그인 상태를 확인하여 갈 수 있는 페이지와 그렇지 않은 페이지를 구분합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 로그인 상태라면 로그인 페이지로 이동이 불가능해야 할 것이고,&lt;br /&gt;로그인하지 않았다면 자신의 프로필등을 볼 수 없어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 필요한 곳에 라우터를 적용해 주었다면 수정 작업을 이어나가 봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역시 앞서했던 내용과 크게 차이가 없습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1687851900360&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export const postEdit = async (req, res) =&amp;gt; {
  const {
    session: {
      user: { _id },
    },
    body: { name, email, username, location },
  } = req;
  const updatedUser = await User.findByIdAndUpdate(
    _id,
    {
      name,
      email,
      username,
      location,
    },
    { new: true }
  );
  req.session.user = updatedUser;
  return res.redirect(&quot;/users/edit&quot;);
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 수정 페이지에서 각 정보를 가져와서&lt;br /&gt;findByIdAndUpdate 함수를 사용해서 DB에 있는 내용을 업데이트하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때, 프론트엔드에 정보를 즉각 반영하기 위해(세션을 업데이트하기 위해)&lt;br /&gt;new 옵션을 사용해서 정보를 받아옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;findByIdAndUpdate는 기본적으로 업데이트 전의 정보를 return 합니다.&lt;br /&gt;우리는 새로 업데이트된 정보가 필요하므로 new 옵션을 true로 해주면 업데이트 된 정보를 return 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 정보를 바탕으로 세션의 유저 정보를 업데이트하면 유저 프로필 수정이 완료됩니다.&lt;/p&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 시간에는 비밀번호를 변경해 보도록 하겠습니다.&lt;/p&gt;</description>
      <category>노마드 코더/유튜브 클론</category>
      <category>JavaScript</category>
      <category>mongoose</category>
      <category>Node</category>
      <category>node.js</category>
      <category>노마드 코더</category>
      <category>유튜브 클론</category>
      <category>자바스크립트</category>
      <category>풀스택</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/234</guid>
      <comments>https://looancheong.tistory.com/234#entry234comment</comments>
      <pubDate>Tue, 27 Jun 2023 16:52:19 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 1049: 기타줄</title>
      <link>https://looancheong.tistory.com/232</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;1181&quot; data-origin-height=&quot;842&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWMffh/btslqhAErUz/aWfy3LM8H1FZRiP6kZ9ZH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWMffh/btslqhAErUz/aWfy3LM8H1FZRiP6kZ9ZH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWMffh/btslqhAErUz/aWfy3LM8H1FZRiP6kZ9ZH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWMffh%2FbtslqhAErUz%2FaWfy3LM8H1FZRiP6kZ9ZH0%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;1181&quot; height=&quot;842&quot; data-origin-width=&quot;1181&quot; data-origin-height=&quot;842&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1049&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/1049&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1687760806611&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;1049번: 기타줄&quot; data-og-description=&quot;첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1049&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1049&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1049&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1049&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;1049번: 기타줄&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1687762438881&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
input = sys.stdin.readline

n, m = map(int, input().split())
pack = list()
one = list()


for _ in range(m):
    a, b = map(int, input().split())
    pack.append(a)
    one.append(b)

min_pack, min_one = min(pack), min(one)

if min_pack &amp;gt; min_one * 6:
    print(n * min_one)
else:
    if (n % 6) * min_one &amp;lt; min_pack:
        print(((n // 6) * min_pack) + ((n % 6) * min_one))
    else:
        print(((n // 6) + 1) * min_pack)&lt;/code&gt;&lt;/pre&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;우선 1개짜리의 최솟값과 패키지의 최솟값을 구해준다.&lt;br /&gt;(그 이외의 것은 살 이유가 없다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 비교를 해줘야 하는데,&lt;br /&gt;우선 패키지의 최솟값과 개별 구매의 최솟값에 6개를 곱한 값을 비교해 준다.&lt;br /&gt;(개수를 맞춰서 비교)&lt;br /&gt;이때 개별 구매 가격이 더 싸다면 모든 줄을 개별로 구매한 값을 출력한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇지 않다면,&lt;br /&gt;패키지가 더 싸다는 것이므로 6개 단위는 패키지로 구매하고&lt;br /&gt;그렇지 않은 나머지 값을 비교해야 한다.&lt;br /&gt;(15개를 구매한다고 가정하면 12개는 패키지로 구매 나머지 3개에 대한 계산)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 나머지 값이 패키지의 값보다 싸다면 해당 개수는 개별 구매,&lt;br /&gt;그리고 나머지는 패키지의 가격으로 계산한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 나머지의 값이 패키지 값보다 비싼 경우에는 패키지를 하나 더 사는 게 이득이므로&lt;br /&gt;6개 단위를 패키지로 구매한 것에 나머지도 패키지로 구매하여 계산한 결과를 출력해 준다.&lt;br /&gt;(15개를 구매한다고 가정하면 패키지 2개(12개에 대한 것)+1개(나머지 3개에 대한 것))&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>그리디 알고리즘</category>
      <category>백준</category>
      <category>백준 1049</category>
      <category>백준 1049 파이썬</category>
      <category>백준 기타줄</category>
      <category>백준 기타줄 파이썬</category>
      <category>탐욕 알고리즘</category>
      <category>파이썬</category>
      <category>파이썬 그리디</category>
      <category>파이썬 그리디 알고리즘</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/232</guid>
      <comments>https://looancheong.tistory.com/232#entry232comment</comments>
      <pubDate>Tue, 27 Jun 2023 10:58:14 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 1021: 회전하는 큐</title>
      <link>https://looancheong.tistory.com/231</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-filename=&quot;1021.PNG&quot; data-origin-width=&quot;873&quot; data-origin-height=&quot;962&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsH9np/btskZZNtc9t/l3FMRiSKNLJDDBIPcKby80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsH9np/btskZZNtc9t/l3FMRiSKNLJDDBIPcKby80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsH9np/btskZZNtc9t/l3FMRiSKNLJDDBIPcKby80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsH9np%2FbtskZZNtc9t%2Fl3FMRiSKNLJDDBIPcKby80%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;873&quot; height=&quot;962&quot; data-filename=&quot;1021.PNG&quot; data-origin-width=&quot;873&quot; data-origin-height=&quot;962&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1021&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/1021&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1687422997056&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;1021번: 회전하는 큐&quot; data-og-description=&quot;첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1021&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1021&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/wBtUQ/hyS5sOOS7m/KH6Yuzpk9Bc8J3oK66RkvK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1021&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1021&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/wBtUQ/hyS5sOOS7m/KH6Yuzpk9Bc8J3oK66RkvK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;1021번: 회전하는 큐&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1687423010344&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from collections import deque
import sys
input = sys.stdin.readline

n, m = map(int, input().split())
idx = list(map(int, input().split()))
q = deque(i for i in range(1, n+1))
cnt = 0

for i in idx:
    while True:
        if q[0] == i:
            q.popleft()
            break
        else:
            if q.index(i) &amp;lt; len(q)/2:
                while q[0] != i:
                    q.append(q.popleft())
                    cnt += 1
            else:
                while q[0] != i:
                    q.appendleft(q.pop())
                    cnt += 1
print(cnt)&lt;/code&gt;&lt;/pre&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;큐를 사용해서 풀이를 해야 하므로 deque을 import 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력값을 받아주고 1부터 n+1까지의 큐를 생성해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력받은 위치의 값을 기준으로 반복문을 돌려준다.&lt;br /&gt;만약 큐의 제일 첫 번째 수가 목표 숫자라면 큐에서 제거해 주고 반복문을 종료하고 다음 숫자로 넘어간다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇지 않은 경우에는 해당 수의 인덱스를 찾아서 더 적게 돌아가는 방향으로 돌려줘야 한다.&lt;br /&gt;예를 들어 [2,3,4,5]라는 큐가 있다고 가장하자.&lt;br /&gt;3을 뽑아야 한다고 하면 왼쪽으로 돌리는 게 더 최소 횟수일 것이고(2번 연산),&lt;br /&gt;5를 뽑아야 한다고 하면 오른쪽으로 돌리는게 더 최소 횟수일 것이다(3번 연산).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 이를 계산할 방법이 필요한데,&lt;br /&gt;해당 수의 인덱스를 기준으로 현재 큐의 개수를 반으로 나눈 것(중간 지점) 보다 작다면 왼쪽으로,&lt;br /&gt;크다면 오른쪽으로 돌려준다.&lt;br /&gt;큐를 돌리는 과정이 진행되면 cnt를 늘려줘서 연산이 몇 번 수행되었는지 알 수 있게 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종적으로 카운트된 연산 횟수를 출력하면 된다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>백준</category>
      <category>백준 1021</category>
      <category>백준 1021 파이썬</category>
      <category>백준 회전하는 큐</category>
      <category>백준 회전하는 큐 파이썬</category>
      <category>파이썬</category>
      <category>파이썬 deque</category>
      <category>파이썬 덱</category>
      <category>파이썬 큐</category>
      <category>파이썬 큐 연산</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/231</guid>
      <comments>https://looancheong.tistory.com/231#entry231comment</comments>
      <pubDate>Fri, 23 Jun 2023 11:41:16 +0900</pubDate>
    </item>
    <item>
      <title>[T-SUM] 4주차 자료 - 변수와 함수, 매개변수와 인수</title>
      <link>https://looancheong.tistory.com/230</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;203&quot; data-origin-height=&quot;53&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRK8no/btsk0Q3tuhP/a4BLZaGJuB58knk0ggRHTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRK8no/btsk0Q3tuhP/a4BLZaGJuB58knk0ggRHTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRK8no/btsk0Q3tuhP/a4BLZaGJuB58knk0ggRHTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRK8no%2Fbtsk0Q3tuhP%2Fa4BLZaGJuB58knk0ggRHTk%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;203&quot; height=&quot;53&quot; data-origin-width=&quot;203&quot; data-origin-height=&quot;53&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;오늘의 내용 미리보기&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;130&quot; data-origin-height=&quot;74&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bExdKZ/btskSRWjUL1/3TK7gJozLrgODscK8eI84K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bExdKZ/btskSRWjUL1/3TK7gJozLrgODscK8eI84K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bExdKZ/btskSRWjUL1/3TK7gJozLrgODscK8eI84K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbExdKZ%2FbtskSRWjUL1%2F3TK7gJozLrgODscK8eI84K%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;176&quot; height=&quot;100&quot; data-origin-width=&quot;130&quot; data-origin-height=&quot;74&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;본문&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;변수(Variable)&lt;/b&gt;&lt;/h4&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;152&quot; data-origin-height=&quot;19&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKziGF/btskQOGox9z/jdgaPpiuK9HZsiuLPC0Mf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKziGF/btskQOGox9z/jdgaPpiuK9HZsiuLPC0Mf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKziGF/btskQOGox9z/jdgaPpiuK9HZsiuLPC0Mf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKziGF%2FbtskQOGox9z%2FjdgaPpiuK9HZsiuLPC0Mf1%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;152&quot; height=&quot;19&quot; data-origin-width=&quot;152&quot; data-origin-height=&quot;19&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 출력을 했는데,&lt;br /&gt;만약 이걸 여러 번 출력하려면?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;157&quot; data-origin-height=&quot;59&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGGGRH/btskSn2esbz/WR8tooUEWyPXGm81omrMWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGGGRH/btskSn2esbz/WR8tooUEWyPXGm81omrMWK/img.png&quot; data-alt=&quot;이렇게..?&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGGGRH/btskSn2esbz/WR8tooUEWyPXGm81omrMWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGGGRH%2FbtskSn2esbz%2FWR8tooUEWyPXGm81omrMWK%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;157&quot; height=&quot;59&quot; data-origin-width=&quot;157&quot; data-origin-height=&quot;59&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이렇게..?&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 이렇게 하는 방법도 있겠지만 조금 더 간결하게 표현해 봅시다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;133&quot; data-origin-height=&quot;41&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUT8rh/btskT2b5TsT/mVEki3MmRqLXvc7lmE2Wsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUT8rh/btskT2b5TsT/mVEki3MmRqLXvc7lmE2Wsk/img.png&quot; data-alt=&quot;이렇게&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUT8rh/btskT2b5TsT/mVEki3MmRqLXvc7lmE2Wsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUT8rh%2FbtskT2b5TsT%2FmVEki3MmRqLXvc7lmE2Wsk%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;133&quot; height=&quot;41&quot; data-origin-width=&quot;133&quot; data-origin-height=&quot;41&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이렇게&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 바꾸면 조금 더 편하게 출력이 가능하겠죠?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 사용한 a를 우리는 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;변수&lt;/span&gt;&lt;/b&gt;라고 합니다.&lt;br /&gt;언제든지 그 값을 변경할 수 있어요.&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;102&quot; data-origin-height=&quot;108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pVxfs/btskSRIMIXq/KPJkjnTmloKja01rfL61VK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pVxfs/btskSRIMIXq/KPJkjnTmloKja01rfL61VK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pVxfs/btskSRIMIXq/KPJkjnTmloKja01rfL61VK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpVxfs%2FbtskSRIMIXq%2FKPJkjnTmloKja01rfL61VK%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;102&quot; height=&quot;108&quot; data-origin-width=&quot;102&quot; data-origin-height=&quot;108&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 숫자를 지정해서 각 변수를 더하는 방법도 사용이 가능해요.&lt;br /&gt;물론 a와 b의 값을 바꾸면 결괏값도 변화합니다.&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;71&quot; data-origin-height=&quot;86&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bX5VuF/btskQh95jGj/7frvSbtcLeFiYhmerzRb1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bX5VuF/btskQh95jGj/7frvSbtcLeFiYhmerzRb1k/img.png&quot; data-alt=&quot;a가 2개&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bX5VuF/btskQh95jGj/7frvSbtcLeFiYhmerzRb1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbX5VuF%2FbtskQh95jGj%2F7frvSbtcLeFiYhmerzRb1k%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;71&quot; height=&quot;86&quot; data-origin-width=&quot;71&quot; data-origin-height=&quot;86&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;a가 2개&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같이 코드가 존재할 때,&lt;br /&gt;c의 값은 어떻게 될까요?&lt;br /&gt;바로 7이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 시간에 잠시 언급을 했었는데 파이썬은 코드를 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;위에서 아래로 읽는 방법&lt;/b&gt;&lt;/span&gt;을 사용합니다.&lt;br /&gt;1번 라인에서 a는 2라는 값을 할당받았지만 3번 라인에서 다시 a에 4라는 값을 할당했으므로 이런 결과가 나오게 됩니다.&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;br /&gt;위에서 보았듯 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;알파벳&lt;/b&gt;&lt;/span&gt;도 가능하고, &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;한글&lt;/b&gt;&lt;/span&gt;도 됩니다.&lt;br /&gt;문자는 다 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;132&quot; data-origin-height=&quot;92&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUotNY/btskTFuwrjI/rK4HHgdMfagJWqCdQKeoJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUotNY/btskTFuwrjI/rK4HHgdMfagJWqCdQKeoJ0/img.png&quot; data-alt=&quot;신기하죠&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUotNY/btskTFuwrjI/rK4HHgdMfagJWqCdQKeoJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUotNY%2FbtskTFuwrjI%2FrK4HHgdMfagJWqCdQKeoJ0%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;132&quot; height=&quot;92&quot; data-origin-width=&quot;132&quot; data-origin-height=&quot;92&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;신기하죠&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;숫자&lt;/b&gt;&lt;/span&gt;도 사용이 가능합니다.&lt;br /&gt;단, &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;문자가 먼저 나왔을 때!&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;294&quot; data-origin-height=&quot;137&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pqaff/btskVLOHslC/3ybH9n7CmCib5J1I1OMKzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pqaff/btskVLOHslC/3ybH9n7CmCib5J1I1OMKzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pqaff/btskVLOHslC/3ybH9n7CmCib5J1I1OMKzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpqaff%2FbtskVLOHslC%2F3ybH9n7CmCib5J1I1OMKzk%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;294&quot; height=&quot;137&quot; data-origin-width=&quot;294&quot; data-origin-height=&quot;137&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 숫자만 나오면 안 되고&lt;br /&gt;문자 뒤에 숫자가 붙어야 사용이 가능합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;129&quot; data-origin-height=&quot;130&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/diU4me/btskRaCshOm/uj8WirNlNBs7XFJK8kNF80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/diU4me/btskRaCshOm/uj8WirNlNBs7XFJK8kNF80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/diU4me/btskRaCshOm/uj8WirNlNBs7XFJK8kNF80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdiU4me%2FbtskRaCshOm%2Fuj8WirNlNBs7XFJK8kNF80%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;129&quot; height=&quot;130&quot; data-origin-width=&quot;129&quot; data-origin-height=&quot;130&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변수의 이름에 또 다른 중요한 사항이 있는데&lt;br /&gt;바로 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;공백이 있으면 안 됩니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;228&quot; data-origin-height=&quot;163&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/21O3b/btskTFVBjqx/V3ildHwkvnBZqBZT8788y1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/21O3b/btskTFVBjqx/V3ildHwkvnBZqBZT8788y1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/21O3b/btskTFVBjqx/V3ildHwkvnBZqBZT8788y1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F21O3b%2FbtskTFVBjqx%2FV3ildHwkvnBZqBZT8788y1%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;228&quot; height=&quot;163&quot; data-origin-width=&quot;228&quot; data-origin-height=&quot;163&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;147&quot; data-origin-height=&quot;60&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ozAd8/btskRnBzJ3K/e2OgUDokcoeFlqHvOJ8W3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ozAd8/btskRnBzJ3K/e2OgUDokcoeFlqHvOJ8W3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ozAd8/btskRnBzJ3K/e2OgUDokcoeFlqHvOJ8W3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FozAd8%2FbtskRnBzJ3K%2Fe2OgUDokcoeFlqHvOJ8W3k%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;147&quot; height=&quot;60&quot; data-origin-width=&quot;147&quot; data-origin-height=&quot;60&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 여기까지 변수에 대해서 알아봤습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;함수(Function)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 함수를 배워봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 지금까지 사용했던 함수가 하나 있습니다.&lt;br /&gt;바로 print()인데 이는 파이썬의 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;내장 함수&lt;/b&gt;&lt;/span&gt;입니다.&lt;br /&gt;우리가 따로 만들지 않았어도 파이썬이 기본적으로 제공하는 함수예요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내장 함수가 있으면 내장 함수가 아닌 것도 있겠죠?&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;사용자 지정 함수&lt;/span&gt;&lt;/b&gt;를 만들어 봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;def를 써주고 한 칸 띄고 함수의 이름을 만들어줍시다.&lt;br /&gt;def는 define의 약자로 정의한다는 뜻을 내포합니다.&lt;br /&gt;그리고 괄호를 열고 닫을 거예요.&lt;br /&gt;마지막으로 콜론(:)을 붙이고 엔터를 쳐줍시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 우리는 say_hello라는 함수를 정의하겠다고 컴퓨터에게 알려줬습니다.&lt;br /&gt;이제 함수에 print(&quot;Hello!&quot;)를 입력하고 say_hello()를 작동시켜 봅시다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;142&quot; data-origin-height=&quot;72&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhUHGP/btskQQYCXpc/Zii6F27kmQAmAYB9zKOJxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhUHGP/btskQQYCXpc/Zii6F27kmQAmAYB9zKOJxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhUHGP/btskQQYCXpc/Zii6F27kmQAmAYB9zKOJxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhUHGP%2FbtskQQYCXpc%2FZii6F27kmQAmAYB9zKOJxk%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;142&quot; height=&quot;72&quot; data-origin-width=&quot;142&quot; data-origin-height=&quot;72&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하게 인사를 하는 함수를 만들었습니다.&lt;br /&gt;생각보다 별 거 없죠?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 함수를 만들면 say_hello()를 통해 print(&quot;Hello!&quot;)라는 번거로운 과정을 줄일 수 있습니다.&lt;br /&gt;한 번 생성한 함수는 얼마든지 사용이 가능해요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 함수를 만들면서 이상한 점 없었나요?&lt;br /&gt;콜론을 붙이고 엔터를 치니까 자동으로 들여 쓰기가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬은 들여 쓰기로 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;영역(scope)&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;을&lt;/span&gt;&amp;nbsp;지정하며 이는 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;매우 중요한 강제사항&lt;/span&gt;&lt;/b&gt;입니다.&lt;br /&gt;함수를 만드는 지금과 같은 상황의 경우 def의 영역이 여기부터라고 알려주는 것입니다.&lt;br /&gt;자동으로 들여 쓰기가 되는 경우도 있지만 수동으로 필요하면 1/2/4칸 스페이스, 혹은 탭을 사용합니다.&lt;br /&gt;동일한 영역의 함수는 동일한 들여 쓰기 칸 수를 이용해야 합니다.&lt;br /&gt;주로 탭을 많이 사용하니까 탭으로 알아두면 좋습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;매개변수(Parameter)와 인수/인자(Argument)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 함수를 사용하면서 입력값이 필요 없는 경우도 있지만&lt;br /&gt;print를 사용할 때, 내용을 입력했던 것처럼 변수가 필요한 경우도 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수를 만들 때도 마찬가지예요.&lt;br /&gt;이 변수를 미리 지정해 줄 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아까 만들었던 say_hello 함수를 살짝 바꿔봅시다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;87&quot; data-origin-height=&quot;72&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vCUgz/btskZyPMEAB/bx3lwImSHcF0VdUjHLakJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vCUgz/btskZyPMEAB/bx3lwImSHcF0VdUjHLakJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vCUgz/btskZyPMEAB/bx3lwImSHcF0VdUjHLakJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvCUgz%2FbtskZyPMEAB%2Fbx3lwImSHcF0VdUjHLakJ1%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;87&quot; height=&quot;72&quot; data-origin-width=&quot;87&quot; data-origin-height=&quot;72&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;a&lt;/b&gt;라는 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;매개변수&lt;/b&gt;&lt;/span&gt;를 지정해 주고 그 매개변수가 들어갈 자리를 만들어줬습니다.&lt;br /&gt;그리고 함수를 실행할 때, &lt;b&gt;hi&lt;/b&gt;라는 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;인자&lt;/span&gt;&lt;/b&gt;를 입력해서 실행했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 둘의 차이부터 알아봅시다.&lt;br /&gt;매개변수는 함수에 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;입력으로 전달된 값을 받는 변수&lt;/b&gt;&lt;/span&gt;입니다.&lt;br /&gt;인자(인수)는 함수를 호출할 때 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;전달하는 입력값&lt;/span&gt;&lt;/b&gt;을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혼동해서 사용하기 쉬운 용어니까 잘 알아두고 넘어갑시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매개변수는 여러 개를 사용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;142&quot; data-origin-height=&quot;71&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTkPzS/btskTHHgXti/6ppTIZpQLeDqLAssYYfd00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTkPzS/btskTHHgXti/6ppTIZpQLeDqLAssYYfd00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTkPzS/btskTHHgXti/6ppTIZpQLeDqLAssYYfd00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTkPzS%2FbtskTHHgXti%2F6ppTIZpQLeDqLAssYYfd00%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;142&quot; height=&quot;71&quot; data-origin-width=&quot;142&quot; data-origin-height=&quot;71&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매개변수가 늘어난 만큼 함수를 호출할 때 주어지는 인자도 늘어나야 합니다.(매개변수의 수 = 인자의 수)&lt;br /&gt;또한 &lt;span style=&quot;color: #ee2323;&quot;&gt;인자의 순서가 결괏값에 영향&lt;/span&gt;을 미칩니다.(순서가 중요합니다)&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;157&quot; data-origin-height=&quot;74&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rcRQt/btskXNG1PMU/FNHqyz2gKJBmrpmKuqAuB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rcRQt/btskXNG1PMU/FNHqyz2gKJBmrpmKuqAuB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rcRQt/btskXNG1PMU/FNHqyz2gKJBmrpmKuqAuB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrcRQt%2FbtskXNG1PMU%2FFNHqyz2gKJBmrpmKuqAuB1%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;157&quot; height=&quot;74&quot; data-origin-width=&quot;157&quot; data-origin-height=&quot;74&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 여기에 만약 인자를 안 넣고 실행했다고 가정하면 어떻게 될까요?&lt;br /&gt;오류가 나겠죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 상황을 방지하기 위해 default 값을 지정해 주는 방법이 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;162&quot; data-origin-height=&quot;72&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUWOsK/btsk0eXBzBo/EMafi17tbTUo1WYGfCqd7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUWOsK/btsk0eXBzBo/EMafi17tbTUo1WYGfCqd7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUWOsK/btsk0eXBzBo/EMafi17tbTUo1WYGfCqd7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUWOsK%2Fbtsk0eXBzBo%2FEMafi17tbTUo1WYGfCqd7K%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;162&quot; height=&quot;72&quot; data-origin-width=&quot;162&quot; data-origin-height=&quot;72&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 하게 되면 인자를 받지 않았을 때,&lt;br /&gt;오류가 나는 대신 디폴트로 선언한 값을 인자로 생각하고 실행해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수를 만들다 보면 이렇게 실행만 시키면 되는 경우가 있지만 실행한 값을 받아와야 하는 경우도 있습니다.&lt;br /&gt;예시를 들어봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세금을 계산해 주는 계산기를 만들고,&lt;br /&gt;그 값을 출력해 준다고 가정하면 계산기에서 계산된 값을 가져올 방법이 있어야겠죠?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 'return'을 이용해서 합니다.&lt;br /&gt;return을 사용하게 되면 해당 함수에서 계산된 값을 외부에서 사용이 가능합니다.&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;308&quot; data-origin-height=&quot;163&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cm7r7W/btskSSBPvec/46siJm12Si2Jl10UBreCvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cm7r7W/btskSSBPvec/46siJm12Si2Jl10UBreCvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cm7r7W/btskSSBPvec/46siJm12Si2Jl10UBreCvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcm7r7W%2FbtskSSBPvec%2F46siJm12Si2Jl10UBreCvk%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;308&quot; height=&quot;163&quot; data-origin-width=&quot;308&quot; data-origin-height=&quot;163&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 위의 계산기에서 받은 값을 사용할 수 있습니다.&lt;/p&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;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. 변수는 무엇인지?&lt;br /&gt;2. 변수의 이름을 짓는 방법&lt;br /&gt;3. 함수는 무엇인지?&lt;br /&gt;4. 함수를 만드는 방법&lt;br /&gt;5. 매개변수와 인수의 차이&lt;br /&gt;6. 디폴트 매개변수&lt;br /&gt;7. 리턴&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;다음시간에 만나요!&lt;/p&gt;
&lt;h3 style=&quot;color: #222222; text-align: start;&quot; 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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더하기, 빼기, 나누기, 곱하기, 제곱 등의 기능이 있는 계산기를 만들어봅시다.&lt;/p&gt;</description>
      <category>T-SUM 멘토링</category>
      <category>T-SUM</category>
      <category>파이썬</category>
      <category>파이썬 def</category>
      <category>파이썬 parameter</category>
      <category>파이썬 기초</category>
      <category>파이썬 매개변수</category>
      <category>파이썬 변수</category>
      <category>파이썬 인수</category>
      <category>파이썬 인자</category>
      <category>파이썬 함수</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/230</guid>
      <comments>https://looancheong.tistory.com/230#entry230comment</comments>
      <pubDate>Thu, 22 Jun 2023 16:33:16 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬, Python] 백준 11053: 가장 긴 증가하는 부분 수열</title>
      <link>https://looancheong.tistory.com/228</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-filename=&quot;11053.PNG&quot; data-origin-width=&quot;1171&quot; data-origin-height=&quot;582&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkdecf/btskJi1yhbY/EpWrqXeRIyzEU9ZwkkoboK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkdecf/btskJi1yhbY/EpWrqXeRIyzEU9ZwkkoboK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkdecf/btskJi1yhbY/EpWrqXeRIyzEU9ZwkkoboK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbkdecf%2FbtskJi1yhbY%2FEpWrqXeRIyzEU9ZwkkoboK%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;1171&quot; height=&quot;582&quot; data-filename=&quot;11053.PNG&quot; data-origin-width=&quot;1171&quot; data-origin-height=&quot;582&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/11053&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/11053&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1687268817941&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;11053번: 가장 긴 증가하는 부분 수열&quot; data-og-description=&quot;수열 A가 주어졌을 때, 가장 긴 증가하는&amp;nbsp;부분&amp;nbsp;수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분&amp;nbsp;수열은&amp;nbsp;A = {10, 20, 10, 30, 20, 50} 이&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/11053&quot; data-og-url=&quot;https://www.acmicpc.net/problem/11053&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/culUDP/hyS2IsrRbJ/b5wIlg1C4WXZkSP2kpo93K/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/11053&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/11053&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/culUDP/hyS2IsrRbJ/b5wIlg1C4WXZkSP2kpo93K/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;11053번: 가장 긴 증가하는 부분 수열&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;수열 A가 주어졌을 때, 가장 긴 증가하는&amp;nbsp;부분&amp;nbsp;수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분&amp;nbsp;수열은&amp;nbsp;A = {10, 20, 10, 30, 20, 50} 이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1687268828154&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;n = int(input())
num = list(map(int, input().split()))
dp = [1 for i in range(n)]

for i in range(n):
    for j in range(i):
        if num[i] &amp;gt; num[j]:
            dp[i] = max(dp[i], dp[j]+1)

print(max(dp))&lt;/code&gt;&lt;/pre&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 현재 위치의 숫자(num[i])가 이전에 있는 숫자(num[j])보다 큰지 확인한다.&lt;br /&gt;2. 크다면, dp[i]의 값을 dp[i]의 현재 값과 dp[j]에 1을 더한 값 중 큰 값으로 갱신한다.&lt;br /&gt;(이때, j는 i보다 작은 모든 값)&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center;&quot;&gt;10&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center;&quot;&gt;20&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center;&quot;&gt;10&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center;&quot;&gt;30&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center;&quot;&gt;20&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center;&quot;&gt;50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center;&quot;&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 처음 10의 경우(i = 0) 부분수열은 자기 자신밖에 없으므로 1을 입력해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 20의 경우 부분수열은 {10, 20}, {20} 이 가능하므로 최대 길이인 2를 입력해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 2번째 10의 경우 증가하는 부분수열에 포함될 수 없으므로 초기값 1에서 변화가 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 30의 경우 {10,20,30}, {10, 30}, {30} 등과 같이 가능하지만 이 중 최댓값인 3을 입력해 준다.&lt;br /&gt;(dp[1]의 {10,20}에 30을 더한 케이스)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 단계를 거친다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종적으로 가장 큰 dp값을 출력한다.&lt;/p&gt;</description>
      <category>개발 연습장/백준 문제풀이</category>
      <category>dp</category>
      <category>다이나믹 프로그래밍</category>
      <category>백준</category>
      <category>백준 11053</category>
      <category>백준 11053 파이썬</category>
      <category>백준 가장 긴 증가하는 부분 수열</category>
      <category>백준 가장 긴 증가하는 부분 수열 파이썬</category>
      <category>파이썬</category>
      <category>파이썬 DP</category>
      <category>파이썬 부분 수열</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/228</guid>
      <comments>https://looancheong.tistory.com/228#entry228comment</comments>
      <pubDate>Thu, 22 Jun 2023 10:59:08 +0900</pubDate>
    </item>
    <item>
      <title>[JavaScript, Node.js] 유튜브 클론 정리 7장 (11) - Logout, 복습</title>
      <link>https://looancheong.tistory.com/229</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;머리글&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;노마드-유튜브클론.png&quot; data-origin-width=&quot;380&quot; data-origin-height=&quot;257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvMHZj/btskRugrY5j/X9FKVMUkB2YSr5KxK6EnOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvMHZj/btskRugrY5j/X9FKVMUkB2YSr5KxK6EnOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvMHZj/btskRugrY5j/X9FKVMUkB2YSr5KxK6EnOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvMHZj%2FbtskRugrY5j%2FX9FKVMUkB2YSr5KxK6EnOK%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;380&quot; height=&quot;257&quot; data-filename=&quot;노마드-유튜브클론.png&quot; data-origin-width=&quot;380&quot; data-origin-height=&quot;257&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 시간에는 로그아웃에 대해 알아보자.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Logout&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그아웃은 굉장히 간단하게 구현이 가능하다.&lt;/p&gt;
&lt;pre id=&quot;code_1687367922300&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export const logout = (req, res) =&amp;gt; {
  req.session.destroy();
  return res.redirect(&quot;/&quot;);
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 session을 destroy 하게 되면 로그아웃이 가능하다.&lt;/p&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;로그아웃까지 구현하며 7장에서의 모든 내용을 마무리했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계정을 생성하는 방법을 배웠고,&lt;br /&gt;상태 코드에 대해서도 알아보았으며,&lt;br /&gt;로그인을 구현하는 방법도 배웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, 세션과 쿠키에 대해서 배웠고&lt;br /&gt;로그인 상태로 만드는 법도 알아보았으며&lt;br /&gt;환경 변수등과 같은 부가적인 요소도 배웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끝으로 이를 종합하여 github의 api를 이용해서 github 로그인도 구현해 보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 장에서는 이번 장에서 만든 유저의 정보를 수정하는 방법을 배운다.&lt;/p&gt;</description>
      <category>노마드 코더/유튜브 클론</category>
      <category>JavaScript</category>
      <category>Node</category>
      <category>node.js</category>
      <category>session.destroy()</category>
      <category>노마드 코더</category>
      <category>로그아웃</category>
      <category>로그아웃 구현</category>
      <category>유저 로그아웃</category>
      <category>유튜브 클론</category>
      <author>LooanCheong</author>
      <guid isPermaLink="true">https://looancheong.tistory.com/229</guid>
      <comments>https://looancheong.tistory.com/229#entry229comment</comments>
      <pubDate>Thu, 22 Jun 2023 02:22:30 +0900</pubDate>
    </item>
  </channel>
</rss>