<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>차차의 DevLog</title>
    <link>https://cha-coding.tistory.com/</link>
    <description>안녕하세요 성장하는 차차의 기술 블로그입니다.</description>
    <language>ko</language>
    <pubDate>Sun, 28 Jun 2026 18:03:37 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>차차월드</managingEditor>
    <image>
      <title>차차의 DevLog</title>
      <url>https://tistory1.daumcdn.net/tistory/5752114/attach/9632fac7a581413b9d7de8919db6ddf2</url>
      <link>https://cha-coding.tistory.com</link>
    </image>
    <item>
      <title>[구름톤 챌린지] Week3 - Day14 학습일기 (작은 노드)</title>
      <link>https://cha-coding.tistory.com/entry/%EA%B5%AC%EB%A6%84%ED%86%A4-%EC%B1%8C%EB%A6%B0%EC%A7%80-Week3-Day14-%ED%95%99%EC%8A%B5%EC%9D%BC%EA%B8%B0-%EC%9E%91%EC%9D%80-%EB%85%B8%EB%93%9C</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  문제&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;847&quot; data-origin-height=&quot;807&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dPViFJ/btssNrC5Smq/HUpZGKKTPKuKcOFidlzIf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dPViFJ/btssNrC5Smq/HUpZGKKTPKuKcOFidlzIf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dPViFJ/btssNrC5Smq/HUpZGKKTPKuKcOFidlzIf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdPViFJ%2FbtssNrC5Smq%2FHUpZGKKTPKuKcOFidlzIf0%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;847&quot; height=&quot;807&quot; data-origin-width=&quot;847&quot; data-origin-height=&quot;807&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;845&quot; data-origin-height=&quot;824&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k3tEL/btssNkjCgwf/jC1RrZ6E1WkzIUkqSMYw5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k3tEL/btssNkjCgwf/jC1RrZ6E1WkzIUkqSMYw5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k3tEL/btssNkjCgwf/jC1RrZ6E1WkzIUkqSMYw5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk3tEL%2FbtssNkjCgwf%2FjC1RrZ6E1WkzIUkqSMYw5K%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;845&quot; height=&quot;824&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;824&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;843&quot; data-origin-height=&quot;311&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUQ9f6/btssS4NCdKm/kqgVB4We4eCpRWSuNN78O1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUQ9f6/btssS4NCdKm/kqgVB4We4eCpRWSuNN78O1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUQ9f6/btssS4NCdKm/kqgVB4We4eCpRWSuNN78O1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUQ9f6%2FbtssS4NCdKm%2FkqgVB4We4eCpRWSuNN78O1%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;843&quot; height=&quot;311&quot; data-origin-width=&quot;843&quot; data-origin-height=&quot;311&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt; &amp;nbsp;문제풀이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래프 문제이다.&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;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GkUqA/btssS2WC2gU/O2EZTZnNOwb5frv3tRzObk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GkUqA/btssS2WC2gU/O2EZTZnNOwb5frv3tRzObk/img.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;375&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;47.63&quot; style=&quot;width: 47.0719%; margin-right: 10px;&quot; height=&quot;249&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GkUqA/btssS2WC2gU/O2EZTZnNOwb5frv3tRzObk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGkUqA%2FbtssS2WC2gU%2FO2EZTZnNOwb5frv3tRzObk%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;500&quot; height=&quot;375&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wuIOf/btssZgs9Rxb/65EQ5e2hK627qjjpOb6XVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wuIOf/btssZgs9Rxb/65EQ5e2hK627qjjpOb6XVK/img.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;341&quot; data-is-animation=&quot;false&quot; style=&quot;width: 51.7653%;&quot; data-widthpercent=&quot;52.37&quot; height=&quot;232&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wuIOf/btssZgs9Rxb/65EQ5e2hK627qjjpOb6XVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwuIOf%2FbtssZgs9Rxb%2F65EQ5e2hK627qjjpOb6XVK%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;500&quot; height=&quot;341&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&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;인접행렬은 어떤 두 정점이 연결되어 있는지를 2차원 배열에다가 나타내는 방식이다. 정점 개수가 적고(간선 수가 많거나), 노드 간 연결 여부를 자주 확인해야 하는 경우에 유용하다.&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;한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5F8C3/btssJkkgQK1/AKiR3ZW5yaechZKkkdvUgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5F8C3/btssJkkgQK1/AKiR3ZW5yaechZKkkdvUgk/img.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;222&quot; data-is-animation=&quot;false&quot; width=&quot;509&quot; height=&quot;226&quot; data-widthpercent=&quot;54.62&quot; style=&quot;width: 53.9856%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5F8C3/btssJkkgQK1/AKiR3ZW5yaechZKkkdvUgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5F8C3%2FbtssJkkgQK1%2FAKiR3ZW5yaechZKkkdvUgk%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;500&quot; height=&quot;222&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pX7Yn/btssOqSaMYn/kyEJ7JSbIuUpXaJ89Nu5i0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pX7Yn/btssOqSaMYn/kyEJ7JSbIuUpXaJ89Nu5i0/img.png&quot; data-origin-width=&quot;1104&quot; data-origin-height=&quot;590&quot; data-is-animation=&quot;false&quot; style=&quot;width: 44.8516%;&quot; data-widthpercent=&quot;45.38&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pX7Yn/btssOqSaMYn/kyEJ7JSbIuUpXaJ89Nu5i0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpX7Yn%2FbtssOqSaMYn%2FkyEJ7JSbIuUpXaJ89Nu5i0%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;1104&quot; height=&quot;590&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;인접리스트 / 인접행렬&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1693556837728&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.util.*;
// 인접리스트
class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // 그래프 정보 입력 받기
        int N = Integer.parseInt(br.readLine()); // 정점 개수
        int M = Integer.parseInt(br.readLine()); // 간선 개수
        int st = Integer.parseInt(br.readLine());
        Map&amp;lt;Integer, List&amp;lt;Integer&amp;gt;&amp;gt; graph = new HashMap&amp;lt;&amp;gt;();

        for (int i = 0; i &amp;lt; M; i++) {
            String[] line = br.readLine().split(&quot; &quot;);
            int s = Integer.parseInt(line[0]);
            int e = Integer.parseInt(line[1]);

            // 양방향 간선 처리
            graph.get(s).add(e);
            graph.get(e).add(s);
        }
        
        System.out.println(graph);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  제출코드&lt;/h2&gt;
&lt;pre id=&quot;code_1693641117925&quot; class=&quot;reasonml&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.*;
import java.util.*;

class Main {
    public static void main(String[] args) throws Exception {
        System.setIn(new FileInputStream(&quot;src/input.txt&quot;));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // 그래프 정보 입력 받기
        String[] line = br.readLine().split(&quot; &quot;);
        int N = Integer.parseInt(line[0]); // 정점 개수
        int M = Integer.parseInt(line[1]); // 간선 개수
        int K = Integer.parseInt(line[2]); // 시작 정점의 번호

        Map&amp;lt;Integer, List&amp;lt;Integer&amp;gt;&amp;gt; graph = new HashMap&amp;lt;&amp;gt;();

        for (int i = 0; i &amp;lt; M; i++) {
            line = br.readLine().split(&quot; &quot;);
            int s = Integer.parseInt(line[0]);
            int e = Integer.parseInt(line[1]);

            // 노드의 존재 여부 확인 후 그래프에 추가
            if (!graph.containsKey(s)) {
                graph.put(s, new ArrayList&amp;lt;&amp;gt;());
            }

            if (!graph.containsKey(e)) {
                graph.put(e, new ArrayList&amp;lt;&amp;gt;());
            }

            graph.get(s).add(e);
            graph.get(e).add(s);
        }

        // 방문한 노드를 기록하기 위한 배열 초기화
        int[] visited = new int[N + 1];
        Queue&amp;lt;Integer&amp;gt; q = new LinkedList&amp;lt;&amp;gt;();
        q.add(K);  // 시작 노드를 큐에 추가

        int answer = 0;   // 방문한 정점 개수를 저장하는 변수
        int currentNode = K;   // 마지막으로 방문한 정점 번호를 저장하는 변수

        // 탐색할 수 있는 노드가 있을 때까지 탐색
        while (!q.isEmpty()) {
            currentNode = q.poll();
            visited[currentNode]++; // 방문체크
            answer++; // 정점을 방문할 때마다 답을 1씩 증가

            // 가장 작은 정점의 번호를 다음 방문 정점으로 선택하기 위해서 후보를 정렬.
            List&amp;lt;Integer&amp;gt; tempNodes = graph.get(currentNode);
            if (tempNodes != null &amp;amp;&amp;amp; !tempNodes.isEmpty()) {
                Collections.sort(tempNodes);   // 연결된 노드들을 오름차순으로 정렬
                for (int nextNode : tempNodes) {
                    // 방문할 수 있는 정점이 나오면, 반복문을 탈출.
                    if (visited[nextNode] == 0) {
                        q.add(nextNode);
                        break;
                    }
                }
            }
        }
        System.out.println(answer + &quot; &quot; + currentNode); // 방문한 정점의 개수와 마지막으로 방문한 정점 번호
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  후기&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1164&quot; data-origin-height=&quot;317&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qXgUs/btssSpLW0my/kQ4oh40eLJnma21KFcakwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qXgUs/btssSpLW0my/kQ4oh40eLJnma21KFcakwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qXgUs/btssSpLW0my/kQ4oh40eLJnma21KFcakwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqXgUs%2FbtssSpLW0my%2FkQ4oh40eLJnma21KFcakwk%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;845&quot; height=&quot;230&quot; data-origin-width=&quot;1164&quot; data-origin-height=&quot;317&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래프 까먹어서..ㅎ 그다음 날 해설지 보고 풀었다. 다시 개념 정리했으니 이제 그래프 문제도 해결가능! 그래프 문제 좀 많이 풀어봐야겠다. 3주차 완료. 마지막 4주차까지 파이팅 &lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  참고&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@roro/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B7%B8%EB%9E%98%ED%94%84-DFS-BFS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;그래프 / DFS / BFS&lt;/a&gt;&lt;/p&gt;</description>
      <category>ETC/구름톤 챌린지</category>
      <category>구름톤 챌린지</category>
      <author>차차월드</author>
      <guid isPermaLink="true">https://cha-coding.tistory.com/119</guid>
      <comments>https://cha-coding.tistory.com/entry/%EA%B5%AC%EB%A6%84%ED%86%A4-%EC%B1%8C%EB%A6%B0%EC%A7%80-Week3-Day14-%ED%95%99%EC%8A%B5%EC%9D%BC%EA%B8%B0-%EC%9E%91%EC%9D%80-%EB%85%B8%EB%93%9C#entry119comment</comments>
      <pubDate>Fri, 1 Sep 2023 16:00:07 +0900</pubDate>
    </item>
    <item>
      <title>[구름톤 챌린지] Week3 - Day12 학습일기 (발전기)</title>
      <link>https://cha-coding.tistory.com/entry/%EA%B5%AC%EB%A6%84%ED%86%A4-%EC%B1%8C%EB%A6%B0%EC%A7%80-Week3-Day12-%ED%95%99%EC%8A%B5%EC%9D%BC%EA%B8%B0-%EB%B0%9C%EC%A0%84%EA%B8%B0</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  문제&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;757&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KJonG/btssGgg46H1/BnnWk3jcBoNsPyC5PCmbfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KJonG/btssGgg46H1/BnnWk3jcBoNsPyC5PCmbfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KJonG/btssGgg46H1/BnnWk3jcBoNsPyC5PCmbfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKJonG%2FbtssGgg46H1%2FBnnWk3jcBoNsPyC5PCmbfK%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;844&quot; height=&quot;757&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;757&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;831&quot; data-origin-height=&quot;746&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cIIgpt/btssBlcmUCF/mEghfkUmKXEgAJR5MADAzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cIIgpt/btssBlcmUCF/mEghfkUmKXEgAJR5MADAzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cIIgpt/btssBlcmUCF/mEghfkUmKXEgAJR5MADAzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcIIgpt%2FbtssBlcmUCF%2FmEghfkUmKXEgAJR5MADAzK%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;831&quot; height=&quot;746&quot; data-origin-width=&quot;831&quot; data-origin-height=&quot;746&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt; &amp;nbsp;문제풀이&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;즉, BFS 방식을 이용해서 문제를 해결하면 된다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;BFS&amp;nbsp;(Breadth-First&amp;nbsp;Search,&amp;nbsp;너비&amp;nbsp;우선&amp;nbsp;탐색)&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;352&quot; data-origin-height=&quot;280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xi3J4/btssGByCkSR/vjpIiI43vMSkz5EMUWv7Ek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xi3J4/btssGByCkSR/vjpIiI43vMSkz5EMUWv7Ek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xi3J4/btssGByCkSR/vjpIiI43vMSkz5EMUWv7Ek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxi3J4%2FbtssGByCkSR%2FvjpIiI43vMSkz5EMUWv7Ek%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;352&quot; height=&quot;280&quot; data-origin-width=&quot;352&quot; data-origin-height=&quot;280&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BFS는 재귀적으로 동작하지 않고 방문한 노드들을 차례로 저장한 후 꺼낼 수 있는 &lt;s&gt;선입선출(FIFO, First In First Out) 방식인 큐(Queue) 자료구조를 사용하여 '넓게' 탐색&lt;/s&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시작 정점으로부터 가까운 정점을 먼저 방문하고 멀리 떨어져 있는 정점을 나중에 방문하기 때문에 주로 두 노드 사이의 최단 경로를 찾거나, 가장 짧은 경로를 찾는 문제에 주로 사용한다.&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  제출코드&lt;/h2&gt;
&lt;pre id=&quot;code_1693459267624&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int[][] town = new int[N][N]; // 마을의 상태를 저장하는 배열
        boolean[][] visited = new boolean[N][N]; // 방문 여부를 저장하는 배열

        for (int i = 0; i &amp;lt; N; i++) {
            String[] row = br.readLine().split(&quot; &quot;);
            for (int j = 0; j &amp;lt; N; j++) {
                town[i][j] = Integer.parseInt(row[j]);
            }
        }

        // 발전기 개수
        int count = 0;

        // 모든 좌표를 순회하면서 BFS 수행 : 모든 집 찾기!
        for (int i = 0; i &amp;lt; N; i++) {
            for (int j = 0; j &amp;lt; N; j++) {
                if (town[i][j] == 1 &amp;amp;&amp;amp; !visited[i][j]) { // 집이 있고 방문하지 않았다면
                    bfs(i, j, N, town, visited);
                    count++; // BFS가 끝나면 발전기 개수 증가
                }
            }
        }
        System.out.println(count);
    }

    public static void bfs(int x, int y, int n, int[][] town, boolean[][] visited) {
        // 상하좌우 이동
        int[] dx = {-1, 1, 0, 0};
        int[] dy = {0, 0, -1, 1};

        Queue&amp;lt;int[]&amp;gt; q = new LinkedList&amp;lt;&amp;gt;();
        q.offer(new int[]{x, y}); // 시작점 큐에 추가

        while (!q.isEmpty()) {
            int[] cur = q.poll();  // 현재 위치를 큐에서 가져옴

            for (int k = 4; k-- &amp;gt; 0; ) { // 상하좌우 이동 검사
                int nx = cur[0] + dx[k];
                int ny = cur[1] + dy[k];

                if (nx &amp;lt; 0 || ny &amp;lt; 0 || nx &amp;gt;= n || ny &amp;gt;= n) continue;  // 마을범위 밖이면 스킵

                if (town[nx][ny] == 1 &amp;amp;&amp;amp; !visited[nx][ny]) {  // 집이 있고 방문하지 않았다면
                    q.offer(new int[]{nx, ny});   // 다음 위치를 큐에 추가
                    visited[nx][ny] = true;   // 방문 처리
                }
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  후기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3주차는 탐색과 동적 프로그래밍 문제들이다. 확실히 1주차보다 문제들이 어렵다. 복습 열심히 해야지&lt;/p&gt;</description>
      <category>ETC/구름톤 챌린지</category>
      <category>구름톤 챌린지</category>
      <author>차차월드</author>
      <guid isPermaLink="true">https://cha-coding.tistory.com/118</guid>
      <comments>https://cha-coding.tistory.com/entry/%EA%B5%AC%EB%A6%84%ED%86%A4-%EC%B1%8C%EB%A6%B0%EC%A7%80-Week3-Day12-%ED%95%99%EC%8A%B5%EC%9D%BC%EA%B8%B0-%EB%B0%9C%EC%A0%84%EA%B8%B0#entry118comment</comments>
      <pubDate>Thu, 31 Aug 2023 14:08:38 +0900</pubDate>
    </item>
    <item>
      <title>[구름톤 챌린지] Week1 - Day5 학습일기 (이진수 정렬)</title>
      <link>https://cha-coding.tistory.com/entry/%EA%B5%AC%EB%A6%84%ED%86%A4-%EC%B1%8C%EB%A6%B0%EC%A7%80-Week1-Day5-%ED%95%99%EC%8A%B5%EC%9D%BC%EA%B8%B0-%EC%9D%B4%EC%A7%84%EC%88%98-%EC%A0%95%EB%A0%AC</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;  문제&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;833&quot; data-origin-height=&quot;707&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnOD3z/btsrB5U3nQb/x7lYO992Vou5ZRfG5nJ0mK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnOD3z/btsrB5U3nQb/x7lYO992Vou5ZRfG5nJ0mK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnOD3z/btsrB5U3nQb/x7lYO992Vou5ZRfG5nJ0mK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnOD3z%2FbtsrB5U3nQb%2Fx7lYO992Vou5ZRfG5nJ0mK%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;833&quot; height=&quot;707&quot; data-origin-width=&quot;833&quot; data-origin-height=&quot;707&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;839&quot; data-origin-height=&quot;680&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDHbGl/btsrErCQoAp/K8Hvv2smdwJHEI67fkI8s1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDHbGl/btsrErCQoAp/K8Hvv2smdwJHEI67fkI8s1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDHbGl/btsrErCQoAp/K8Hvv2smdwJHEI67fkI8s1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDHbGl%2FbtsrErCQoAp%2FK8Hvv2smdwJHEI67fkI8s1%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;839&quot; height=&quot;680&quot; data-origin-width=&quot;839&quot; data-origin-height=&quot;680&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt; &amp;nbsp;문제풀이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배열을 두 가지 조건으로 내림차순 정렬하는 것이 이 문제의 핵심이다.&lt;br /&gt;Comparator 객체를 사용하여 문제를 풀어보았다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Comparator&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Comparator 인터페이스는 Java에서 객체들을 서로 비교할 때 사용되는 메커니즘을 제공하는 인터페이스이다. 이를 통해 &lt;b&gt;정렬이나 순서 지정을 수행&lt;/b&gt;할 수 있다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;구현 방법&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Comparator 객체 생성:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다중 조건으로 비교할 Comparator 객체를 생성한다.&lt;/li&gt;
&lt;li&gt;compare 메서드를 오버라이드하여 두 객체를 비교하고, 비교 결과에 따라 음수, 0, 양수 값을 반환하도록 구현한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;compare 메서드 작성법:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;음수: 첫 번째 객체 &amp;lt; 두 번째 객체&lt;/li&gt;
&lt;li&gt;0: 첫 번째 객체 == 두 번째 객체&lt;/li&gt;
&lt;li&gt;양수: 첫 번째 객체 &amp;gt; 두 번째 객체&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;양수인 경우에 두 객체의 자리가 변경된다.&lt;/li&gt;
&lt;li&gt;내림차순 정렬: Integer.compare(y, x)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 배열 생성 및 데이터 입력:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정렬할 데이터를 저장할 2차원 배열을 생성한다.&lt;/li&gt;
&lt;li&gt;데이터를 입력하면서 각 요소에 해당하는 조건들을 계산하여 저장한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 배열 정렬:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Arrays.sort() 메서드를 사용하여 생성한 Comparator 객체를 전달하여 배열을 정렬한다.&lt;/li&gt;
&lt;li&gt;정렬은 Comparator 객체의 비교 규칙에 따라 수행된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 정렬된 데이터 출력:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정렬된 배열에서 원하는 위치의 데이터를 출력한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  제출코드&lt;/h2&gt;
&lt;pre id=&quot;code_1692438722430&quot; class=&quot;reasonml&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.*;
import java.util.*;

public class Main {
    // 다중 조건을 기준으로 내림차순 정렬하는 Comparator 객체
    static Comparator&amp;lt;int[]&amp;gt; comparator = new Comparator&amp;lt;int[]&amp;gt;() {
        @Override
        public int compare(int[] o1, int[] o2) {
            // 1의 개수를 기준으로 내림차순 정렬
            int cmp = Integer.compare(o2[1], o1[1]);
            if (cmp != 0) {
                return cmp;
            }
            // 1의 개수가 같다면, 원래 10진수를 기준으로 내림차순 정렬
            return Integer.compare(o2[0], o1[0]);
        }
    };

    public static void main(String[] args) throws Exception {
        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[][] arr = new int[N][2];
        st = new StringTokenizer(br.readLine());
        int i = 0;
        while (st.hasMoreTokens()) {
            int n = Integer.parseInt(st.nextToken());
            arr[i][0] = n; // 정수 값
            arr[i][1] = Integer.toBinaryString(n).length() 
                        - Integer.toBinaryString(n).replace(&quot;1&quot;, &quot;&quot;).length(); // 1의 개수
            i++;
        }

        Arrays.sort(arr, comparator); // 다중 조건으로 배열 정렬
        
        System.out.println(arr[K - 1][0]); // 정렬된 배열에서 K-1번째 원소의 정수 값을 출력
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  후기&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1158&quot; data-origin-height=&quot;315&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rtB8L/btsrB2jXRLl/jOfNAPNkqwkdM5pkwAR2g0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rtB8L/btsrB2jXRLl/jOfNAPNkqwkdM5pkwAR2g0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rtB8L/btsrB2jXRLl/jOfNAPNkqwkdM5pkwAR2g0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrtB8L%2FbtsrB2jXRLl%2FjOfNAPNkqwkdM5pkwAR2g0%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;798&quot; height=&quot;217&quot; data-origin-width=&quot;1158&quot; data-origin-height=&quot;315&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 주는 시작이라서 그런지 문제들의 난이도가 쉬운 편이었다. 다음 주는 완탐문제인데 기대된다. 이번 주 챌린지 완료!&lt;/p&gt;</description>
      <category>ETC/구름톤 챌린지</category>
      <category>구름톤 챌린지</category>
      <author>차차월드</author>
      <guid isPermaLink="true">https://cha-coding.tistory.com/117</guid>
      <comments>https://cha-coding.tistory.com/entry/%EA%B5%AC%EB%A6%84%ED%86%A4-%EC%B1%8C%EB%A6%B0%EC%A7%80-Week1-Day5-%ED%95%99%EC%8A%B5%EC%9D%BC%EA%B8%B0-%EC%9D%B4%EC%A7%84%EC%88%98-%EC%A0%95%EB%A0%AC#entry117comment</comments>
      <pubDate>Sat, 19 Aug 2023 18:52:18 +0900</pubDate>
    </item>
    <item>
      <title>[구름톤 챌린지] Week1 - Day4 학습일기 (완벽한 햄버거 만들기)</title>
      <link>https://cha-coding.tistory.com/entry/%EA%B5%AC%EB%A6%84%ED%86%A4-%EC%B1%8C%EB%A6%B0%EC%A7%80-Week1-Day4-%ED%95%99%EC%8A%B5%EC%9D%BC%EA%B8%B0-%EC%99%84%EB%B2%BD%ED%95%9C-%ED%96%84%EB%B2%84%EA%B1%B0-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  서론&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구름톤 챌린지란, &lt;b&gt;알고리즘 문제를 평일에 딱 1 문제만 푸는 챌린지&lt;/b&gt;이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;평일 오전 10시에 문제가 공개되고, 문제가 공개된 지 48시간 안에 문제를 해결하면 된다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그럼 챌린지 시작해 보자 &amp;zwj;♂️ &amp;zwj;♂️&lt;/p&gt;
&lt;figure id=&quot;og_1692360983150&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;구름LEVEL 알고리즘 먼데이 챌린지가 구름톤 챌린지로 새롭게 찾아왔습니다. 온라인 알고리즘 문제 풀이와 오프라인 팀 챌린지를 모두 즐길 수 있는 구름톤 챌린지와 4주 동안 매일 꾸준히 성장&quot; data-og-host=&quot;9oormthonchallenge.oopy.io&quot; data-og-source-url=&quot;https://9oormthonchallenge.oopy.io/?_gl=1*9mj890*_gcl_au*MTc1MjkwMDAxLjE2OTA4OTIzODM.&quot; data-og-url=&quot;https://9oormthonchallenge.oopy.io&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bOp8eW/hyTFnAelKw/kVe7pRO7YWwFrItr0pFcf0/img.png?width=2000&amp;amp;height=1292&amp;amp;face=0_0_2000_1292,https://scrap.kakaocdn.net/dn/bU67SH/hyTCIkYDbj/i0gXZO1u4P2i4B39QXpkXk/img.png?width=2000&amp;amp;height=1292&amp;amp;face=0_0_2000_1292,https://scrap.kakaocdn.net/dn/bjzqCP/hyTFe4lVoJ/UlapeXLDVxzHx4qWYTNnjk/img.png?width=2000&amp;amp;height=1292&amp;amp;face=0_0_2000_1292&quot;&gt;&lt;a href=&quot;https://9oormthonchallenge.oopy.io/?_gl=1*9mj890*_gcl_au*MTc1MjkwMDAxLjE2OTA4OTIzODM.&quot; data-source-url=&quot;https://9oormthonchallenge.oopy.io/?_gl=1*9mj890*_gcl_au*MTc1MjkwMDAxLjE2OTA4OTIzODM.&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bOp8eW/hyTFnAelKw/kVe7pRO7YWwFrItr0pFcf0/img.png?width=2000&amp;amp;height=1292&amp;amp;face=0_0_2000_1292,https://scrap.kakaocdn.net/dn/bU67SH/hyTCIkYDbj/i0gXZO1u4P2i4B39QXpkXk/img.png?width=2000&amp;amp;height=1292&amp;amp;face=0_0_2000_1292,https://scrap.kakaocdn.net/dn/bjzqCP/hyTFe4lVoJ/UlapeXLDVxzHx4qWYTNnjk/img.png?width=2000&amp;amp;height=1292&amp;amp;face=0_0_2000_1292');&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;구름LEVEL 알고리즘 먼데이 챌린지가 구름톤 챌린지로 새롭게 찾아왔습니다. 온라인 알고리즘 문제 풀이와 오프라인 팀 챌린지를 모두 즐길 수 있는 구름톤 챌린지와 4주 동안 매일 꾸준히 성장&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;9oormthonchallenge.oopy.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  문제&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;722&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rgMXb/btsrBO0hcKt/ftyFQQ4d3ABTn9s5QKjNIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rgMXb/btsrBO0hcKt/ftyFQQ4d3ABTn9s5QKjNIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rgMXb/btsrBO0hcKt/ftyFQQ4d3ABTn9s5QKjNIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrgMXb%2FbtsrBO0hcKt%2FftyFQQ4d3ABTn9s5QKjNIk%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;858&quot; height=&quot;722&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;722&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;857&quot; data-origin-height=&quot;676&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kCoip/btsrBnIo2Fr/pZrva0eNA71kKasZ5QpZKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kCoip/btsrBnIo2Fr/pZrva0eNA71kKasZ5QpZKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kCoip/btsrBnIo2Fr/pZrva0eNA71kKasZ5QpZKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkCoip%2FbtsrBnIo2Fr%2FpZrva0eNA71kKasZ5QpZKK%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;857&quot; height=&quot;676&quot; data-origin-width=&quot;857&quot; data-origin-height=&quot;676&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt; &amp;nbsp;문제풀이&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;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  제출코드&lt;/h2&gt;
&lt;pre id=&quot;code_1692368267874&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.*;
import java.util.*;

class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int[] taste = new int[N];

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

        // 맛의 정도가 가장 높은 재료의 인덱스와 값을 찾음
        int maxIndex = 0;
        int maxValue = taste[0];

        for (int i = 1; i &amp;lt; N; i++) {
            if (taste[i] &amp;gt; maxValue) {
                maxValue = taste[i];
                maxIndex = i;
            }
        }

        // 맛의 정도가 가장 높은 재료를 기준으로 좌우로 정렬된 재료인지 확인
        if (check(N, taste, maxIndex)) {
            int sum = 0;
            for (int i = 0; i &amp;lt; N; i++) {
                sum += taste[i];
            }
            System.out.println(sum);
        } else {
            System.out.println(0);
        }
    }

    // 재료 배열이 맛의 정도가 가장 높은 재료를 기준으로 좌우로 정렬되었는지 확인하는 함수
    public static boolean check(int N, int[] taste, int maxIndex) {
        boolean Perfect = true;

        // 맛의 정도가 가장 높은 재료를 기준으로 오른쪽으로 검사
        for (int i = maxIndex; i &amp;lt; N - 1; i++) {
            if (taste[i] &amp;lt; taste[i + 1]) {
                Perfect = false;
            }
        }

        // 맛의 정도가 가장 높은 재료를 기준으로 왼쪽으로 검사
        for (int i = maxIndex; i &amp;gt; 0; i--) {
            if (taste[i] &amp;lt; taste[i - 1]) {
                Perfect = false;
            }
        }

        return Perfect;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  후기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배열이 정렬의 조건에 맞는지 확인만 해주면 되기 때문에 문제가 어렵지는 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제의 제한 시간이 끝나면, 다른 사람들이 제출한 코드도 볼 수 있으면 좋겠다.&lt;/p&gt;
&lt;div id=&quot;gtx-trans&quot; style=&quot;position: absolute; left: -5px; top: 1950.41px;&quot;&gt;
&lt;div class=&quot;gtx-trans-icon&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;</description>
      <category>ETC/구름톤 챌린지</category>
      <category>구름톤 챌린지</category>
      <author>차차월드</author>
      <guid isPermaLink="true">https://cha-coding.tistory.com/116</guid>
      <comments>https://cha-coding.tistory.com/entry/%EA%B5%AC%EB%A6%84%ED%86%A4-%EC%B1%8C%EB%A6%B0%EC%A7%80-Week1-Day4-%ED%95%99%EC%8A%B5%EC%9D%BC%EA%B8%B0-%EC%99%84%EB%B2%BD%ED%95%9C-%ED%96%84%EB%B2%84%EA%B1%B0-%EB%A7%8C%EB%93%A4%EA%B8%B0#entry116comment</comments>
      <pubDate>Fri, 18 Aug 2023 21:17:05 +0900</pubDate>
    </item>
    <item>
      <title>[Tech Interview] Data Structure</title>
      <link>https://cha-coding.tistory.com/entry/Tech-Interview-Data-Structure</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;  HashMap&amp;nbsp;vs&amp;nbsp;LinkedHashMap&amp;nbsp;차이와&amp;nbsp;장단점&lt;/h2&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;p data-ke-size=&quot;size16&quot;&gt;차이점:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HashMap은 요소의 순서를 보장하지 않고, LinkedHashMap은 요소의 삽입 순서를 보장합니다.&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;HashMap의 장점은 빠른 검색 속도와 효율성입니다. 그러나 순서를 보장하지 않아 정렬된 결과를 얻기 어려울 수 있습니다. 반면 LinkedHashMap의 장점은 요소의 삽입 순서를 보장하여 순서가 중요한 작업에 유용합니다. 그러나 내부적으로 연결 리스트를 관리해야 하므로 삽입 작업이나 메모리 사용 면에서 약간의 오버헤드가 발생할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요악하자면, HashMap은 빠른 검색 속도와 효율성을 가지고 있으며, LinkedHashMap은 삽입 순서를 보장하며 순서가 중요한 상황에서 유용합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt; &lt;span&gt; Array과 ArrayList의 차이&lt;/span&gt;&lt;/h2&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;p data-ke-size=&quot;size16&quot;&gt;Array는 고정된 크기와 타입을 가지며, 빠른 인덱스 접근이 가능하지만 크기를 동적으로 조절하기 어렵고 추가 및 삭제가 어렵습니다.&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;ArrayList는 크기가 동적으로 조절되며, 다양한 타입의 원소를 저장할 수 있습니다. 크기가 자동으로 조절되기 때문에 원소의 추가 및 삭제가 용이합니다. 하지만 크기 조절로 인한 성능 저하가 있을 수 있습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  Map과 List의 차이&lt;/h2&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;p data-ke-size=&quot;size16&quot;&gt;Map은 키-값(key-value) 쌍으로 데이터를 저장하는 자료구조입니다. 각 데이터에 고유한 키가 할당되어 값에 접근할 수 있습니다. 이는 데이터를 검색하고 관리하는데 효율적인 방법이며, 주로 데이터베이스의 해시 테이블과 유사한 구조를 가집니다. 예를 들어 사용자 정보를 ID로 저장하고 조회하는 경우에 유용합니다.&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;List는 데이터를 순차적으로 저장하며, 각 데이터는 인덱스를 통해 접근됩니다. 데이터의 순서가 중요하거나 중복을 허용해야 할 때 사용됩니다. 주로 배열과 유사한 구조를 가지며, 예를 들어 To-Do 리스트나 게시물 목록과 같은 데이터를 저장할 때 적합합니다.&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;요악하자면, Map은 키를 통해 값을 저장하고 검색하는 구조로, List는 순서대로 데이터를 저장하며 데이터의 순서가 중요한 경우나 중복을 관리할 때 사용됩니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Tech Interview</category>
      <category>기술면접</category>
      <author>차차월드</author>
      <guid isPermaLink="true">https://cha-coding.tistory.com/113</guid>
      <comments>https://cha-coding.tistory.com/entry/Tech-Interview-Data-Structure#entry113comment</comments>
      <pubDate>Mon, 14 Aug 2023 20:19:23 +0900</pubDate>
    </item>
    <item>
      <title>[Tech Interview] Database</title>
      <link>https://cha-coding.tistory.com/entry/Tech-Interview-Database</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;  DELETE, TRUNCATE, DROP의 차이를 설명해 주세요.&lt;/h2&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;p data-ke-size=&quot;size16&quot;&gt;DELETE는 테이블에서 특정 레코드(행)들을 삭제합니다. 이때, 테이블의 구조나 스키마는 그대로 유지됩니다. 또한 트랜잭션을 사용할 경우 롤백을 통해 삭제 작업을 취소할 수 있습니다.&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;TRUNCATE는 테이블의 모든 레코드를 한 번에 삭제합니다. DELETE보다 빠른 속도로 작동하며, 테이블의 스키마는 그대로 유지됩니다. 하지만 롤백이 불가능합니다.&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;DROP은 테이블 자체(객체와 관련된 모든 것)를 완전히 삭제하고, 롤백이 불가능합니다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;556&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KX8RO/btsqZ018Rps/4NkfOHGd7C6nits8S6xpuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KX8RO/btsqZ018Rps/4NkfOHGd7C6nits8S6xpuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KX8RO/btsqZ018Rps/4NkfOHGd7C6nits8S6xpuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKX8RO%2FbtsqZ018Rps%2F4NkfOHGd7C6nits8S6xpuK%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;550&quot; height=&quot;556&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;556&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  group by의 역할에 대해 설명해 주세요.&lt;/h2&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;p data-ke-size=&quot;size16&quot;&gt;GROUP BY 절은 SQL에서 데이터를 특정 열 또는 열의 조합을 기준으로 그룹화하여 집계 함수를 사용해 각 그룹별로 요약된 정보를 생성하는 역할을 합니다. 이를 통해 데이터의 패턴과 통계적 정보를 파악할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  트랜잭션에 대해서 설명해 주세요.&lt;/h2&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;p data-ke-size=&quot;size16&quot;&gt;트랜잭션은 데이터베이스에서 하나의 논리적 작업 단위를 나타내는 개념입니다. 이 작업 단위는 하나 이상의 SQL 쿼리로 구성되며, 데이터베이스의 일관성과 무결성을 유지하기 위해 중요한 역할을 합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  ACID에 대해서 설명해 주세요.&lt;/h2&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;p data-ke-size=&quot;size16&quot;&gt;ACID는 데이터베이스 트랜잭션의 특성을 나타내는 개념으로, 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability)의 네 가지 특성으로 이루어져 있습니다.&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;원자성(Atomicity)은&amp;nbsp;트랜잭션&amp;nbsp;내의&amp;nbsp;모든&amp;nbsp;작업이&amp;nbsp;성공하거나&amp;nbsp;전혀&amp;nbsp;수행되지&amp;nbsp;않음을&amp;nbsp;보장하며, &lt;br /&gt;일관성(Consistency)은 트랜잭션이 데이터베이스를 항상 일관된 상태로 유지한다는 것을 의미합니다. &lt;br /&gt;고립성(Isolation)은 여러 개의 트랜잭션이 동시에 실행될 때, 한 트랜잭션이 다른 트랜잭션에 영향을 주지 않도록 보장하며, &lt;br /&gt;지속성(Durability)은 트랜잭션이 성공적으로 완료되면, 그 결과가 영구적으로 유지됨을 의미합니다.&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;ACID는 데이터베이스 시스템에서 데이터 무결성과 안전성을 보장하기 위한 중요한 원칙이며, 트랜잭션의 신뢰성을 확보하는 데 중요한 역할을 합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  Index에 대해 설명해 주세요.&lt;/h2&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;p data-ke-size=&quot;size16&quot;&gt;Index는 데이터베이스에서 데이터 검색 속도를 높이기 위한 도구입니다.&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;주로 WHERE 절에서 조건 검색 시에 사용되며, 데이터의 유일성(unique)을 보장하거나 성능을 향상시키는 데 활용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 Index는 저장 공간을 차지하며 데이터 업데이트 작업을 복잡하게 만들 수 있어 모든 열에 Index를 생성하는 것은 권장되지 않습니다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;680&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bya3o2/btsrcuVmrwt/y2kx4sqXacfBjk4KFPuTuk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bya3o2/btsrcuVmrwt/y2kx4sqXacfBjk4KFPuTuk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bya3o2/btsrcuVmrwt/y2kx4sqXacfBjk4KFPuTuk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbya3o2%2FbtsrcuVmrwt%2Fy2kx4sqXacfBjk4KFPuTuk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;680&quot; height=&quot;680&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;680&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Tech Interview</category>
      <category>기술면접</category>
      <author>차차월드</author>
      <guid isPermaLink="true">https://cha-coding.tistory.com/111</guid>
      <comments>https://cha-coding.tistory.com/entry/Tech-Interview-Database#entry111comment</comments>
      <pubDate>Wed, 9 Aug 2023 15:53:27 +0900</pubDate>
    </item>
    <item>
      <title>[Tech Interview] Spring</title>
      <link>https://cha-coding.tistory.com/entry/Tech-Interview-Spring</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt; &amp;nbsp;Spring MVC 에 대해 설명해 주세요.&lt;/h2&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;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Spring MVC는 Spring Framework의 웹 애플리케이션 개발을 지원하는 모듈로, Model-View-Controller(MVC) 패턴을 구현한 웹 프레임워크입니다. MVC 패턴은 애플리케이션의 구조를 모델(Model), 뷰(View), 컨트롤러(Controller) 세 가지 역할로 나누어 개발합니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;Model&lt;/b&gt;은&amp;nbsp;&lt;u&gt;애플리케이션의 비즈니스 로직과 데이터를 나타냅니다.&lt;/u&gt;&amp;nbsp;쉽게 말하면, 무엇을 처리할 것인지를 명시해 놓은 영역입니다. Model은 웹 응용 프로그램의 도메인 객체를 관리하고 데이터베이스와 같은 영속성 계층과 상호 작용합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;View&lt;/b&gt;는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;사용자에게 보여지는 데이터를 표현하는 역할을 합니다.&lt;/u&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;즉, 사용자가 보게 될 요소를 어떻게 디자인할 것인지를 다룹니다. 일반적으로 JSP, Thymeleaf 등의 템플릿 엔진을 사용하여 뷰를 구성합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Controller&lt;/b&gt;는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;사용자의 요청을 처리하고 적절한 Model을 호출한 후 결과를 View로 전달하는 역할을 합니다.&lt;/u&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Controller는 요청-응답의 프로세스 흐름을 조절합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  Spring MVC 패턴이 요청을 주고 받을 때 어떤 흐름인지 설명해 주세요.&lt;/h2&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;800&quot; data-origin-height=&quot;450&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vv2sn/btspE3ZlLgV/4lXisRxU3F1eEnikd1htq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vv2sn/btspE3ZlLgV/4lXisRxU3F1eEnikd1htq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vv2sn/btspE3ZlLgV/4lXisRxU3F1eEnikd1htq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvv2sn%2FbtspE3ZlLgV%2F4lXisRxU3F1eEnikd1htq1%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;800&quot; height=&quot;450&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;450&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Spring&amp;nbsp;MVC&amp;nbsp;패턴은&amp;nbsp;웹&amp;nbsp;애플리케이션의&amp;nbsp;구조를&amp;nbsp;Model-View-Controller&amp;nbsp;관점에서&amp;nbsp;분리하여&amp;nbsp;개발하는&amp;nbsp;디자인&amp;nbsp;패턴입니다.&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;사용자&amp;nbsp;요청&amp;nbsp;(HTTP&amp;nbsp;Request)&lt;br /&gt;사용자가&amp;nbsp;웹&amp;nbsp;애플리케이션에&amp;nbsp;요청을&amp;nbsp;보내면,&amp;nbsp;DispatcherServlet이&amp;nbsp;이를&amp;nbsp;가장&amp;nbsp;먼저&amp;nbsp;받게&amp;nbsp;됩니다.&amp;nbsp;DispatcherServlet은&amp;nbsp;Spring&amp;nbsp;MVC의&amp;nbsp;핵심&amp;nbsp;구성&amp;nbsp;요소로서,&amp;nbsp;모든&amp;nbsp;요청과&amp;nbsp;응답을&amp;nbsp;제어하고&amp;nbsp;관리합니다.&lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;Handler&amp;nbsp;매핑&amp;nbsp;(Handler&amp;nbsp;Mapping)&lt;br /&gt;요청을&amp;nbsp;받은&amp;nbsp;DispatcherServlet은&amp;nbsp;해당&amp;nbsp;요청&amp;nbsp;URL을&amp;nbsp;처리할&amp;nbsp;Controller를&amp;nbsp;결정하기&amp;nbsp;위해&amp;nbsp;HandlerMapping에&amp;nbsp;요청을&amp;nbsp;전달합니다.&amp;nbsp;HandlerMapping은&amp;nbsp;요청&amp;nbsp;URL에&amp;nbsp;대응하는&amp;nbsp;Controller를&amp;nbsp;찾아&amp;nbsp;반환합니다.&lt;br /&gt;&lt;br /&gt;3.&amp;nbsp;Controller&amp;nbsp;처리&lt;br /&gt;URL에&amp;nbsp;대응하는&amp;nbsp;Controller가&amp;nbsp;결정되면,&amp;nbsp;DispatcherServlet은&amp;nbsp;해당&amp;nbsp;요청을&amp;nbsp;Controller에&amp;nbsp;전달합니다.&amp;nbsp;Controller는&amp;nbsp;서비스&amp;nbsp;계층(Service&amp;nbsp;Layer)의&amp;nbsp;로직&amp;nbsp;호출,&amp;nbsp;웹&amp;nbsp;요청&amp;nbsp;데이터&amp;nbsp;처리&amp;nbsp;등의&amp;nbsp;작업을&amp;nbsp;수행합니다.&amp;nbsp;요청의&amp;nbsp;처리&amp;nbsp;결과로써,&amp;nbsp;Model&amp;nbsp;데이터와&amp;nbsp;뷰&amp;nbsp;이름을&amp;nbsp;반환합니다.&lt;br /&gt;&lt;br /&gt;4.&amp;nbsp;ViewResolver&lt;br /&gt;Controller가&amp;nbsp;반환한&amp;nbsp;뷰&amp;nbsp;이름을&amp;nbsp;바탕으로&amp;nbsp;DispatcherServlet은&amp;nbsp;ViewResolver를&amp;nbsp;사용하여&amp;nbsp;실제&amp;nbsp;뷰&amp;nbsp;파일을&amp;nbsp;결정합니다.&amp;nbsp;ViewResolver는&amp;nbsp;뷰&amp;nbsp;이름을&amp;nbsp;기준으로&amp;nbsp;실제로&amp;nbsp;사용할&amp;nbsp;뷰&amp;nbsp;템플릿&amp;nbsp;파일을&amp;nbsp;찾아&amp;nbsp;반환합니다.&lt;br /&gt;&lt;br /&gt;5.&amp;nbsp;뷰&amp;nbsp;작성&amp;nbsp;(View&amp;nbsp;Rendering)&lt;br /&gt;ViewResolver가&amp;nbsp;결정한&amp;nbsp;실제&amp;nbsp;뷰&amp;nbsp;파일(예:&amp;nbsp;JSP&amp;nbsp;파일)은&amp;nbsp;Model&amp;nbsp;데이터를&amp;nbsp;사용하여&amp;nbsp;사용자에게&amp;nbsp;보여줄&amp;nbsp;최종&amp;nbsp;HTML을&amp;nbsp;생성(Rendering)합니다.&amp;nbsp;생성된&amp;nbsp;HTML은&amp;nbsp;다시&amp;nbsp;DispatcherServlet을&amp;nbsp;거쳐&amp;nbsp;사용자에게&amp;nbsp;응답으로&amp;nbsp;전달됩니다.&lt;br /&gt;&lt;br /&gt;6.&amp;nbsp;사용자&amp;nbsp;응답&amp;nbsp;(HTTP&amp;nbsp;Response)&lt;br /&gt;DispatcherServlet은&amp;nbsp;사용자에게&amp;nbsp;최종적으로&amp;nbsp;생성된&amp;nbsp;HTML(응답&amp;nbsp;데이터)을&amp;nbsp;반환합니다.&amp;nbsp;이로써&amp;nbsp;HTTP&amp;nbsp;요청-응답&amp;nbsp;과정이&amp;nbsp;종료되고&amp;nbsp;사용자는&amp;nbsp;웹&amp;nbsp;브라우저에&amp;nbsp;렌더링&amp;nbsp;된&amp;nbsp;결과를&amp;nbsp;확인할&amp;nbsp;수&amp;nbsp;있게&amp;nbsp;됩니다.&lt;br /&gt;&lt;br /&gt;요약하면, Spring MVC 패턴에서 웹 요청은 DispatcherServlet, HandlerMapping, Controller, ViewResolver, View 순으로 처리되어 사용자에게 반환됩니다. 이 과정에서 각 구성 요소는 별도의 책임을 가지며 서로 협력하여 사용자의 웹 요청을 처리합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  Spring IoC(Inversion of Control, 제어의 역전)에 대해 설명해 주세요.&lt;/h2&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;p data-ke-size=&quot;size16&quot;&gt;Spring의&amp;nbsp;IOC&amp;nbsp;(Inversion&amp;nbsp;of&amp;nbsp;Control)는&amp;nbsp;객체의&amp;nbsp;생성과&amp;nbsp;관리를&amp;nbsp;프레임워크에&amp;nbsp;맡기는&amp;nbsp;개념입니다.&amp;nbsp;&lt;br /&gt;개발자가 직접 객체를 생성하고 관리하는 것이 아닌, 스프링 컨테이너가 객체의 의존성을 주입하고 생명 주기를 관리합니다. 이로써 유지보수와 테스트가 편리해지며, 코드의 유연성과 결합도가 개선됩니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  Spring Boot와 Spring Framework의 차이점을 설명해 주세요.&lt;/h2&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Spring Framework&lt;/b&gt;는 XML 또는 Java Config를 사용하여 필요한 구성과 설정 등을 직접 관리하며, WAR 파일 형태로 배포됩니다. 반면에 &lt;b&gt;Spring Boot&lt;/b&gt;는 초기 설정이 간단하고 자동 설정(Auto Configuartion)을 지원하며, 내장된 웹서버를 활용하여 JAR 파일 형태로 배포합니다.&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;Spring Boot는 빠른 개발을 가능하게 하지만, 이에 비해 Spring Framework는 더 많은 유연성과 커스터마이징 기능을 제공합니다. 따라서 프로젝트 요구사항과 개발 편의성에 따라 선택할 수 있습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  Spring Boot와 Spring Framework의 장단점과 차이점을 설명해 주세요.&lt;/h2&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;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Spring Framework의 장점은 높은 유연성과 커스터마이징 기능으로, 복잡한 애플리케이션에서 더 많은 제어를 할 수 있다는 점입니다. 그러나 초기 설정과 관리가 복잡하여 개발 시간이 더 소요될 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;반면에 Spring Boot는 간단한 초기 설정과 자동 설정으로 개발자의 작업 부담을 줄여줍니다. 내장된 웹 서버로 빠르게 배포가 가능하며 모니터링과 관리도 용이합니다. 하지만 유연성은 상대적으로 떨어질 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;차이점은 설정과 편의성 관련입니다. Spring Framework는 개발자가 모든 설정을 직접 제어해야 하지만, Spring Boot는 기본 설정을 제공하여 개발자에게 더 편리한 개발 환경을 제공해 줍니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Tech Interview</category>
      <category>Spring 기술면접</category>
      <category>기술면접</category>
      <author>차차월드</author>
      <guid isPermaLink="true">https://cha-coding.tistory.com/108</guid>
      <comments>https://cha-coding.tistory.com/entry/Tech-Interview-Spring#entry108comment</comments>
      <pubDate>Sat, 29 Jul 2023 20:44:40 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] Lv.0 : 2의 영역</title>
      <link>https://cha-coding.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-Lv0-2%EC%9D%98-%EC%98%81%EC%97%AD</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/181894&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/181894&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1690541610279&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/181894&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bu0ZTk/hyTrUr4BMJ/iL0NmEDoDvDJp4mW4K9mjK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/Q47cF/hyTtkWZnky/MhQkocC7WJs5BKy8HMm6g1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/181894&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/181894&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bu0ZTk/hyTrUr4BMJ/iL0NmEDoDvDJp4mW4K9mjK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/Q47cF/hyTtkWZnky/MhQkocC7WJs5BKy8HMm6g1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;615&quot; data-origin-height=&quot;569&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pgYva/btspsUmTb5C/FpQ8PG2kxI2bMZ9yNQfKA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pgYva/btspsUmTb5C/FpQ8PG2kxI2bMZ9yNQfKA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pgYva/btspsUmTb5C/FpQ8PG2kxI2bMZ9yNQfKA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpgYva%2FbtspsUmTb5C%2FFpQ8PG2kxI2bMZ9yNQfKA0%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;615&quot; height=&quot;569&quot; data-origin-width=&quot;615&quot; data-origin-height=&quot;569&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  나의 생각&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주어진 배열 안에서 2가 모두 포함된 부분 배열을 return 하는 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 주어진 배열에서 숫자 &quot;2&quot;를 찾고, &quot;2&quot;를 발견할 때마다 해당 &quot;2&quot;를 포함한 그 이후의 연속적인 숫자들을 ArrayList인 list에 추가해 주었다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  나의 코드&lt;/h2&gt;
&lt;pre id=&quot;code_1690542279310&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.ArrayList;

class Solution {
    public int[] solution(int[] arr) {
        // 결과를 저장할 ArrayList 객체 생성
        ArrayList&amp;lt;Integer&amp;gt; list = new ArrayList&amp;lt;&amp;gt;();
        
        // 배열 arr을 반복하여 숫자 2를 찾음
        for (int i = 0; i &amp;lt; arr.length; i++) {
            if (arr[i] == 2) {
                // 숫자 2를 list에 추가
                list.add(arr[i]);
                
                // 숫자 2 다음의 연속된 숫자들을 저장하기 위한 ArrayList 객체 생성
                ArrayList&amp;lt;Integer&amp;gt; subList = new ArrayList&amp;lt;&amp;gt;();
                
                // 현재 위치(i) 다음 인덱스부터 배열을 다시 순회하여 연속된 숫자들을 subList에 추가
                for (int j = i + 1; j &amp;lt; arr.length; j++) {
                    if (arr[j] == 2) {
                        // 다시 숫자 2를 발견하면 subList를 list에 추가하고 반복 종료
                        list.addAll(subList);
                        break;
                    } else {
                        // 숫자 2가 아닌 경우 subList에 숫자 추가
                        subList.add(arr[j]);
                    }
                }
            }
        }

        // list가 비어있을 경우 -1을 추가
        if (list.isEmpty()) {
            list.add(-1);
        }

        // ArrayList를 기본형 배열로 변환하여 반환
        return list.stream().mapToInt(Integer::intValue).toArray();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  다른 사람의 코드에서 배운 것&lt;/h2&gt;
&lt;pre id=&quot;code_1690542607764&quot; class=&quot;java&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.stream.IntStream;

class Solution {
    public int[] solution(int[] arr) {
        int[] idxs = IntStream.range(0, arr.length).filter(i -&amp;gt; arr[i] == 2).toArray();

        if(idxs.length == 0) {
            int[] zero = {-1};
            return zero;
        }
        else if(idxs.length == 1) {
            int[] one = {2};
            return one;
        }
        else {
            return IntStream.rangeClosed(idxs[0], idxs[idxs.length - 1]).map(i -&amp;gt; arr[i]).toArray();
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IntStream을 활용하여 숫자 &quot;2&quot;가 나온 인덱스를 배열에 저장해서,&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;배열 길이가 0이면, 숫자 2가 없는 경우이므로 -1을 반환&lt;/li&gt;
&lt;li&gt;배열 길이가 1이면, 숫자 2가 한 번만 나타나는 경우이므로 2를 반환&lt;/li&gt;
&lt;li&gt;배열 길이가 2 이상인 경우, idxs[0]는 첫 번째로 나타나는 2의 인덱스를 idxs[idxs.length-1]는 마지막으로 나타나는 2의 인덱스를. 이렇게 구한 인덱스 범위 내의 원소들을 새로운 배열로 반환&lt;/li&gt;
&lt;/ol&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IntStream.rangeClosed() - 끝 숫자를 포함&lt;/li&gt;
&lt;li&gt;IntStream.range()&amp;nbsp;-&amp;nbsp;끝&amp;nbsp;숫자를&amp;nbsp;포함하지&amp;nbsp;않음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm/Programmers</category>
      <author>차차월드</author>
      <guid isPermaLink="true">https://cha-coding.tistory.com/107</guid>
      <comments>https://cha-coding.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-Lv0-2%EC%9D%98-%EC%98%81%EC%97%AD#entry107comment</comments>
      <pubDate>Fri, 28 Jul 2023 20:16:13 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] Lv.0 : 배열 만들기 2</title>
      <link>https://cha-coding.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-Lv0-%EB%B0%B0%EC%97%B4-%EB%A7%8C%EB%93%A4%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/181921&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/181921&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1690270895934&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/181921&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/gT2Ly/hyTqwcDVyr/UaG2lmo1S5j8Sbd90HGiA1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/boBxLj/hyTqqpWiIs/0sLsLo6xnlRKeK0lS01NQ0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/181921&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/181921&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/gT2Ly/hyTqwcDVyr/UaG2lmo1S5j8Sbd90HGiA1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/boBxLj/hyTqqpWiIs/0sLsLo6xnlRKeK0lS01NQ0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;641&quot; data-origin-height=&quot;466&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/breJFH/btspsV7agO5/Ets0QBqpIH6HmxqTPFKJdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/breJFH/btspsV7agO5/Ets0QBqpIH6HmxqTPFKJdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/breJFH/btspsV7agO5/Ets0QBqpIH6HmxqTPFKJdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbreJFH%2FbtspsV7agO5%2FEts0QBqpIH6HmxqTPFKJdk%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;641&quot; height=&quot;466&quot; data-origin-width=&quot;641&quot; data-origin-height=&quot;466&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  나의 생각&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;0&quot;과 &quot;5&quot;로만 이루어진 모든 정수를 구하면 되기 때문에 정규표현식을 사용하여 풀어보았다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  나의 코드&lt;/h2&gt;
&lt;pre id=&quot;code_1690271573556&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;

class Solution {
    public int[] solution(int l, int r) {
        ArrayList&amp;lt;Integer&amp;gt; numbers = new ArrayList&amp;lt;&amp;gt;();
        for (int i = l; i &amp;lt;= r; i++) {
        	// 숫자를 문자열로 변환하여 &quot;0&quot;, &quot;5&quot;만 포함되어 있는지 확인한다.
            String numString = String.valueOf(i);
            if (numString.matches(&quot;[05]+&quot;)) {
                numbers.add(i);
            }
        }

        if (numbers.isEmpty()) {
            numbers.add(-1);
        }
        
        // 배열로 변환하여 출력한다.
        return numbers.stream().mapToInt(Integer::intValue).toArray();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  배운 것&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;boolean matches(String regex) : 문자열이 정규식(regex)에 일치하는지 판별&lt;/li&gt;
&lt;li&gt;[05]+ : &quot;0&quot;과 &quot;5&quot;로만 이루어진 문자열을 찾기 위한 패턴&lt;/li&gt;
&lt;li&gt;&lt;s&gt;패턴을 구성하는 요소&lt;/s&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;[ ] : 괄호 안에 들어있는 문자들 중 하나와 매치&lt;/li&gt;
&lt;li&gt;0 : 문자 '0'과 정확히 일치&lt;/li&gt;
&lt;li&gt;5 : 문자 '5'와 정확히 일치&lt;/li&gt;
&lt;li&gt;+ : 바로 앞에 있는 문자 또는 그룹이 하나 이상 반복되는 것과 매치&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;intValue() : Integer객체를 기본형 int로 언박싱하여 정수값을 반환&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Algorithm/Programmers</category>
      <category>정규표현식</category>
      <author>차차월드</author>
      <guid isPermaLink="true">https://cha-coding.tistory.com/103</guid>
      <comments>https://cha-coding.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-Lv0-%EB%B0%B0%EC%97%B4-%EB%A7%8C%EB%93%A4%EA%B8%B0#entry103comment</comments>
      <pubDate>Tue, 25 Jul 2023 16:46:07 +0900</pubDate>
    </item>
    <item>
      <title>[Tech Interview] Java</title>
      <link>https://cha-coding.tistory.com/entry/Tech-Interview-Java</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  오버라이딩과 오버로딩&lt;/h2&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;p data-ke-size=&quot;size16&quot;&gt;1. 오버라이딩(Overriding) : 오버라이딩은 &lt;u&gt;서브 클래스(subclass)가 상위 클래스(superclass)로부터 상속받은 메소드를 자신만의 버전으로 다시 구현하는 과정&lt;/u&gt;입니다. 즉, &lt;u&gt;메소드의 이름은 동일하게 선언되며, 매개변수와 반환 타입도 동일한 형식&lt;/u&gt;을 가져야 합니다.&lt;br /&gt;오버라이딩을&amp;nbsp;사용하면&amp;nbsp;하위&amp;nbsp;클래스에서&amp;nbsp;상위&amp;nbsp;클래스의&amp;nbsp;메소드를&amp;nbsp;변경하거나&amp;nbsp;수정할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;이는&amp;nbsp;다형성(polymorphism)&amp;nbsp;구현에&amp;nbsp;중요한&amp;nbsp;역할을&amp;nbsp;하며,&amp;nbsp;서브&amp;nbsp;클래스&amp;nbsp;객체를&amp;nbsp;바탕으로&amp;nbsp;상위&amp;nbsp;클래스의&amp;nbsp;참조&amp;nbsp;변수를&amp;nbsp;사용하여&amp;nbsp;호출&amp;nbsp;시,&amp;nbsp;실행되는&amp;nbsp;메소드가&amp;nbsp;오버라이딩된&amp;nbsp;메소드임을&amp;nbsp;보장합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;2. 오버로딩(Overloading) : 오버로딩은 &lt;u&gt;같은 이름의 메소드를 한 클래스 내에서 여러 개 선언&lt;/u&gt;하는 것을 말합니다. 단, &lt;u&gt;각 메소드는 매개변수의 타입, 개수, 순서 등이 서로 다르게 선언&lt;/u&gt;되어야 합니다. 이를 통해 같은 이름의 메소드를 다양한 매개변수 조합으로 사용할 수 있습니다. 어떤 메소드가 호출될지는 전달되는 매개변수에 의해 결정됩니다. &lt;br /&gt;오버로딩을 사용하면 메소드 이름을 기억하기 쉽게 정할 수 있으며, 동일한 작업 수행에 대해 편의성이 증가합니다. 이 역시 Java의 다형성을 구현하는 방법 중 하나입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 80px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;오버라이딩&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;오버로딩&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;메소드 이름&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;동일&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;동일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;매개변수 (타입, 개수, 순서)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;동일&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;다름&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;반환 타입&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;동일&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;상관없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt; &amp;nbsp;final 키워드&lt;/h2&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;p data-ke-size=&quot;size16&quot;&gt;Java에서 final 키워드는 클래스, 메소드, 변수에 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 클래스 : 변경될 수 없는 클래스, 확장될 수 없는 클래스가 됩니다. 그래서 final로 선언된 클래스는 다른 클래스의 조상이 될 수 없습니다.&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;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;3. 변수 : 값을 변경할 수 없는 상수가 됩니다.&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;final&amp;nbsp;키워드는&amp;nbsp;불변성&amp;nbsp;(Immutability)을&amp;nbsp;유지하거나,&amp;nbsp;부모&amp;nbsp;클래스/메소드를&amp;nbsp;변경하지&amp;nbsp;못하도록&amp;nbsp;보호하거나,&amp;nbsp;특정한&amp;nbsp;메소드나&amp;nbsp;클래스가&amp;nbsp;자식&amp;nbsp;클래스/인터페이스에&amp;nbsp;의해서&amp;nbsp;변경되는&amp;nbsp;것을&amp;nbsp;방지하고자&amp;nbsp;할&amp;nbsp;때&amp;nbsp;사용됩니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt; &amp;nbsp;접근 제어자 (access modifier)&lt;/h2&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;public : 어떤 클래스에서도 접근할 수 있습니다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;protected : 같은 패키지 내에서, 패키지가 다른 경우, 자식 클래스에서만 접근이 가능합니다.&lt;/li&gt;
&lt;li&gt;default : 같은 패키지 내에서만 접근이 가능합니다. 접근&amp;nbsp;제어자를&amp;nbsp;따로&amp;nbsp;지정하지&amp;nbsp;않은&amp;nbsp;경우,&amp;nbsp;default&amp;nbsp;접근&amp;nbsp;제어자로&amp;nbsp;지정됩니다.&lt;/li&gt;
&lt;li&gt;private : 해당 멤버 변수나 메소드를 선언한 클래스 내에서만 사용할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 88px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 20px;&quot;&gt;제어자&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 20px;&quot;&gt;같은 클래스&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 20px;&quot;&gt;같은 패키지&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 20px;&quot;&gt;자식 클래스&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 20px;&quot;&gt;전체&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;public&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;⭕&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;⭕&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;⭕&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;⭕&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;protected&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;⭕&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;⭕&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;⭕&lt;/td&gt;
&lt;td style=&quot;width: 20%; 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: 20%; height: 17px;&quot;&gt;(default)&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;⭕&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;⭕&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%; 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: 20%; height: 17px;&quot;&gt;private&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;⭕&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;접근 제어자를 사용하는 이유는 클래스의 내부에 선언된 데이터를 보호하고 유지 보수를 용이하게 하는 등의 장점이 있습니다. 이러한 접근 제어자와 관련된 개념으로 캡슐화(Encapsulation)가&amp;nbsp;있습니다.&amp;nbsp;캡슐화는&amp;nbsp;클래스의&amp;nbsp;내부&amp;nbsp;구현을&amp;nbsp;외부로부터&amp;nbsp;감출&amp;nbsp;수&amp;nbsp;있게&amp;nbsp;하여&amp;nbsp;외부의&amp;nbsp;영향을&amp;nbsp;최소화하는&amp;nbsp;방법입니다.&amp;nbsp;이를&amp;nbsp;통해&amp;nbsp;프로그램의&amp;nbsp;안정성과&amp;nbsp;확장성을&amp;nbsp;높이게&amp;nbsp;됩니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt; &amp;nbsp;클래스, 객체, 인스턴스&lt;/h2&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;1230&quot; data-origin-height=&quot;862&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/elnVBO/btspsGjmV4t/MsCnt1q3K9Twk0SLk347D0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/elnVBO/btspsGjmV4t/MsCnt1q3K9Twk0SLk347D0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/elnVBO/btspsGjmV4t/MsCnt1q3K9Twk0SLk347D0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FelnVBO%2FbtspsGjmV4t%2FMsCnt1q3K9Twk0SLk347D0%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;428&quot; height=&quot;300&quot; data-origin-width=&quot;1230&quot; data-origin-height=&quot;862&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;클래스(Class)와 객체(Object), 인스턴스(Instance)는 객체지향 프로그래밍(Object-Oriented Programming, OOP)에서 핵심 개념입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 클래스(Class)는 &lt;u&gt;객체를 생성하기 위한 설계도&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;2. 객체(Object)는 &lt;u&gt;클래스로부터 만들어지는 실체&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;3. 인스턴스(Instance)는 &lt;u&gt;클래스를 바탕으로 메모리에 실제로 할당된 객체&lt;/u&gt;를 의미합니다. 인스턴스는 독립적이며, 각기 다른 상태를 가질 수 있습니다. 객체와 같은 의미로 쓰이기도 합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt; &amp;nbsp;Java에서 제공하는 원시 타입들에 무엇이 있고, 각각 몇 바이트를 차지하나요?&lt;/h2&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;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Java의 원시 타입(Primitive Types)은 기본적인 데이터 유형으로, 각각의 크기는 플랫폼에 따라 다를 수 있습니다. 일반적으로는 아래의 크기가 대부분의 플랫폼에서 일관되게 적용됩니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;정수형 byte, short, int, long / 실수형 float, double / 문자형 char / 논리형 boolean이 있고,&lt;br /&gt;정수형 1, 2, 4, 8, 실수형 4, 8, 문자형 2, 논리형 1 바이트를 차지합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Tech Interview</category>
      <category>기술면접</category>
      <author>차차월드</author>
      <guid isPermaLink="true">https://cha-coding.tistory.com/102</guid>
      <comments>https://cha-coding.tistory.com/entry/Tech-Interview-Java#entry102comment</comments>
      <pubDate>Sun, 23 Jul 2023 22:18:05 +0900</pubDate>
    </item>
  </channel>
</rss>