<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>반복해야 쌓인다</title>
    <link>https://hyunlulu.tistory.com/</link>
    <description>공부하고 기록하기</description>
    <language>ko</language>
    <pubDate>Tue, 7 Apr 2026 19:17:07 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>hyunlulu</managingEditor>
    <image>
      <title>반복해야 쌓인다</title>
      <url>https://tistory1.daumcdn.net/tistory/7586670/attach/a76e3b96d4c7415fa5bd49d45ce173df</url>
      <link>https://hyunlulu.tistory.com</link>
    </image>
    <item>
      <title>백준 15654 : N과 M (5)</title>
      <link>https://hyunlulu.tistory.com/entry/%EB%B0%B1%EC%A4%80-15654-N%EA%B3%BC-M-5</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;백준 15654 : N과 M (5)&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;알고리즘 : 백트래킹&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/15652&quot;&gt;https://www.acmicpc.net/problem/15654&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;문제&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작&lt;/span&gt;성해라.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;N개의 자연수는 모두 다른&lt;span&gt; 자연수이고, &lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;수열은 사전 순으로 증가하는 순서로 출력&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;코드&lt;/h3&gt;
&lt;pre id=&quot;code_1759854452582&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.lang.*;
import java.io.*;

class Main {

    static int n, m;
    static int[] arr;
    static ArrayList&amp;lt;int[]&amp;gt; result;
    static int[] temp;
    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());

        arr = new int[n+1];

        st = new StringTokenizer(br.readLine());

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

        Arrays.sort(arr, 1, n+1);

        result = new ArrayList&amp;lt;&amp;gt;();
        temp = new int[m];
        visited = new boolean[n+1];

        dfs(0,1);


        // 출력
        for(int i=0; i&amp;lt;result.size(); i++){
            for(int j=0; j&amp;lt;m; j++){
                if(j == m-1){
                    System.out.print(result.get(i)[j]);
                }else{
                    System.out.print(result.get(i)[j] + &quot; &quot;);
                }
            }
            System.out.println();
        }
    }

    static void dfs(int depth, int start){
        if(depth == m){
            result.add(Arrays.copyOf(temp, m));
            return;
        }

        for(int i=1; i&amp;lt;=n; i++){
            if(visited[i] == true){
                continue;
            }
            visited[i] = true;
            temp[depth] = arr[i];
            dfs(depth+1, i);
            visited[i] = false;
        }
        
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>hyunlulu</author>
      <guid isPermaLink="true">https://hyunlulu.tistory.com/143</guid>
      <comments>https://hyunlulu.tistory.com/entry/%EB%B0%B1%EC%A4%80-15654-N%EA%B3%BC-M-5#entry143comment</comments>
      <pubDate>Wed, 8 Oct 2025 01:27:56 +0900</pubDate>
    </item>
    <item>
      <title>백준 15652 : N과 M (4)</title>
      <link>https://hyunlulu.tistory.com/entry/15652</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;백준 15652 : N과&amp;nbsp;M&amp;nbsp;(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;a href=&quot;https://www.acmicpc.net/problem/15652&quot;&gt;https://www.acmicpc.net/problem/15652&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램 작성해라.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;조건은 비내림차순이므로 An&amp;gt;An+1인&amp;nbsp;경우는&amp;nbsp;제외함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;만약에 비내림차순이라는 조건 없이 모든 경우를 다 구한다면 완전탐색(브루트포스) 문제지만, 이건 조건이 존재하므로 백트래킹이라고 볼 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드&lt;/h3&gt;
&lt;pre id=&quot;code_1759769233632&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.lang.*;
import java.io.*;

class Main {

    static int n, m;
    static List&amp;lt;int[]&amp;gt; result;
    static int[] temp;
    
    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());


        // 정답 배열 선언
        result = new ArrayList&amp;lt;&amp;gt;();
        temp = new int[m];

        // 로직
        dfs(0,1);


        // 출력
        for(int i=0; i&amp;lt;result.size(); i++){
            
            for(int j=0; j&amp;lt;m; j++){
                if(j==m-1){
                    System.out.println(result.get(i)[j]);
                }else{
                    System.out.print(result.get(i)[j] + &quot; &quot;);
                }
            }
            
        }

    }

    static void dfs(int depth, int start){
        if(depth == m){
            result.add(Arrays.copyOf(temp, m));
            return;
        }

        for(int i=start; i&amp;lt;=n; i++){
            temp[depth] = i;
            dfs(depth+1,i);
        }
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <category>15652 java</category>
      <author>hyunlulu</author>
      <guid isPermaLink="true">https://hyunlulu.tistory.com/141</guid>
      <comments>https://hyunlulu.tistory.com/entry/15652#entry141comment</comments>
      <pubDate>Tue, 7 Oct 2025 01:47:16 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL] 프로그래머스 273712 - 업그레이드 할 수 없는 아이템 구하기</title>
      <link>https://hyunlulu.tistory.com/entry/MySQL-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-273712-%EC%97%85%EA%B7%B8%EB%A0%88%EC%9D%B4%EB%93%9C-%ED%95%A0-%EC%88%98-%EC%97%86%EB%8A%94-%EC%95%84%EC%9D%B4%ED%85%9C-%EA%B5%AC%ED%95%98%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/273712&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/273712&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1756479517165&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/273712&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/d0WvaE/hyZC3jbvW0/e1Hiau0rRy4KmuCJnhcIW1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/beKjnd/hyZGlbpL1H/HUcC5yWkK9DWGCgndPV0O0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/273712&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/273712&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/d0WvaE/hyZC3jbvW0/e1Hiau0rRy4KmuCJnhcIW1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/beKjnd/hyZGlbpL1H/HUcC5yWkK9DWGCgndPV0O0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드 자체는 크게 복잡하지 않지만 처음에 문제 이해가 한번에 되지 않았던 점, 풀이 방식을 기억하고자 글을 남긴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로그래머스&amp;nbsp;273712&amp;nbsp;-&amp;nbsp;업그레이드&amp;nbsp;할&amp;nbsp;수&amp;nbsp;없는&amp;nbsp;아이템&amp;nbsp;구하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;더 이상 업그레이드할 수 없는 아이템의 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME), 아이템의 희귀도(RARITY)를 출력하는 SQL 문을 작성해라. 결과는 아이템 ID를 기준으로 내림차순 정렬 필요&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;풀이&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;문제를 해석해보면&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;'ITEM_A'-&amp;gt;'ITEM_B'와 같이 업그레이드가 가능할 때 'ITEM_A'를 'ITEM_B'의 PARENT 아이템이라 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;즉 더이상 업그레이드 할 수 없는 =&amp;gt; ROOT 아이템을 구하여라 라는 의미이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;PARENT_ITEM_ID가 ITEM_ID로 업그레이드 되는 것이라는 순서를 헷갈리면 안된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;두 개의 테이블 ITME_INFO와 ITEM_TREE가 주어지는데 두개를 join할 필요는 없다. where절에서 서브 쿼리로 처리하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #263747; text-align: left;&quot;&gt;코드&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1756479575951&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT ITEM_ID, ITEM_NAME, RARITY
FROM ITEM_INFO
WHERE ITEM_ID NOT IN (
    SELECT PARENT_ITEM_ID
    FROM ITEM_TREE
    WHERE PARENT_ITEM_ID IS NOT NULL
)
ORDER BY ITEM_ID DESC;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;WHERE 절은 NOT IN 으로 처리하기&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DB &amp;amp; SQL</category>
      <category>MySQL</category>
      <category>업그레이드 할 수 없는 아이템 구하기</category>
      <author>hyunlulu</author>
      <guid isPermaLink="true">https://hyunlulu.tistory.com/138</guid>
      <comments>https://hyunlulu.tistory.com/entry/MySQL-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-273712-%EC%97%85%EA%B7%B8%EB%A0%88%EC%9D%B4%EB%93%9C-%ED%95%A0-%EC%88%98-%EC%97%86%EB%8A%94-%EC%95%84%EC%9D%B4%ED%85%9C-%EA%B5%AC%ED%95%98%EA%B8%B0#entry138comment</comments>
      <pubDate>Sat, 30 Aug 2025 00:03:22 +0900</pubDate>
    </item>
    <item>
      <title>[코테 챌린지 6일차] TIL 프로그래머스 JadenCase 문자열 만들기</title>
      <link>https://hyunlulu.tistory.com/entry/%EC%BD%94%ED%85%8C-%EC%B1%8C%EB%A6%B0%EC%A7%80-6%EC%9D%BC%EC%B0%A8-TIL-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-JadenCase-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로그래머스 12951 : JadenCase&amp;nbsp;문자열&amp;nbsp;만들기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12951&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/12951&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1754900674537&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12951&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bbOu61/hyZygOCGlb/FgXMdkVy0iRHevpS80Mqq0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/eAAOL9/hyZyr3GrMn/fxXX3K1ScuNO4mqACKetkk/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12951&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12951&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bbOu61/hyZygOCGlb/FgXMdkVy0iRHevpS80Mqq0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/eAAOL9/hyZyr3GrMn/fxXX3K1ScuNO4mqACKetkk/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;문자열의 각 단어를 &quot;JadenCase&quot; 형태로 바꾸는 문자열 처리 문제&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;시간 복잡도:&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;O(N)&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;풀이&lt;/h3&gt;
&lt;pre id=&quot;code_1754900596130&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine(); // 문자열 입력받기
        System.out.println(new Solution().solution(s));
    }

    public String solution(String s) {
        // 결과를 저장할 StringBuilder
        StringBuilder result = new StringBuilder();
        
        // 문자열의 각 문자에 대해 처리
        boolean isNewWord = true;
        for (char ch : s.toCharArray()) {
            if (Character.isWhitespace(ch)) {
                // 공백이면 결과에 추가
                result.append(ch);
                isNewWord = true; // 다음 문자가 단어의 시작일 수 있음을 나타냄
            } else {
                if (isNewWord) {
                    // 새 단어의 첫 문자일 때
                    result.append(Character.toUpperCase(ch));
                    isNewWord = false;
                } else {
                    // 단어의 나머지 문자일 때
                    result.append(Character.toLowerCase(ch));
                }
            }
        }
        
        return result.toString();
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>hyunlulu</author>
      <guid isPermaLink="true">https://hyunlulu.tistory.com/124</guid>
      <comments>https://hyunlulu.tistory.com/entry/%EC%BD%94%ED%85%8C-%EC%B1%8C%EB%A6%B0%EC%A7%80-6%EC%9D%BC%EC%B0%A8-TIL-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-JadenCase-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%A7%8C%EB%93%A4%EA%B8%B0#entry124comment</comments>
      <pubDate>Mon, 11 Aug 2025 09:49:39 +0900</pubDate>
    </item>
    <item>
      <title>[코테 챌린지 4일차] TIL 백준 18126 : 너구리 구구</title>
      <link>https://hyunlulu.tistory.com/entry/%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B5%AC%EC%A1%B0-%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B5%AC%EC%A1%B0-%EA%B4%80%EB%A0%A8-%EC%A3%BC%EC%9A%94-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;백준&amp;nbsp;18126&amp;nbsp;:&amp;nbsp;너구리&amp;nbsp;구구&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/18126&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/18126&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;입구를 포함한 모든 방은 1부터 N까지의 번호가 있고, 입구는 1번이다. &lt;br /&gt;구구의 집으로 들어가는 입구는 한 개이며 입구과 모든 방들은 총 N-1개의 길로 서로 오고 갈 수&amp;nbsp;있다.&lt;br /&gt;구구는 무더운 여름 햇살을 피해 최대한 입구에서 먼 방에 아이스크림을 숨기려고 한다.&lt;br /&gt;&lt;br /&gt;구구가 집 입구에서 멜론아 아이스크림을 숨기려고 하는 방까지 이동하는 거리를 구하여라.&lt;br /&gt;&lt;br /&gt;*입력조건*&lt;br /&gt;첫째 줄에 정수&amp;nbsp;N(1 &amp;le;&amp;nbsp;N&amp;nbsp;&amp;le; 5,000)이 주어진다.&lt;br /&gt;다음&amp;nbsp;N-1개의 줄에 구구의 집의 모든 길의 정보가 정수&amp;nbsp;A,&amp;nbsp;B,&amp;nbsp;C(1 &amp;le;&amp;nbsp;A,&amp;nbsp;B&amp;nbsp;&amp;le;&amp;nbsp;N, 1 &amp;le;&amp;nbsp;C&amp;nbsp;&amp;le; 1,000,000,000)로 주어진다.&lt;br /&gt;A번 방과&amp;nbsp;B번 방 사이를 양방향으로 연결하는 길의 길이가&amp;nbsp;C임을 의미한다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;접근 방법&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방이 연결되어있다는 건 결국 그래프 형태로 볼 수 있다. 그리고 최대한 먼 방에 숨긴다고 했으니 DFS가 효과적일 것이라고 생각을 했다. 나는 visited 배열을 선언하고 2차원 배열을 탐색하는 방식을 선택했다. 이런 방식이 직관적이기도 하고 편해서 많이 선택하는 편이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같은 방식으로 채점해보면 480ms 정도 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+) 다른 풀이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 풀 때는 이 방식을 선택했지만, 애초에 완전한 map 형태로 주어진 것이 아니기 때문에 노드형식이면 인접리스트로 판단하는 편이 더 풀이가 간단할 수 있다. 실제로 이렇게 푼 분들 코드를 보니 시간이 200ms 이하로 나온다.&lt;/p&gt;
&lt;pre id=&quot;code_1754899647229&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.lang.*;
import java.io.*;

class Main {

    static int[][] arr;
    static int n;
    static boolean[] visited;
    static long distance = 0;
    
    public static void main(String[] args) throws IOException {
        
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        n = Integer.parseInt(br.readLine());

        arr = new int[n-1][3];
        visited = new boolean[n+1]; // 인덱스와 방 숫자 일치시키기 위해 n+1

        for(int i=0; i&amp;lt;n-1; i++){
            StringTokenizer st = new StringTokenizer(br.readLine());
            for(int j=0; j&amp;lt;3; j++){
                arr[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        dfs(1, 0);

        System.out.println(distance);
    }

    public static void dfs(int node, long sum){
        visited[node] = true;
        distance = Math.max(distance, sum);

        for(int i=0; i&amp;lt; n-1; i++){
            if(arr[i][0] == node &amp;amp;&amp;amp; !visited[arr[i][1]]){
                dfs(arr[i][1], sum + arr[i][2]);
            }else if(arr[i][1] == node &amp;amp;&amp;amp; !visited[arr[i][0]]){
                dfs(arr[i][0], sum + arr[i][2]);
            }
           
        }
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <category>18126 java</category>
      <category>백준 18126</category>
      <author>hyunlulu</author>
      <guid isPermaLink="true">https://hyunlulu.tistory.com/122</guid>
      <comments>https://hyunlulu.tistory.com/entry/%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B5%AC%EC%A1%B0-%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B5%AC%EC%A1%B0-%EA%B4%80%EB%A0%A8-%EC%A3%BC%EC%9A%94-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC#entry122comment</comments>
      <pubDate>Thu, 7 Aug 2025 23:28:35 +0900</pubDate>
    </item>
    <item>
      <title>[코테 챌린지 3일차] TIL 백준 2437 : 저울</title>
      <link>https://hyunlulu.tistory.com/entry/%EC%BD%94%ED%85%8C-%EC%B1%8C%EB%A6%B0%EC%A7%80-3%EC%9D%BC%EC%B0%A8-TIL-%EB%B0%B1%EC%A4%80-2437-%EC%A0%80%EC%9A%B8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;3일차&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot;&gt;2025.08.06 (수)&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot;&gt;백준 2437 : 저울 (골드 2)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 : 여러개의 추를 입력받아,&amp;nbsp;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;추들로 측정할 수 없는 양의 정수 무게 중 최솟값을 구해라&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;딱 보고 그리디?라는 생각이 들긴했는데 처음에 접근한 방식은 추의 합으로 만들 수 있는 최대 값(maxSum)을 구해고, for문 돌면서 1부터 maxSum까지 탐색하면서 합을 만들 수 있는지 판단하는 방식이었다. 이렇게 되면 최악의 경우 10억 번 연산이 되어버린다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;그렇다면 판단하는 로직을 백트래킹으로 바꾸면 가능한가? 이것도 시간 초과다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;그냥 그리디 알고리즘에 집중해서 푸는게 맞다. 그리고 풀이도 엄청 간단해진다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;시간 복잡도 :&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;O(N log N)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;만들 수 없는 첫 번째 무게는 그 시점의 누적합보다 큰 추를 만났을 때 결정 &lt;/span&gt;&lt;/u&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1754446085561&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.lang.*;
import java.io.*;

class Main {

    static int N;
    static long result;
    static int maxSum;
    static int[] arr; // 추들의 무게를 저장 할 배열
    static boolean makeSum;
    
    public static void main(String[] args) throws IOException {

        // 배열로 추들을 입력받기
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());

        arr = new int[N];

        StringTokenizer st = new StringTokenizer(br.readLine());
        for(int i=0; i&amp;lt;N; i++){
            arr[i] = Integer.parseInt(st.nextToken());
        }

        Arrays.sort(arr); // 오름차순 정렬

        result = 1; // 만들 수 없는 최소값

        for (int i = 0; i &amp;lt; N; i++) {
            if (arr[i] &amp;gt; result) {
                break;
            }
            result += arr[i];
        }

        // 출력
        System.out.println(result);
    }    
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <category>2437 java</category>
      <category>백준 2437</category>
      <author>hyunlulu</author>
      <guid isPermaLink="true">https://hyunlulu.tistory.com/121</guid>
      <comments>https://hyunlulu.tistory.com/entry/%EC%BD%94%ED%85%8C-%EC%B1%8C%EB%A6%B0%EC%A7%80-3%EC%9D%BC%EC%B0%A8-TIL-%EB%B0%B1%EC%A4%80-2437-%EC%A0%80%EC%9A%B8#entry121comment</comments>
      <pubDate>Wed, 6 Aug 2025 11:09:28 +0900</pubDate>
    </item>
    <item>
      <title>[코테 챌린지 2일차] TIL 백준 2468 : 안전 영역</title>
      <link>https://hyunlulu.tistory.com/entry/%EC%9E%91%EC%8B%AC%ED%81%B0%EC%9D%BC-%EC%BD%94%ED%85%8C-%EC%B1%8C%EB%A6%B0%EC%A7%80-2%EC%9D%BC%EC%B0%A8-TIL-%EB%B0%B1%EC%A4%80-2468-%EC%95%88%EC%A0%84-%EC%98%81%EC%97%AD</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;2일차&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot;&gt;2025.08.05(화)&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot;&gt;백준 2468 : 안전 영역&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot;&gt;dfs로 덩어리를 조사하면 된다. 풀다가 좀 헷갈려서 dfs 구현을 해당 풀이처럼 직관적으로 보이게 작성했다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1754372595323&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.lang.*;
import java.io.*;

class Main {

    static int[][] map;
    static boolean[][] visited;
    static int N;
    static int max; // 결과값
    static int count;
    
    public static void main(String[] args) throws IOException {
        // 비가 올 수 있는 양은 1부터 9. 각 경우의 안전지대 개수를 탐색하면서 최대값이 나오면 갱신
        // N은 2 이상 100 이하의 정수

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        N = Integer.parseInt(br.readLine());

        map = new int[N][N];
        int maxHeight = 0;

        for(int i=0; i&amp;lt;N; i++){
            StringTokenizer st = new StringTokenizer(br.readLine());
            for(int j=0; j&amp;lt;N; j++){
                map[i][j] = Integer.parseInt(st.nextToken());
                maxHeight = Math.max(maxHeight, map[i][j]);
            }
        }

        max = 1;

        for(int h=1; h&amp;lt;=maxHeight; h++){ // 비가 오는 정도
            visited = new boolean[N][N]; // 이 안에서 항상 초기화
            count = 0;

            for (int i = 0; i &amp;lt; N; i++) {
                for (int j = 0; j &amp;lt; N; j++) {
                    if (!visited[i][j] &amp;amp;&amp;amp; map[i][j] &amp;gt; h) {
                        dfs(i, j, h);
                        count++;
                    }
                }
            }

            max = Math.max(max, count);
        }

        System.out.println(max);
        
    }

    public static void dfs(int x, int y, int h){ // 덩어리를 조사하면서 count++
         visited[x][y] = true;

        if (x-1 &amp;gt;= 0 &amp;amp;&amp;amp; !visited[x-1][y] &amp;amp;&amp;amp; map[x-1][y] &amp;gt; h) {
            dfs(x - 1, y, h);
        }

        if (x+1 &amp;lt; N &amp;amp;&amp;amp; !visited[x+1][y] &amp;amp;&amp;amp; map[x+1][y] &amp;gt; h) {
            dfs(x+1, y, h);
        }

        if (y-1 &amp;gt;= 0 &amp;amp;&amp;amp; !visited[x][y-1] &amp;amp;&amp;amp; map[x][y-1] &amp;gt; h) {
            dfs(x, y-1, h);
        }

        if (y+1 &amp;lt; N &amp;amp;&amp;amp; !visited[x][y+1] &amp;amp;&amp;amp; map[x][y+1] &amp;gt; h) {
            dfs(x, y+1, h);
        }
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>hyunlulu</author>
      <guid isPermaLink="true">https://hyunlulu.tistory.com/120</guid>
      <comments>https://hyunlulu.tistory.com/entry/%EC%9E%91%EC%8B%AC%ED%81%B0%EC%9D%BC-%EC%BD%94%ED%85%8C-%EC%B1%8C%EB%A6%B0%EC%A7%80-2%EC%9D%BC%EC%B0%A8-TIL-%EB%B0%B1%EC%A4%80-2468-%EC%95%88%EC%A0%84-%EC%98%81%EC%97%AD#entry120comment</comments>
      <pubDate>Tue, 5 Aug 2025 14:43:18 +0900</pubDate>
    </item>
    <item>
      <title>[코테 챌린지 1일차] TIL 백준 1929 : 소수 구하기</title>
      <link>https://hyunlulu.tistory.com/entry/TIL-1%EC%9D%BC%EC%B0%A8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;챌린지 기간 : 2025.08.04(월) ~ 2025.08.15(금)&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비기너, 미들러, 챌린저 중에 미들러를 선택했다. 목표는 꾸준히 풀고, 내 풀이에 대한 개념을 잘 정리하기다!&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;1일차&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;2025.08.04(월)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;백준 1929 : 소수 구하기 (실버3)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1929&quot;&gt;https://www.acmicpc.net/problem/1929&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;M과 N을 입력받고 &lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;M이상 N이하의 소수를 모두 출력하는 문제다. 소수 찾기 문제는 간단하지만서도 꼭 기억해둬야 할만한 부분인 것 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;핵심은 소수 탐색 범위이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;입력값 범위 : (1 &amp;le; M &amp;le; N &amp;le; 1,000,000)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;시간 제한 : 2초&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;100만인 경우에 1부터 100만 까지 탐색하는 건 굉장히 비효율적이다. 100만 * 100만인 경우, 시간초과 가능성도 존재한다. 그러므로 소수를 탐색하되, 1부터 제곱근까지의 값을 탐색하는 것이다. Math.sqrt() 를 써서 제곱근까지 탐색하면 소수 여부를 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1754320388280&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.lang.*;
import java.io.*;

// M이상 N이하의 소수를 모두 출력
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int M = Integer.parseInt(st.nextToken());
        int N = Integer.parseInt(st.nextToken());

        ArrayList&amp;lt;Integer&amp;gt; list = new ArrayList&amp;lt;&amp;gt;();

        for(int i=M; i&amp;lt;=N; i++){
            if(i&amp;lt;2)
                continue;
            boolean isPrime = true;

            for(int j=2; j&amp;lt;=Math.sqrt(i); j++){
                if(i % j == 0){
                    isPrime = false;
                    break;
                }
            }

            if(isPrime){
                list.add(i);
            }
        }

        for(int i=0; i&amp;lt;list.size(); i++){
            System.out.println(list.get(i));
        }

    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 List를 활용해서 추가와 출력을 해주면 된다~&lt;/p&gt;</description>
      <category>알고리즘</category>
      <author>hyunlulu</author>
      <guid isPermaLink="true">https://hyunlulu.tistory.com/119</guid>
      <comments>https://hyunlulu.tistory.com/entry/TIL-1%EC%9D%BC%EC%B0%A8#entry119comment</comments>
      <pubDate>Mon, 4 Aug 2025 23:50:39 +0900</pubDate>
    </item>
    <item>
      <title>[백준/JAVA] 12865_평범한 배낭</title>
      <link>https://hyunlulu.tistory.com/entry/%EB%B0%B1%EC%A4%80JAVA-12865%ED%8F%89%EB%B2%94%ED%95%9C-%EB%B0%B0%EB%82%AD</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/12865&quot;&gt;https://www.acmicpc.net/problem/12865&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배낭 문제라고 알려져 있는 매우 유명한 문제다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*유튜브에서 발견한 상세한 풀이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=V2vJp0GY-Fg&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=V2vJp0GY-Fg&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제와 접근&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;물품의 수 N(1 &amp;le; N &amp;le; 100)와 버틸 수 있는 무게 K(1 &amp;le; K &amp;le; 100,000)가 주어지고,&lt;br /&gt;N개의 줄에 거쳐 각 물건의 무게 W(1 &amp;le; W &amp;le; 100,000)와 해당 물건의 가치 V(0 &amp;le; V &amp;le; 1,000)가 주어진다.&lt;br /&gt;&lt;br /&gt;배낭에 넣을 수 있는 물건들의 가치합의 최댓값을 출력해라&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;조합을 구하는 문제라고 생각했기에 완전탐색, 그리디, DP를 고려해봤다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;1. 완전탐색 - 불가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;우선 물품 N개의 수가 100개라 하더라도 1개 구하는 경우, 2개 구하는 경우 ~ 100개 구하는 경우까지 늘어난다면 엄청난 수가 될 것이고 시간 초과 문제가 발생할 것이다.&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;2. 그리디 - 불가능&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;그리디로 접근하면 여러가지 조합의 경우를 고려할 수가 없다. 무게 합이 7인 경우 1,6 / 2,5 이런 경우들을 다 구해서 비교할 수가 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;3. DP(다이나믹 프로그래밍) - 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;이차원 dp 배열을 선언해서 가능한 경우를 비교해간다.&lt;/span&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;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dp 배열 - 행은 i(무게와 가치 배열의 인덱스), 열은 만들어야 할 무게&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 97.3256%; height: 367px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 15.5317%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 6.69055%; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 15.5317%; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 6.69055%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 15.5317%; height: 17px;&quot;&gt;1&lt;br /&gt;무게 6 가치 13&lt;/td&gt;
&lt;td style=&quot;width: 6.69055%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;13&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 15.5317%; height: 17px;&quot;&gt;2&lt;br /&gt;무게 4 가치 8&lt;/td&gt;
&lt;td style=&quot;width: 6.69055%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;8&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;8&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;13&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 15.5317%; height: 17px;&quot;&gt;3&lt;br /&gt;무게 3 가치 6&lt;/td&gt;
&lt;td style=&quot;width: 6.69055%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;8&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;8&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;13&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 15.5317%; height: 17px;&quot;&gt;4&lt;br /&gt;무게 5 가치 12&lt;/td&gt;
&lt;td style=&quot;width: 6.69055%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;8&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;12&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;13&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; height: 17px;&quot;&gt;14&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;점화식&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;dp[i][j]&amp;nbsp;=&amp;nbsp;Math.max(dp[i-1][j],&amp;nbsp;dp[i-1][j-w[i]]+v[i])&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드&lt;/h3&gt;
&lt;pre id=&quot;code_1756729805988&quot; class=&quot;reasonml&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;import java.util.*;
import java.lang.*;
import java.io.*;

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

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

        int n = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());

        int[] w = new int[n+1];
        int[] v = new int[n+1];

        for(int i=0; i&amp;lt;n; i++){
            st = new StringTokenizer(br.readLine());
            w[i+1] = Integer.parseInt(st.nextToken());
            v[i+1] = Integer.parseInt(st.nextToken());
        }

        int[][] dp = new int[n+1][k+1];

        for(int i=1; i&amp;lt;n+1; i++){
            for(int j=1; j&amp;lt;k+1; j++){
                if(w[i] &amp;lt;= j){
                    dp[i][j] = Math.max(dp[i-1][j], dp[i-1][j-w[i]]+v[i]);
                }else{
                    dp[i][j] = dp[i-1][j];
                }
                
            }
        }

        System.out.println(dp[n][k]);

        
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <category>12865 java</category>
      <category>배낭 java</category>
      <author>hyunlulu</author>
      <guid isPermaLink="true">https://hyunlulu.tistory.com/117</guid>
      <comments>https://hyunlulu.tistory.com/entry/%EB%B0%B1%EC%A4%80JAVA-12865%ED%8F%89%EB%B2%94%ED%95%9C-%EB%B0%B0%EB%82%AD#entry117comment</comments>
      <pubDate>Mon, 28 Jul 2025 15:43:35 +0900</pubDate>
    </item>
    <item>
      <title>[K8S] CKA 주요 개념 / 헷갈리는 개념 정리</title>
      <link>https://hyunlulu.tistory.com/entry/K8S-CKA-%EC%A3%BC%EC%9A%94-%EA%B0%9C%EB%85%90-%ED%97%B7%EA%B0%88%EB%A6%AC%EB%8A%94-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Deployment와 Pod의 관계&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Pod&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;쿠버네티스에서 가장 작은 배포 단위&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;자체적으로 복구 불가&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;커맨드 : &lt;span style=&quot;background-color: #eeeeee;&quot;&gt;kubectl run &amp;lt;Pod이름&amp;gt; --image=&amp;lt;이미지&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Deployment&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Pod를 생성하고 관리하는 상위 추상 개념 (일반적으로 많이 사용하는 개념!)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Pod의 수명 주기를 관리해주는 운영 자동화 도구라고 볼 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;원하는 개수(Replica)의 Pod를 유지해주며, 장애 복구, 롤링 업데이트, 버전 관리 등의 기능을 제공&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;커맨드 : &lt;span style=&quot;background-color: #eeeeee;&quot;&gt;kubectl create deployment &amp;lt;이름&amp;gt; --image=&amp;lt;이미지&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;kubectl을 통해서 Deployment를 만들면 내부적으로 이렇다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Deployment&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ㄴ-- ReplicaSet&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ㄴ-- Pod(s)&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Deployment는 &lt;b&gt;목표 상태(desired state)&lt;/b&gt; 를 정의&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;ReplicaSet은 &lt;b&gt;Pod의 수를 보장하고 Pod를 실제로 생성하는 역할&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;➡️ 결국 kubectl get pod는 Deployment로 생성한 Pod를 보여주는 것&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;관련 커맨드&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1749873621705&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl get deploy   # Deploy 목록
kubectl get rs  # ReplicaSet 목록
kubectl get pod   # Pod 목록&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Deployment 생성하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;--dry-o=client는 실제 deployment가 적용되지 않는다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: #eeeeee;&quot;&gt;kubectl apply -f &amp;lt;yaml 파일 이름&amp;gt;&lt;/span&gt; 을 실행하면 Deployment가 만든 Pod들이 보여진다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Replica의 크기를 변경하고 싶다면&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #eeeeee; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;kubectl scale deployment &amp;lt;deploy 이름&amp;gt; --replicas=&amp;lt;개수&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Create Deployment&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Create a new deployment called myproject, with iamge nginx:1.16 and 1 replica. Next upgrade the deployment to version 1.17 using rolling update.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Make sure that the version upgrade is rcorded in the resource annotation.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1749876039059&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl create deployment myproject --image=nginx:1.16 --replicas=1
kubectl describe deployment myproject&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;버전 Upgrade를 위해 kubectl Cheat Sheet에서 set image 찾기&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1749876029495&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# version upgrade is rcorded in the resource annotation 조건 존재, --record도 포함 필요
kubectl set image deployment/myproject nginx=nginx:1.17 --record

# history 확인
Kubectl rollout history deployment myproject&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Deploy a web-nginx pod using the nginx:1.17 image with the labels set to tier=web-app.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;kubectl&amp;nbsp;run&amp;nbsp;web-nginx&amp;nbsp;--image=nginx:1.17&amp;nbsp;--labels&amp;nbsp;tier=web-app&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;kubectl&amp;nbsp;get&amp;nbsp;pods&amp;nbsp;--show-labels&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Static Pod&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Static pod는 특정 node또는 특정 kubelet에 바인딩된 pod&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Static Pod는 쿠버네티스(Kubernetes)에서 kubelet이 직접 관리하는 Pod를 말합니다. 일반적인 Pod는 API 서버를 통해 생성되지만, Static Pod는 API 서버 없이도 kubelet이 직접 실행하고 관리&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Deployment나 ReplicaSet과 무관함. 컨트롤러가 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Static Pod는 Co&lt;b&gt;ntrol Plane이 아니라 Node의 kubelet이 직접 관리&lt;/b&gt;하기 때문에, kubectl apply를 하지 않아도 해당 노드에 정의된 YAML 파일만 있으면 자동으로 실행됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Static Pod 문제&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Create a static pod on node01 called static-pod with image image nginx and you have to make sure that it is recreated/restarted automatically of any failure happens.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1749878416601&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ssh node01
vi /etc/kubernetes/manifests/static-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: static-pod
  labels:
    app: nginx
spec:
  restartPolicy: Always
  containers:
  - name: nginx
    image: nginx
# kubelet이 이 파일을 감지하고 해당 Pod 실행, 별도의 apply 커맨드 필요가 없음

# 다시 controlplane으로 돌아와서
kubectl get pods -o wide&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Kustomize&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;# 디렉토리 구조 확인&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;ls -R /root/kustomize&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fcfcfc; color: #666666; text-align: left; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;# 예시&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1750160109624&quot; class=&quot;stylus&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;my-kustomize/
├── base/
│   ├── deployment.yaml
│   ├── service.yaml
│   └── kustomization.yaml
└── overlays/
    └── prod/
        ├── kustomization.yaml
        └── deployment-patch.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1750160404207&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# base 폴더 안의 파일들은 이미 존재한다.

vi /root/kustomize/overlays/dev/deployment-patch.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app    # base에 있는 Deployment 이름과 일치해야 함
spec:
  replicas: 5

vi /root/kustomize/overlays/dev/kustomization.yaml

resources:
  - ../../base

patchesStrategicMerge:
  - deployment-patch.yaml


# 적용
kubectl apply -k overlays/prod

# 제출용
kubectl kustomize overlays/prod &amp;gt; /root.final.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Docker &amp;amp; Kubernetes</category>
      <author>hyunlulu</author>
      <guid isPermaLink="true">https://hyunlulu.tistory.com/106</guid>
      <comments>https://hyunlulu.tistory.com/entry/K8S-CKA-%EC%A3%BC%EC%9A%94-%EA%B0%9C%EB%85%90-%ED%97%B7%EA%B0%88%EB%A6%AC%EB%8A%94-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC#entry106comment</comments>
      <pubDate>Sat, 14 Jun 2025 13:09:54 +0900</pubDate>
    </item>
  </channel>
</rss>