<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>뚝딱뚝딱 개발소</title>
    <link>https://king-developer.tistory.com/</link>
    <description>&amp;quot;뚝딱뚝딱, 코드가 살아 숨 쉬는 개발소에 오신 걸 환영합니다!&amp;quot;</description>
    <language>ko</language>
    <pubDate>Sun, 5 Apr 2026 07:52:04 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>&amp;quot;주인장&amp;quot;</managingEditor>
    <image>
      <title>뚝딱뚝딱 개발소</title>
      <url>https://tistory1.daumcdn.net/tistory/6466484/attach/f89446217daf4cdeb25d5b312ef4e943</url>
      <link>https://king-developer.tistory.com</link>
    </image>
    <item>
      <title>[프로그래머스/코딩 테스트] 귤 고르기(JAVA)</title>
      <link>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%BD%94%EB%94%A9-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EA%B7%A4-%EA%B3%A0%EB%A5%B4%EA%B8%B0JAVA</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;경화는&amp;nbsp;과수원에서&amp;nbsp;귤을&amp;nbsp;수확했습니다.&amp;nbsp;경화는&amp;nbsp;수확한&amp;nbsp;귤&amp;nbsp;중&amp;nbsp;'k'개를&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;때&amp;nbsp;서로&amp;nbsp;다른&amp;nbsp;종류의&amp;nbsp;수를&amp;nbsp;최소화하고&amp;nbsp;싶습니다. &lt;br /&gt;&lt;br /&gt;예를&amp;nbsp;들어,&amp;nbsp;경화가&amp;nbsp;수확한&amp;nbsp;귤&amp;nbsp;8개의&amp;nbsp;크기가&amp;nbsp;[1,&amp;nbsp;3,&amp;nbsp;2,&amp;nbsp;5,&amp;nbsp;4,&amp;nbsp;5,&amp;nbsp;2,&amp;nbsp;3]&amp;nbsp;이라고&amp;nbsp;합시다.&amp;nbsp;경화가&amp;nbsp;귤&amp;nbsp;6개를&amp;nbsp;판매하고&amp;nbsp;싶다면,&amp;nbsp;크기가&amp;nbsp;1,&amp;nbsp;4인&amp;nbsp;귤을&amp;nbsp;제외한&amp;nbsp;여섯&amp;nbsp;개의&amp;nbsp;귤을&amp;nbsp;상자에&amp;nbsp;담으면,&amp;nbsp;귤의&amp;nbsp;크기의&amp;nbsp;종류가&amp;nbsp;2,&amp;nbsp;3,&amp;nbsp;5로&amp;nbsp;총&amp;nbsp;3가지가&amp;nbsp;되며&amp;nbsp;이때가&amp;nbsp;서로&amp;nbsp;다른&amp;nbsp;종류가&amp;nbsp;최소일&amp;nbsp;때입니다. &lt;br /&gt;&lt;br /&gt;경화가&amp;nbsp;한&amp;nbsp;상자에&amp;nbsp;담으려는&amp;nbsp;귤의&amp;nbsp;개수&amp;nbsp;k와&amp;nbsp;귤의&amp;nbsp;크기를&amp;nbsp;담은&amp;nbsp;배열&amp;nbsp;tangerine이&amp;nbsp;매개변수로&amp;nbsp;주어집니다.&amp;nbsp;경화가&amp;nbsp;귤&amp;nbsp;k개를&amp;nbsp;고를&amp;nbsp;때&amp;nbsp;크기가&amp;nbsp;서로&amp;nbsp;다른&amp;nbsp;종류의&amp;nbsp;수의&amp;nbsp;최솟값을&amp;nbsp;return&amp;nbsp;하도록&amp;nbsp;solution&amp;nbsp;함수를&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;1&amp;nbsp;&amp;le;&amp;nbsp;k&amp;nbsp;&amp;le;&amp;nbsp;tangerine의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;100,000 &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;tangerine의&amp;nbsp;원소&amp;nbsp;&amp;le;&amp;nbsp;10,000,000&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_1751030375171&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 귤 크기별로 몇 개씩 있는지 저장할 HashMap
HashMap&amp;lt;Integer, Integer&amp;gt; map = new HashMap&amp;lt;&amp;gt;();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;● 귤 크기별로 몇개씩 있는지 map에 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1751030440497&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// tangerine 배열을 순회하면서 귤 크기별 개수를 집계합니다.
for(int i : tangerine) {
    map.put(i, map.getOrDefault(i, 0) + 1);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;● tangerine 배열을 순회하면서 귤 크기별 개수를 집계한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1751030486021&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 귤 크기들만 추출해서 리스트로 만들기
List&amp;lt;Integer&amp;gt; list = new ArrayList&amp;lt;&amp;gt;(map.keySet());

// 귤 개수가 많은 순서대로 정렬
list.sort((o1,o2) -&amp;gt; map.get(o2) - map.get(o1));&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;● 귤 크기들만 추출해서 리스트로 만든 후 귤 개수가 많은 순서대로 정렬한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1751030524960&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for(int i : list) {
    // 정렬된 리스트를 순회하면서 귤 담기
    k -= map.get(i);

    // 사용한 귤 종류 수 증가
    answer++;

    // 목표 개수 이상 담았으면 종료
    if(k&amp;lt;=0) break;
}&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;● 정렬된 리스트를 순회하면서 귤을 담고 answer 변수를 사용하여 귤 종류 수를 중가시킨다. k = 0이 되었을 때는 목표를 달성하였기 때문에 for문을 종료한다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;전체 코드&lt;/h3&gt;
&lt;pre id=&quot;code_1751030685334&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;

class Solution {
    public int solution(int k, int[] tangerine) {
        int answer = 0;
        
        // 귤 크기별로 몇 개씩 있는지 저장할 HashMap
        HashMap&amp;lt;Integer, Integer&amp;gt; map = new HashMap&amp;lt;&amp;gt;();
        
        // tangerine 배열을 순회하면서 귤 크기별 개수를 집계합니다.
        for(int i : tangerine) {
            map.put(i, map.getOrDefault(i, 0) + 1);
        }
        
        // 귤 크기들만 추출해서 리스트로 만들기
        List&amp;lt;Integer&amp;gt; list = new ArrayList&amp;lt;&amp;gt;(map.keySet());
        
        // 귤 개수가 많은 순서대로 정렬
        list.sort((o1,o2) -&amp;gt; map.get(o2) - map.get(o1));
        
        for(int i : list) {
            // 정렬된 리스트를 순회하면서 귤 담기
            k -= map.get(i);
            
            // 사용한 귤 종류 수 증가
            answer++;
            
            // 목표 개수 이상 담았으면 종료
            if(k&amp;lt;=0) break;
        }
        
        return answer;
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>개발</category>
      <category>IT</category>
      <category>자바</category>
      <category>프로그래머스</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/45</guid>
      <comments>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%BD%94%EB%94%A9-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EA%B7%A4-%EA%B3%A0%EB%A5%B4%EA%B8%B0JAVA#entry45comment</comments>
      <pubDate>Thu, 25 Sep 2025 19:44:32 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/코딩 테스트] 롤케이크 자르기(JAVA)</title>
      <link>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%BD%94%EB%94%A9-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%A1%A4%EC%BC%80%EC%9D%B4%ED%81%AC-%EC%9E%90%EB%A5%B4%EA%B8%B0JAVA</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;철수는&amp;nbsp;롤케이크를&amp;nbsp;두&amp;nbsp;조각으로&amp;nbsp;잘라서&amp;nbsp;동생과&amp;nbsp;한&amp;nbsp;조각씩&amp;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;위에&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;공평하게&amp;nbsp;롤케이크가&amp;nbsp;나누어진&amp;nbsp;것으로&amp;nbsp;생각합니다. &lt;br /&gt;&lt;br /&gt;예를&amp;nbsp;들어,&amp;nbsp;롤케이크에&amp;nbsp;4가지&amp;nbsp;종류의&amp;nbsp;토핑이&amp;nbsp;올려져&amp;nbsp;있다고&amp;nbsp;합시다.&amp;nbsp;토핑들을&amp;nbsp;1,&amp;nbsp;2,&amp;nbsp;3,&amp;nbsp;4와&amp;nbsp;같이&amp;nbsp;번호로&amp;nbsp;표시했을&amp;nbsp;때,&amp;nbsp;케이크&amp;nbsp;위에&amp;nbsp;토핑들이&amp;nbsp;[1,&amp;nbsp;2,&amp;nbsp;1,&amp;nbsp;3,&amp;nbsp;1,&amp;nbsp;4,&amp;nbsp;1,&amp;nbsp;2]&amp;nbsp;순서로&amp;nbsp;올려져&amp;nbsp;있습니다.&amp;nbsp;만약&amp;nbsp;세&amp;nbsp;번째&amp;nbsp;토핑(1)과&amp;nbsp;네&amp;nbsp;번째&amp;nbsp;토핑(3)&amp;nbsp;사이를&amp;nbsp;자르면&amp;nbsp;롤케이크의&amp;nbsp;토핑은&amp;nbsp;[1,&amp;nbsp;2,&amp;nbsp;1],&amp;nbsp;[3,&amp;nbsp;1,&amp;nbsp;4,&amp;nbsp;1,&amp;nbsp;2]로&amp;nbsp;나뉘게&amp;nbsp;됩니다.&amp;nbsp;철수가&amp;nbsp;[1,&amp;nbsp;2,&amp;nbsp;1]이&amp;nbsp;놓인&amp;nbsp;조각을,&amp;nbsp;동생이&amp;nbsp;[3,&amp;nbsp;1,&amp;nbsp;4,&amp;nbsp;1,&amp;nbsp;2]가&amp;nbsp;놓인&amp;nbsp;조각을&amp;nbsp;먹게&amp;nbsp;되면&amp;nbsp;철수는&amp;nbsp;두&amp;nbsp;가지&amp;nbsp;토핑(1,&amp;nbsp;2)을&amp;nbsp;맛볼&amp;nbsp;수&amp;nbsp;있지만,&amp;nbsp;동생은&amp;nbsp;네&amp;nbsp;가지&amp;nbsp;토핑(1,&amp;nbsp;2,&amp;nbsp;3,&amp;nbsp;4)을&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;토핑(3)과&amp;nbsp;다섯&amp;nbsp;번째&amp;nbsp;토핑(1)&amp;nbsp;사이를&amp;nbsp;자르면&amp;nbsp;[1,&amp;nbsp;2,&amp;nbsp;1,&amp;nbsp;3],&amp;nbsp;[1,&amp;nbsp;4,&amp;nbsp;1,&amp;nbsp;2]로&amp;nbsp;나뉘게&amp;nbsp;됩니다.&amp;nbsp;이&amp;nbsp;경우&amp;nbsp;철수는&amp;nbsp;세&amp;nbsp;가지&amp;nbsp;토핑(1,&amp;nbsp;2,&amp;nbsp;3)을,&amp;nbsp;동생도&amp;nbsp;세&amp;nbsp;가지&amp;nbsp;토핑(1,&amp;nbsp;2,&amp;nbsp;4)을&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;[1,&amp;nbsp;2,&amp;nbsp;1,&amp;nbsp;3,&amp;nbsp;1],&amp;nbsp;[4,&amp;nbsp;1,&amp;nbsp;2]으로&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;롤케이크에&amp;nbsp;올려진&amp;nbsp;토핑들의&amp;nbsp;번호를&amp;nbsp;저장한&amp;nbsp;정수&amp;nbsp;배열&amp;nbsp;topping이&amp;nbsp;매개변수로&amp;nbsp;주어질&amp;nbsp;때,&amp;nbsp;롤케이크를&amp;nbsp;공평하게&amp;nbsp;자르는&amp;nbsp;방법의&amp;nbsp;수를&amp;nbsp;return&amp;nbsp;하도록&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;완성해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;제한사항&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1&amp;nbsp;&amp;le;&amp;nbsp;topping의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;1,000,000 &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;topping의&amp;nbsp;원소&amp;nbsp;&amp;le;&amp;nbsp;10,000&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;문제풀이&lt;/h3&gt;
&lt;pre id=&quot;code_1751208071966&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int count = 0;		   // result 값
int n = topping.length;	   // 매개변수 topping의 길이 

int[] left = new int[n];   // 왼쪽 토핑 종류 수
int[] right = new int[n];  // 오른쪽 토핑 종류 수

Set&amp;lt;Integer&amp;gt; leftSet = new HashSet&amp;lt;&amp;gt;();
Set&amp;lt;Integer&amp;gt; rightSet = new HashSet&amp;lt;&amp;gt;();&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;왼쪽과 오른쪽으로 구분하여 변수를 구현하였으며, 자료구조는 Set를 사용했다. 이유는 Set은 값을 중복으로 가지지 않아 종류를 비교할 때 편리하기 때문이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1751208205475&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 왼쪽
for (int i = 0; i &amp;lt; n; i++) {
    leftSet.add(topping[i]);
    left[i] = leftSet.size();
}

// 오른쪽
for (int i = n-1; i &amp;gt;= 0; i--) {
    rightSet.add(topping[i]);
    right[i] = rightSet.size();
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;leftSet(왼쪽)과 rightSet(오른쪽)에 매개변수 topping의 값을 담고 left, right 변수를 사용해 종류의 총 개수를 담습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1751208362439&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 자르기
for(int i = 0; i &amp;lt; n-1; i++) {
    if(left[i] == right[i+1]) {
        count++;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위에서 left과 right를 구분하였기 때문에 모든 구간을 잘라 비교하여 토핑의 종류의 개수가 동일한지 확인한 후 동일한 경우 카운트 +1을 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;전체 코드&lt;/h3&gt;
&lt;pre id=&quot;code_1751208476446&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;

class Solution {
    public int solution(int[] topping) {
        int count = 0;
        int n = topping.length;
        
        int[] left = new int[n];
        int[] right = new int[n];
        
        Set&amp;lt;Integer&amp;gt; leftSet = new HashSet&amp;lt;&amp;gt;();
        Set&amp;lt;Integer&amp;gt; rightSet = new HashSet&amp;lt;&amp;gt;();
        
        // 왼쪽
        for (int i = 0; i &amp;lt; n; i++) {
            leftSet.add(topping[i]);
            left[i] = leftSet.size();
        }
        
        // 오른쪽
        for (int i = n-1; i &amp;gt;= 0; i--) {
            rightSet.add(topping[i]);
            right[i] = rightSet.size();
        }
        
        // 자르기
        for(int i = 0; i &amp;lt; n-1; i++) {
            if(left[i] == right[i+1]) {
                count++;
            }
        }
        
        return count;
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>개발</category>
      <category>IT</category>
      <category>Java</category>
      <category>자바</category>
      <category>코딩</category>
      <category>프로그래머스</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/46</guid>
      <comments>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%BD%94%EB%94%A9-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%A1%A4%EC%BC%80%EC%9D%B4%ED%81%AC-%EC%9E%90%EB%A5%B4%EA%B8%B0JAVA#entry46comment</comments>
      <pubDate>Wed, 24 Sep 2025 20:53:11 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/코딩테스트] 오픈채팅방(JAVA)</title>
      <link>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%98%A4%ED%94%88%EC%B1%84%ED%8C%85%EB%B0%A9JAVA</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제 설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카카오톡&amp;nbsp;오픈채팅방에서는&amp;nbsp;친구가&amp;nbsp;아닌&amp;nbsp;사람들과&amp;nbsp;대화를&amp;nbsp;할&amp;nbsp;수&amp;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;신입사원인&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;들어오면&amp;nbsp;다음&amp;nbsp;메시지가&amp;nbsp;출력된다. &lt;br /&gt;&lt;br /&gt;&quot;[닉네임]님이&amp;nbsp;들어왔습니다.&quot; &lt;br /&gt;&lt;br /&gt;채팅방에서&amp;nbsp;누군가&amp;nbsp;나가면&amp;nbsp;다음&amp;nbsp;메시지가&amp;nbsp;출력된다. &lt;br /&gt;&lt;br /&gt;&quot;[닉네임]님이&amp;nbsp;나갔습니다.&quot; &lt;br /&gt;&lt;br /&gt;채팅방에서&amp;nbsp;닉네임을&amp;nbsp;변경하는&amp;nbsp;방법은&amp;nbsp;다음과&amp;nbsp;같이&amp;nbsp;두&amp;nbsp;가지이다. &lt;br /&gt;&lt;br /&gt;채팅방을&amp;nbsp;나간&amp;nbsp;후,&amp;nbsp;새로운&amp;nbsp;닉네임으로&amp;nbsp;다시&amp;nbsp;들어간다. &lt;br /&gt;채팅방에서&amp;nbsp;닉네임을&amp;nbsp;변경한다. &lt;br /&gt;닉네임을&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;예를&amp;nbsp;들어,&amp;nbsp;채팅방에&amp;nbsp;&quot;Muzi&quot;와&amp;nbsp;&quot;Prodo&quot;라는&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;&quot;Muzi님이&amp;nbsp;들어왔습니다.&quot; &lt;br /&gt;&quot;Prodo님이&amp;nbsp;들어왔습니다.&quot; &lt;br /&gt;&lt;br /&gt;채팅방에&amp;nbsp;있던&amp;nbsp;사람이&amp;nbsp;나가면&amp;nbsp;채팅방에는&amp;nbsp;다음과&amp;nbsp;같이&amp;nbsp;메시지가&amp;nbsp;남는다. &lt;br /&gt;&lt;br /&gt;&quot;Muzi님이&amp;nbsp;들어왔습니다.&quot; &lt;br /&gt;&quot;Prodo님이&amp;nbsp;들어왔습니다.&quot; &lt;br /&gt;&quot;Muzi님이&amp;nbsp;나갔습니다.&quot; &lt;br /&gt;&lt;br /&gt;Muzi가&amp;nbsp;나간후&amp;nbsp;다시&amp;nbsp;들어올&amp;nbsp;때,&amp;nbsp;Prodo&amp;nbsp;라는&amp;nbsp;닉네임으로&amp;nbsp;들어올&amp;nbsp;경우&amp;nbsp;기존에&amp;nbsp;채팅방에&amp;nbsp;남아있던&amp;nbsp;Muzi도&amp;nbsp;Prodo로&amp;nbsp;다음과&amp;nbsp;같이&amp;nbsp;변경된다. &lt;br /&gt;&lt;br /&gt;&quot;Prodo님이&amp;nbsp;들어왔습니다.&quot; &lt;br /&gt;&quot;Prodo님이&amp;nbsp;들어왔습니다.&quot; &lt;br /&gt;&quot;Prodo님이&amp;nbsp;나갔습니다.&quot; &lt;br /&gt;&quot;Prodo님이&amp;nbsp;들어왔습니다.&quot; &lt;br /&gt;&lt;br /&gt;채팅방은&amp;nbsp;중복&amp;nbsp;닉네임을&amp;nbsp;허용하기&amp;nbsp;때문에,&amp;nbsp;현재&amp;nbsp;채팅방에는&amp;nbsp;Prodo라는&amp;nbsp;닉네임을&amp;nbsp;사용하는&amp;nbsp;사람이&amp;nbsp;두&amp;nbsp;명이&amp;nbsp;있다.&amp;nbsp;이제,&amp;nbsp;채팅방에&amp;nbsp;두&amp;nbsp;번째로&amp;nbsp;들어왔던&amp;nbsp;Prodo가&amp;nbsp;Ryan으로&amp;nbsp;닉네임을&amp;nbsp;변경하면&amp;nbsp;채팅방&amp;nbsp;메시지는&amp;nbsp;다음과&amp;nbsp;같이&amp;nbsp;변경된다. &lt;br /&gt;&lt;br /&gt;&quot;Prodo님이&amp;nbsp;들어왔습니다.&quot; &lt;br /&gt;&quot;Ryan님이&amp;nbsp;들어왔습니다.&quot; &lt;br /&gt;&quot;Prodo님이&amp;nbsp;나갔습니다.&quot; &lt;br /&gt;&quot;Prodo님이&amp;nbsp;들어왔습니다.&quot; &lt;br /&gt;&lt;br /&gt;채팅방에&amp;nbsp;들어오고&amp;nbsp;나가거나,&amp;nbsp;닉네임을&amp;nbsp;변경한&amp;nbsp;기록이&amp;nbsp;담긴&amp;nbsp;문자열&amp;nbsp;배열&amp;nbsp;record가&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;return&amp;nbsp;하도록&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;완성하라.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;제한사항&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;record는&amp;nbsp;다음과&amp;nbsp;같은&amp;nbsp;문자열이&amp;nbsp;담긴&amp;nbsp;배열이며,&amp;nbsp;길이는&amp;nbsp;1&amp;nbsp;이상&amp;nbsp;100,000&amp;nbsp;이하이다. &lt;br /&gt;다음은&amp;nbsp;record에&amp;nbsp;담긴&amp;nbsp;문자열에&amp;nbsp;대한&amp;nbsp;설명이다. &lt;br /&gt;모든&amp;nbsp;유저는&amp;nbsp;[유저&amp;nbsp;아이디]로&amp;nbsp;구분한다. &lt;br /&gt;[유저&amp;nbsp;아이디]&amp;nbsp;사용자가&amp;nbsp;[닉네임]으로&amp;nbsp;채팅방에&amp;nbsp;입장&amp;nbsp;-&amp;nbsp;&quot;Enter&amp;nbsp;[유저&amp;nbsp;아이디]&amp;nbsp;[닉네임]&quot;&amp;nbsp;(ex.&amp;nbsp;&quot;Enter&amp;nbsp;uid1234&amp;nbsp;Muzi&quot;) &lt;br /&gt;[유저&amp;nbsp;아이디]&amp;nbsp;사용자가&amp;nbsp;채팅방에서&amp;nbsp;퇴장&amp;nbsp;-&amp;nbsp;&quot;Leave&amp;nbsp;[유저&amp;nbsp;아이디]&quot;&amp;nbsp;(ex.&amp;nbsp;&quot;Leave&amp;nbsp;uid1234&quot;) &lt;br /&gt;[유저&amp;nbsp;아이디]&amp;nbsp;사용자가&amp;nbsp;닉네임을&amp;nbsp;[닉네임]으로&amp;nbsp;변경&amp;nbsp;-&amp;nbsp;&quot;Change&amp;nbsp;[유저&amp;nbsp;아이디]&amp;nbsp;[닉네임]&quot;&amp;nbsp;(ex.&amp;nbsp;&quot;Change&amp;nbsp;uid1234&amp;nbsp;Muzi&quot;) &lt;br /&gt;첫&amp;nbsp;단어는&amp;nbsp;Enter,&amp;nbsp;Leave,&amp;nbsp;Change&amp;nbsp;중&amp;nbsp;하나이다. &lt;br /&gt;각&amp;nbsp;단어는&amp;nbsp;공백으로&amp;nbsp;구분되어&amp;nbsp;있으며,&amp;nbsp;알파벳&amp;nbsp;대문자,&amp;nbsp;소문자,&amp;nbsp;숫자로만&amp;nbsp;이루어져있다. &lt;br /&gt;유저&amp;nbsp;아이디와&amp;nbsp;닉네임은&amp;nbsp;알파벳&amp;nbsp;대문자,&amp;nbsp;소문자를&amp;nbsp;구별한다. &lt;br /&gt;유저&amp;nbsp;아이디와&amp;nbsp;닉네임의&amp;nbsp;길이는&amp;nbsp;1&amp;nbsp;이상&amp;nbsp;10&amp;nbsp;이하이다. &lt;br /&gt;채팅방에서&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제풀이&lt;/h3&gt;
&lt;pre id=&quot;code_1751345244431&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 유저 아이디 저장
Map&amp;lt;String, String&amp;gt; userMap = new HashMap&amp;lt;&amp;gt;(); 

// 출력용 로그 저장
List&amp;lt;String[]&amp;gt; logs = new ArrayList&amp;lt;&amp;gt;();&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Map을 통해서 유저 아이디를 저장하고, List를 통해 출력용 로그를 저장한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1751345426076&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for(String rec : record) {
    //record &quot; &quot;로 분리
    String[] parts = rec.split(&quot; &quot;);

    // record에서 분리된 값 변수에 담기
    String action = parts[0];
    String uId = parts[1];

	...

}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;매개변수로 받은 record 값을 split로 분리시킨 후 변수를 사용해 값을 저장한다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1751345491985&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 입장
if(action.equals(&quot;Enter&quot;)) {
    String nickName = parts[2];
    userMap.put(uId, nickName);
    logs.add(new String[]{action, uId});
// 퇴장
}else if(action.equals(&quot;Leave&quot;)) {
    logs.add(new String[]{action, uId});
// 닉네임 변경
}else if(action.equals(&quot;Change&quot;)) {
    String nickname = parts[2];
    userMap.put(uId, nickname);
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;입장, 퇴장, 닉네임 변경을 구분하여 if문 작성 후 값 저장&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1751345546048&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 결과 리스트
List&amp;lt;String&amp;gt; result = new ArrayList&amp;lt;&amp;gt;();
for(String[] log : logs) {
    String action = log[0];
    String uId = log[1];
    String nickname = userMap.get(uId);

    // 입장 메시지 생성
    if (action.equals(&quot;Enter&quot;)) {
        result.add(nickname + &quot;님이 들어왔습니다.&quot;);
    // 퇴장 메시지 생성    
    } else if (action.equals(&quot;Leave&quot;)) {
        result.add(nickname + &quot;님이 나갔습니다.&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위에 if문에서 모든 경우의 값을 저장하였으므로, 여기 코드에서는 출력을 위한 입장 메시지, 퇴장 메시지 코드를 작성합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;전체코드&lt;/h3&gt;
&lt;pre id=&quot;code_1751345644783&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 String[] solution(String[] record) {
        // 유저 아이디 저장
        Map&amp;lt;String, String&amp;gt; userMap = new HashMap&amp;lt;&amp;gt;(); 
        
        // 출력용 로그 저장
        List&amp;lt;String[]&amp;gt; logs = new ArrayList&amp;lt;&amp;gt;();
        
        for(String rec : record) {
            //record &quot; &quot;로 분리
            String[] parts = rec.split(&quot; &quot;);
            
            // record에서 분리된 값 변수에 담기
            String action = parts[0];
            String uId = parts[1];
            
            // 입장
            if(action.equals(&quot;Enter&quot;)) {
                String nickName = parts[2];
                userMap.put(uId, nickName);
                logs.add(new String[]{action, uId});
            // 퇴장
            }else if(action.equals(&quot;Leave&quot;)) {
                logs.add(new String[]{action, uId});
            // 닉네임 변경
            }else if(action.equals(&quot;Change&quot;)) {
                String nickname = parts[2];
                userMap.put(uId, nickname);
            }
            
        }
        
        // 결과 리스트
        List&amp;lt;String&amp;gt; result = new ArrayList&amp;lt;&amp;gt;();
        for(String[] log : logs) {
            String action = log[0];
            String uId = log[1];
            String nickname = userMap.get(uId);
            
            // 입장 메시지 생성
            if (action.equals(&quot;Enter&quot;)) {
                result.add(nickname + &quot;님이 들어왔습니다.&quot;);
            // 퇴장 메시지 생성    
            } else if (action.equals(&quot;Leave&quot;)) {
                result.add(nickname + &quot;님이 나갔습니다.&quot;);
            }
        }
        
        
        return result.toArray(new String[0]);
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>개발</category>
      <category>IT</category>
      <category>Java</category>
      <category>자바</category>
      <category>프로그래머스</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/47</guid>
      <comments>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%98%A4%ED%94%88%EC%B1%84%ED%8C%85%EB%B0%A9JAVA#entry47comment</comments>
      <pubDate>Mon, 22 Sep 2025 22:22:40 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/코딩테스트] 택배 상자 꺼내기(JAVA)</title>
      <link>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%ED%83%9D%EB%B0%B0-%EC%83%81%EC%9E%90-%EA%BA%BC%EB%82%B4%EA%B8%B0JAVA</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1&amp;nbsp;~&amp;nbsp;n의&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;왼쪽에서&amp;nbsp;오른쪽으로&amp;nbsp;가면서&amp;nbsp;1번&amp;nbsp;상자부터&amp;nbsp;번호&amp;nbsp;순서대로&amp;nbsp;택배&amp;nbsp;상자를&amp;nbsp;한&amp;nbsp;개씩&amp;nbsp;놓습니다.&amp;nbsp;가로로&amp;nbsp;택배&amp;nbsp;상자를&amp;nbsp;w개&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;w개&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;n개의&amp;nbsp;택배&amp;nbsp;상자를&amp;nbsp;모두&amp;nbsp;놓을&amp;nbsp;때까지&amp;nbsp;한&amp;nbsp;층에&amp;nbsp;w개씩&amp;nbsp;상자를&amp;nbsp;쌓습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ex1-1.png&quot; data-origin-width=&quot;460&quot; data-origin-height=&quot;320&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPSVV5/btsO9UXVUGp/N1aKsZvlieCusQ6n8jSFz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPSVV5/btsO9UXVUGp/N1aKsZvlieCusQ6n8jSFz1/img.png&quot; data-alt=&quot;프로그래머스 택배 상자 꺼내기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPSVV5/btsO9UXVUGp/N1aKsZvlieCusQ6n8jSFz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPSVV5%2FbtsO9UXVUGp%2FN1aKsZvlieCusQ6n8jSFz1%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;460&quot; height=&quot;320&quot; data-filename=&quot;ex1-1.png&quot; data-origin-width=&quot;460&quot; data-origin-height=&quot;320&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;프로그래머스 택배 상자 꺼내기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위&amp;nbsp;그림은&amp;nbsp;w&amp;nbsp;=&amp;nbsp;6일&amp;nbsp;때&amp;nbsp;택배&amp;nbsp;상자&amp;nbsp;22개를&amp;nbsp;쌓은&amp;nbsp;예시입니다. &lt;br /&gt;다음&amp;nbsp;날&amp;nbsp;손님은&amp;nbsp;자신의&amp;nbsp;택배를&amp;nbsp;찾으러&amp;nbsp;창고에&amp;nbsp;왔습니다.&amp;nbsp;당신은&amp;nbsp;손님이&amp;nbsp;자신의&amp;nbsp;택배&amp;nbsp;상자&amp;nbsp;번호를&amp;nbsp;말하면&amp;nbsp;해당&amp;nbsp;택배&amp;nbsp;상자를&amp;nbsp;꺼내줍니다.&amp;nbsp;택배&amp;nbsp;상자&amp;nbsp;A를&amp;nbsp;꺼내려면&amp;nbsp;먼저&amp;nbsp;A&amp;nbsp;위에&amp;nbsp;있는&amp;nbsp;다른&amp;nbsp;모든&amp;nbsp;상자를&amp;nbsp;꺼내야&amp;nbsp;A를&amp;nbsp;꺼낼&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;예를&amp;nbsp;들어,&amp;nbsp;위&amp;nbsp;그림에서&amp;nbsp;8번&amp;nbsp;상자를&amp;nbsp;꺼내려면&amp;nbsp;먼저&amp;nbsp;20번,&amp;nbsp;17번&amp;nbsp;상자를&amp;nbsp;꺼내야&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;당신은&amp;nbsp;꺼내려는&amp;nbsp;상자&amp;nbsp;번호가&amp;nbsp;주어졌을&amp;nbsp;때,&amp;nbsp;꺼내려는&amp;nbsp;상자를&amp;nbsp;포함해&amp;nbsp;총&amp;nbsp;몇&amp;nbsp;개의&amp;nbsp;택배&amp;nbsp;상자를&amp;nbsp;꺼내야&amp;nbsp;하는지&amp;nbsp;알고&amp;nbsp;싶습니다. &lt;br /&gt;&lt;br /&gt;창고에&amp;nbsp;있는&amp;nbsp;택배&amp;nbsp;상자의&amp;nbsp;개수를&amp;nbsp;나타내는&amp;nbsp;정수&amp;nbsp;n,&amp;nbsp;가로로&amp;nbsp;놓는&amp;nbsp;상자의&amp;nbsp;개수를&amp;nbsp;나타내는&amp;nbsp;정수&amp;nbsp;w와&amp;nbsp;꺼내려는&amp;nbsp;택배&amp;nbsp;상자의&amp;nbsp;번호를&amp;nbsp;나타내는&amp;nbsp;정수&amp;nbsp;num이&amp;nbsp;매개변수로&amp;nbsp;주어집니다.&amp;nbsp;이때,&amp;nbsp;꺼내야&amp;nbsp;하는&amp;nbsp;상자의&amp;nbsp;총개수를&amp;nbsp;return&amp;nbsp;하도록&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;완성해&amp;nbsp;주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;제한사항&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2&amp;nbsp;&amp;le;&amp;nbsp;n&amp;nbsp;&amp;le;&amp;nbsp;100 &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;w&amp;nbsp;&amp;le;&amp;nbsp;10 &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;num&amp;nbsp;&amp;le;&amp;nbsp;n&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_1752035236781&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 상자 번호는 1부터 시작하고 배열은 0부터 시작
int index = num -1;

// 해당 상자가 몇 층(layer)에 있는지 계산
int layer = index / w;

// 해당 상자가 층 내에서 몇 번째 열에 존재하는지
int col;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;로직에 필요한 변수를 선언한다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1752035297861&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if(layer % 2 == 0) {
    // 왼쪽에서 오른쪽
    col = index % w;
}else {
    // 오른쪽에서 왼쪽
    col = w - 1 - (index % w);
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;상자를 쌓을 때, 짝수는 왼쪽에서 오른쪽이고 홀수는 오른쪽에서 왼쪽이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1752035344793&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 위에 쌓인 상자 개수 카운트
int count = 0;

// 위에 있는 층들에서 같은 col에 있는 상자 수 세기
for(int i = layer + 1; ; i++) {
    // i층에서 col 위치에 있는 상자 번호
    int upperBoxNum;

    if(i % 2 == 0) {
        // 짝수층은 왼쪽에서 오른쪽으로
        upperBoxNum = i * w + col + 1;
    }else {
        // 홀수층은 오른쪽에서 왼쪽으로
        upperBoxNum = (i + 1) * w - col;
    }

    // 상자 번호가 전체 상자 개수 n을 초과하면
    if (upperBoxNum &amp;gt; n) {
        break;   
    }

    // 존재하는 상자이므로 꺼내야 하는 상자 수 증가
    count++;

}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;목표 상자까지 몇 개의 상자를 제거해야하는지에 관한 로직으로 가장 중요한 부분은 i층에서 col 위치에 있는 상자 번호를 찾는 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1752035449562&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 자기 자신 포함하여 총 개수 반환  
return count + 1;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;결과 값을 return한다. 여기서 중요한 점은 위의 로직에서 자기 자신을 제외하였기 때문에 자기 자신을 포함하기 위해 +1 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;전체 코드&lt;/h3&gt;
&lt;pre id=&quot;code_1752035694536&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    public int solution(int n, int w, int num) {
        // 상자 번호는 1부터 시작하고 배열은 0부터 시작
        int index = num -1;
        
        // 해당 상자가 몇 층(layer)에 있는지 계산
        int layer = index / w;
        
        // 해당 상자가 층 내에서 몇 번째 열에 존재하는지
        int col;
        
       
        if(layer % 2 == 0) {
            // 왼쪽에서 오른쪽
            col = index % w;
        }else {
            // 오른쪽에서 왼쪽
            col = w - 1 - (index % w);
        }
        
        // 위에 쌓인 상자 개수 카운트
        int count = 0;
        
        // 위에 있는 층들에서 같은 col에 있는 상자 수 세기
        for(int i = layer + 1; ; i++) {
            // i층에서 col 위치에 있는 상자 번호
            int upperBoxNum;
            
            if(i % 2 == 0) {
                // 짝수층은 왼쪽에서 오른쪽으로
                upperBoxNum = i * w + col + 1;
            }else {
                // 홀수층은 오른쪽에서 왼쪽으로
                upperBoxNum = (i + 1) * w - col;
            }
            
            // 상자 번호가 전체 상자 개수 n을 초과하면
            if (upperBoxNum &amp;gt; n) {
                break;   
            }
            
            // 존재하는 상자이므로 꺼내야 하는 상자 수 증가
            count++;
            
        }
        
      // 자기 자신 포함하여 총 개수 반환  
      return count + 1;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1752035717758&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/389478?language=java&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/gJGYn/hyZjbNN3CF/1gPl8XkVbZYY443aZLTtL1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/1fh8S/hyZf4W6TEP/CkW20K1hv4WL4Qp2Cg5u40/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/389478?language=java&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/389478?language=java&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/gJGYn/hyZjbNN3CF/1gPl8XkVbZYY443aZLTtL1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/1fh8S/hyZf4W6TEP/CkW20K1hv4WL4Qp2Cg5u40/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;</description>
      <category>개발</category>
      <category>IT</category>
      <category>Java</category>
      <category>프로그래머스</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/48</guid>
      <comments>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%ED%83%9D%EB%B0%B0-%EC%83%81%EC%9E%90-%EA%BA%BC%EB%82%B4%EA%B8%B0JAVA#entry48comment</comments>
      <pubDate>Sat, 20 Sep 2025 21:41:21 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/코딩테스트] 삼총사(JAVA)</title>
      <link>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%82%BC%EC%B4%9DJAVA</link>
      <description>&lt;blockquote data-ke-size=&quot;size23&quot; data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;안녕하세요!&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;017&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/017.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/017.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한국중학교에&amp;nbsp;다니는&amp;nbsp;학생들은&amp;nbsp;각자&amp;nbsp;정수&amp;nbsp;번호를&amp;nbsp;갖고&amp;nbsp;있습니다.&amp;nbsp;이&amp;nbsp;학교&amp;nbsp;학생&amp;nbsp;3명의&amp;nbsp;정수&amp;nbsp;번호를&amp;nbsp;더했을&amp;nbsp;때&amp;nbsp;0이&amp;nbsp;되면&amp;nbsp;3명의&amp;nbsp;학생은&amp;nbsp;삼총사라고&amp;nbsp;합니다.&amp;nbsp;예를&amp;nbsp;들어,&amp;nbsp;5명의&amp;nbsp;학생이&amp;nbsp;있고,&amp;nbsp;각각의&amp;nbsp;정수&amp;nbsp;번호가&amp;nbsp;순서대로&amp;nbsp;-2,&amp;nbsp;3,&amp;nbsp;0,&amp;nbsp;2,&amp;nbsp;-5일&amp;nbsp;때,&amp;nbsp;첫&amp;nbsp;번째,&amp;nbsp;세&amp;nbsp;번째,&amp;nbsp;네&amp;nbsp;번째&amp;nbsp;학생의&amp;nbsp;정수&amp;nbsp;번호를&amp;nbsp;더하면&amp;nbsp;0이므로&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;0이므로&amp;nbsp;세&amp;nbsp;학생도&amp;nbsp;삼총사입니다.&amp;nbsp;따라서&amp;nbsp;이&amp;nbsp;경우&amp;nbsp;한국중학교에서는&amp;nbsp;두&amp;nbsp;가지&amp;nbsp;방법으로&amp;nbsp;삼총사를&amp;nbsp;만들&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;한국중학교&amp;nbsp;학생들의&amp;nbsp;번호를&amp;nbsp;나타내는&amp;nbsp;정수&amp;nbsp;배열&amp;nbsp;number가&amp;nbsp;매개변수로&amp;nbsp;주어질&amp;nbsp;때,&amp;nbsp;학생들&amp;nbsp;중&amp;nbsp;삼총사를&amp;nbsp;만들&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;방법의&amp;nbsp;수를&amp;nbsp;return&amp;nbsp;하도록&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;완성하세요. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;제한사항&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3&amp;nbsp;&amp;le;&amp;nbsp;number의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;13 &lt;br /&gt;-1,000&amp;nbsp;&amp;le;&amp;nbsp;number의&amp;nbsp;각&amp;nbsp;원소&amp;nbsp;&amp;le;&amp;nbsp;1,000 &lt;br /&gt;서로&amp;nbsp;다른&amp;nbsp;학생의&amp;nbsp;정수&amp;nbsp;번호가&amp;nbsp;같을&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;문제풀이&lt;/h3&gt;
&lt;pre id=&quot;code_1752230408354&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 첫번째 학생
for(int i = 0; i &amp;lt; number.length - 2; i++) {
	...
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;첫번째 학생이 number를 뽑을 수 있는 범위는 다른 학생들과 중복을 피하기 위해서 i = 0 부터 number.length - 2까지이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1752230527132&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 두번째 학생
for(int j = i +1; j &amp;lt; number.length - 1; j++) {
    ...
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;두번째 학생이 number를 뽑을 수 있는 범위는 다른 학생들과 중복을 피하기 위해서 j = i + 1 부터&lt;span&gt;&amp;nbsp;&lt;/span&gt;number.length - 1까지이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1752230567924&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 세번째 학생
for(int k = j + 1; k &amp;lt; number.length; k++) {
	...
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;세번째 학생이 number를 뽑을 수 있는 범위는 다른 학생들과 중복을 피하기 위해서 k = j + 1 부터&lt;span&gt;&amp;nbsp;&lt;/span&gt;number.length 까지이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1752230613829&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if(number[i] + number[j] + number[k] == 0) {
    count++;
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;첫번째, 두번째, 세번째 모든 학생의 number를 더한 값이 0일 경우 count를 해서 count 값을 return한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;전체코드&lt;/h3&gt;
&lt;pre id=&quot;code_1752230685212&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    public int solution(int[] number) {
        int count = 0;
        
        // 첫번째 학생
        for(int i = 0; i &amp;lt; number.length - 2; i++) {
            // 두번째 학생
            for(int j = i +1; j &amp;lt; number.length - 1; j++) {
                // 세번째 학생
                for(int k = j + 1; k &amp;lt; number.length; k++) {
                    if(number[i] + number[j] + number[k] == 0) {
                        count++;
                    }
                }
            }
        }
        
        return count;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1752230820475&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/131705?language=java&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/nLXGI/hyZjvzeIUC/r3byvh7kRM8XpqG2WZdjeK/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/QoFvc/hyZjEv9SZp/9qhvegeoeDoJzQLWbEpSXk/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/131705?language=java&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131705?language=java&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/nLXGI/hyZjvzeIUC/r3byvh7kRM8XpqG2WZdjeK/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/QoFvc/hyZjEv9SZp/9qhvegeoeDoJzQLWbEpSXk/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;</description>
      <category>개발</category>
      <category>IT</category>
      <category>Java</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/49</guid>
      <comments>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%82%BC%EC%B4%9DJAVA#entry49comment</comments>
      <pubDate>Fri, 19 Sep 2025 21:43:20 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/코딩테스트] 숫자 짝궁(JAVA)</title>
      <link>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%88%AB%EC%9E%90-%EC%A7%9D%EA%B6%81JAVA</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두&amp;nbsp;정수&amp;nbsp;X,&amp;nbsp;Y의&amp;nbsp;임의의&amp;nbsp;자리에서&amp;nbsp;공통으로&amp;nbsp;나타나는&amp;nbsp;정수&amp;nbsp;k(0&amp;nbsp;&amp;le;&amp;nbsp;k&amp;nbsp;&amp;le;&amp;nbsp;9)들을&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;사용합니다).&amp;nbsp;X,&amp;nbsp;Y의&amp;nbsp;짝꿍이&amp;nbsp;존재하지&amp;nbsp;않으면,&amp;nbsp;짝꿍은&amp;nbsp;-1입니다.&amp;nbsp;X,&amp;nbsp;Y의&amp;nbsp;짝꿍이&amp;nbsp;0으로만&amp;nbsp;구성되어&amp;nbsp;있다면,&amp;nbsp;짝꿍은&amp;nbsp;0입니다. &lt;br /&gt;&lt;br /&gt;예를&amp;nbsp;들어,&amp;nbsp;X&amp;nbsp;=&amp;nbsp;3403이고&amp;nbsp;Y&amp;nbsp;=&amp;nbsp;13203이라면,&amp;nbsp;X와&amp;nbsp;Y의&amp;nbsp;짝꿍은&amp;nbsp;X와&amp;nbsp;Y에서&amp;nbsp;공통으로&amp;nbsp;나타나는&amp;nbsp;3,&amp;nbsp;0,&amp;nbsp;3으로&amp;nbsp;만들&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;가장&amp;nbsp;큰&amp;nbsp;정수인&amp;nbsp;330입니다.&amp;nbsp;다른&amp;nbsp;예시로&amp;nbsp;X&amp;nbsp;=&amp;nbsp;5525이고&amp;nbsp;Y&amp;nbsp;=&amp;nbsp;1255이면&amp;nbsp;X와&amp;nbsp;Y의&amp;nbsp;짝꿍은&amp;nbsp;X와&amp;nbsp;Y에서&amp;nbsp;공통으로&amp;nbsp;나타나는&amp;nbsp;2,&amp;nbsp;5,&amp;nbsp;5로&amp;nbsp;만들&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;가장&amp;nbsp;큰&amp;nbsp;정수인&amp;nbsp;552입니다(X에는&amp;nbsp;5가&amp;nbsp;3개,&amp;nbsp;Y에는&amp;nbsp;5가&amp;nbsp;2개&amp;nbsp;나타나므로&amp;nbsp;남는&amp;nbsp;5&amp;nbsp;한&amp;nbsp;개는&amp;nbsp;짝&amp;nbsp;지을&amp;nbsp;수&amp;nbsp;없습니다.) &lt;br /&gt;두&amp;nbsp;정수&amp;nbsp;X,&amp;nbsp;Y가&amp;nbsp;주어졌을&amp;nbsp;때,&amp;nbsp;X,&amp;nbsp;Y의&amp;nbsp;짝꿍을&amp;nbsp;return하는&amp;nbsp;solution&amp;nbsp;함수를&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;3&amp;nbsp;&amp;le;&amp;nbsp;X,&amp;nbsp;Y의&amp;nbsp;길이(자릿수)&amp;nbsp;&amp;le;&amp;nbsp;3,000,000입니다. &lt;br /&gt;X,&amp;nbsp;Y는&amp;nbsp;0으로&amp;nbsp;시작하지&amp;nbsp;않습니다. &lt;br /&gt;X,&amp;nbsp;Y의&amp;nbsp;짝꿍은&amp;nbsp;상당히&amp;nbsp;큰&amp;nbsp;정수일&amp;nbsp;수&amp;nbsp;있으므로,&amp;nbsp;문자열로&amp;nbsp;반환합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제풀이&lt;/h3&gt;
&lt;pre id=&quot;code_1752591228129&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int[] countX = new int[10];
int[] countY = new int[10];&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파라미터 X, Y의 범위가 0 &amp;lt;= k &amp;lt;= 9를 생각하여 변수를 생성한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1752591357744&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 각 숫자의 등장 횟수 계산
for (char c : X.toCharArray()) {
    countX[c - '0']++;
}
for (char c : Y.toCharArray()) {
    countY[c - '0']++;
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;X, Y를 Char 타입으로 변환 후 아스키 코드로 변환 시킨다. 그 후 등장한 숫자의 횟수를 count한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1752591771338&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;StringBuilder sb = new StringBuilder();

// 9부터 0까지 숫자를 큰 순서로 채우기
for (int i = 9; i &amp;gt;= 0; i--) {
    int pairCount = Math.min(countX[i], countY[i]);
    for (int j = 0; j &amp;lt; pairCount; j++) {
        sb.append(i);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Math.min 함수를 사용하여 최소 길이를 구한 후 StringBuilder에 값을 추가한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1752592173587&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if (sb.length() == 0) {
    return &quot;-1&quot;; // 공통 숫자 없음
}

if (sb.charAt(0) == '0') {
    return &quot;0&quot;; // 모두 0으로만 이루어짐
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예외 처리를 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;전체코드&lt;/h3&gt;
&lt;pre id=&quot;code_1752592191138&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;

class Solution {
    public String solution(String X, String Y) {
        int[] countX = new int[10];
        int[] countY = new int[10];

        // 각 숫자의 등장 횟수 계산
        for (char c : X.toCharArray()) {
            countX[c - '0']++;
        }
        for (char c : Y.toCharArray()) {
            countY[c - '0']++;
        }

        StringBuilder sb = new StringBuilder();

        // 9부터 0까지 숫자를 큰 순서로 채우기
        for (int i = 9; i &amp;gt;= 0; i--) {
            int pairCount = Math.min(countX[i], countY[i]);
            for (int j = 0; j &amp;lt; pairCount; j++) {
                sb.append(i);
            }
        }

        if (sb.length() == 0) {
            return &quot;-1&quot;; // 공통 숫자 없음
        }

        if (sb.charAt(0) == '0') {
            return &quot;0&quot;; // 모두 0으로만 이루어짐
        }

        return sb.toString();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;figure id=&quot;og_1752592214052&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/131128&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b05GA8/hyZncMppUI/K0KxzGQIttOSBK10FZgdQ1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/wPitx/hyZjjl2A7B/xyncLGHsgZwSX7bzLUFBq0/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/131128&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131128&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b05GA8/hyZncMppUI/K0KxzGQIttOSBK10FZgdQ1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/wPitx/hyZjjl2A7B/xyncLGHsgZwSX7bzLUFBq0/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;</description>
      <category>개발</category>
      <category>IT</category>
      <category>Java</category>
      <category>코딩</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/50</guid>
      <comments>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%88%AB%EC%9E%90-%EC%A7%9D%EA%B6%81JAVA#entry50comment</comments>
      <pubDate>Wed, 17 Sep 2025 20:42:23 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/코딩 테스트] 미로 탈출(JAVA)</title>
      <link>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%BD%94%EB%94%A9-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%AF%B8%EB%A1%9C-%ED%83%88%EC%B6%9CJAVA</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제 설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1&amp;nbsp;x&amp;nbsp;1&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;수&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;수&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;빠져나가는&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;1초가&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;미로를&amp;nbsp;나타낸&amp;nbsp;문자열&amp;nbsp;배열&amp;nbsp;maps가&amp;nbsp;매개변수로&amp;nbsp;주어질&amp;nbsp;때,&amp;nbsp;미로를&amp;nbsp;탈출하는데&amp;nbsp;필요한&amp;nbsp;최소&amp;nbsp;시간을&amp;nbsp;return&amp;nbsp;하는&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;완성해주세요.&amp;nbsp;만약,&amp;nbsp;탈출할&amp;nbsp;수&amp;nbsp;없다면&amp;nbsp;-1을&amp;nbsp;return&amp;nbsp;해주세요.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;제한 사항&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5&amp;nbsp;&amp;le;&amp;nbsp;maps의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;100 &lt;br /&gt;5&amp;nbsp;&amp;le;&amp;nbsp;maps[i]의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;100 &lt;br /&gt;maps[i]는&amp;nbsp;다음&amp;nbsp;5개의&amp;nbsp;문자들로만&amp;nbsp;이루어져&amp;nbsp;있습니다. &lt;br /&gt;S&amp;nbsp;:&amp;nbsp;시작&amp;nbsp;지점 &lt;br /&gt;E&amp;nbsp;:&amp;nbsp;출구 &lt;br /&gt;L&amp;nbsp;:&amp;nbsp;레버 &lt;br /&gt;O&amp;nbsp;:&amp;nbsp;통로 &lt;br /&gt;X&amp;nbsp;:&amp;nbsp;벽 &lt;br /&gt;시작&amp;nbsp;지점과&amp;nbsp;출구,&amp;nbsp;레버는&amp;nbsp;항상&amp;nbsp;다른&amp;nbsp;곳에&amp;nbsp;존재하며&amp;nbsp;한&amp;nbsp;개씩만&amp;nbsp;존재합니다. &lt;br /&gt;출구는&amp;nbsp;레버가&amp;nbsp;당겨지지&amp;nbsp;않아도&amp;nbsp;지나갈&amp;nbsp;수&amp;nbsp;있으며,&amp;nbsp;모든&amp;nbsp;통로,&amp;nbsp;출구,&amp;nbsp;레버,&amp;nbsp;시작점은&amp;nbsp;여러&amp;nbsp;번&amp;nbsp;지나갈&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;문제 풀이&lt;/h3&gt;
&lt;pre id=&quot;code_1750911449618&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 미로
static String[][] miro;

// 좌우
static int[] dx = {-1, 1, 0, 0};

// 상하
static int[] dy = {0, 0, -1, 1};&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문제 풀이에 필요한 전역 변수를 선언한다. 2차원 배열인 미로 변수를 생성하고 상하좌우로 움직일 수 있는 변수도 같이 생성한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1750911701834&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;miro = new String[maps.length][maps[0].length()];

// start, labor를 담을 변수 선언
int[] start = new int[2];
int[] labor = new int[2];&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;miro의 범위를 정하고 start(시작), labor(레버) 위치를 담을 지역 변수를 선언한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1750912108654&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for(int i = 0; i&amp;lt;maps.length; i++) {
    String[] tmp = maps[i].split(&quot;&quot;);

    for(int j = 0; j&amp;lt;tmp.length; j++) {
        // 2차원 문자 배열로 변환하여 저장
        miro[i][j] = tmp[j];

        // start 위치 저장
        if(miro[i][j].equals(&quot;S&quot;)) {
            start = new int[]{i,j};
        }

        // labor 위치 저장
        if(miro[i][j].equals(&quot;L&quot;)) {
            labor = new int[]{i,j};
        }            
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;매개변수로 받은 maps를 2차원 배열 형식으로 값을 담은 후 start, labor의 위치를 저장한다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1750912679801&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int result = bfs(start, &quot;L&quot;);
int result2 = bfs(labor, &quot;E&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;result는 시작부분에서 레버로 가는 개수이고, result2는 레버에서 끝으로 가는 개수이다. bfs 메소드는 바로 아래에 설명하겠습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1750912784182&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; public int bfs(int[] start, String target) {
        // 큐를 생성하여 2차원 배열 위치의 값과 이동한 수를 담는다.
        Queue&amp;lt;int[]&amp;gt; queue = new LinkedList&amp;lt;&amp;gt;();
        queue.add(new int[]{start[0], start[1], 0});
        
        // 방문여부
        boolean[][] visited = new boolean[miro.length][miro[0].length];
        
        while(!queue.isEmpty()) {
            int x = queue.peek()[0];
            int y = queue.peek()[1];
            int count = queue.peek()[2];
            visited[x][y] = true;
            
            if(miro[x][y].equals(target)) {
                return count;
            }
            
            queue.poll();
            
            // 상, 하, 좌, 우 4방향
            for(int i = 0; i&amp;lt;4; i++) {
                int nx = x + dx[i];
                int ny = y + dy[i];
                
                // 미로 밖으로 벗어나지 않도록 범위 설정
                if(nx &amp;gt;= 0 &amp;amp;&amp;amp; nx &amp;lt; miro.length &amp;amp;&amp;amp; 
                   ny &amp;gt;= 0 &amp;amp;&amp;amp; ny &amp;lt; miro[0].length &amp;amp;&amp;amp; 
                   !visited[nx][ny]) {
                    
                    // 벽이 아닌 경우
                    if(!miro[nx][ny].equals(&quot;X&quot;)) {
                        visited[nx][ny] = true;
                        queue.add(new int[]{nx, ny, count+1});
                    }
                }
                
            }
            
       }
         
    return -1;   
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위의 메소드는 bfs(너비 우선 탐색)으로 시작으로부터 가까운 지점 먼저 방문하는 순회 방식이다. queue를 생성하고 위에서 선언했던 상, 하, 좌, 우 4방향으로 한칸씩 움직이면서 목표 지점까지 도달하게 하는 매소드이다. 목표 지점으로 도달하는 과정에서 미로 밖으로 벗어나지 않도록 하는 범위 설정이 필요하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;전체 코드&lt;/h3&gt;
&lt;pre id=&quot;code_1750913795928&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.LinkedList;
import java.util.Queue;

class Solution {
    // 미로
    static String[][] miro;
    
    // 좌우
    static int[] dx = {-1, 1, 0, 0};
    
    // 상하
    static int[] dy = {0, 0, -1, 1};
    
    public int solution(String[] maps) {
        miro = new String[maps.length][maps[0].length()];
        
        // start, labor를 담을 변수 선언
        int[] start = new int[2];
        int[] labor = new int[2];
        
        for(int i = 0; i&amp;lt;maps.length; i++) {
            String[] tmp = maps[i].split(&quot;&quot;);
            
            for(int j = 0; j&amp;lt;tmp.length; j++) {
                // 2차원 문자 배열로 변환하여 저장
                miro[i][j] = tmp[j];
                
                // start 위치 저장
                if(miro[i][j].equals(&quot;S&quot;)) {
                    start = new int[]{i,j};
                }
                
                // labor 위치 저장
                if(miro[i][j].equals(&quot;L&quot;)) {
                    labor = new int[]{i,j};
                }            
            }
        }
        
        int result = bfs(start, &quot;L&quot;);
        int result2 = bfs(labor, &quot;E&quot;);
        
        if(result == - 1 || result2 == -1) {
            return -1;
        }
        
        return result + result2;
    }
    
    public int bfs(int[] start, String target) {
        Queue&amp;lt;int[]&amp;gt; queue = new LinkedList&amp;lt;&amp;gt;();
        queue.add(new int[]{start[0], start[1], 0});
        
        // 방문여부
        boolean[][] visited = new boolean[miro.length][miro[0].length];
        
        // 
        while(!queue.isEmpty()) {
            int x = queue.peek()[0];
            int y = queue.peek()[1];
            int count = queue.peek()[2];
            visited[x][y] = true;
            
            if(miro[x][y].equals(target)) {
                return count;
            }
            
            queue.poll();
            
            // 상, 하, 좌, 우 4방향
            for(int i = 0; i&amp;lt;4; i++) {
                int nx = x + dx[i];
                int ny = y + dy[i];
                
                // 미로 밖으로 벗어나지 않도록 범위 설정
                if(nx &amp;gt;= 0 &amp;amp;&amp;amp; nx &amp;lt; miro.length &amp;amp;&amp;amp; 
                   ny &amp;gt;= 0 &amp;amp;&amp;amp; ny &amp;lt; miro[0].length &amp;amp;&amp;amp; 
                   !visited[nx][ny]) {
                    
                    // 벽이 아닌 경우
                    if(!miro[nx][ny].equals(&quot;X&quot;)) {
                        visited[nx][ny] = true;
                        queue.add(new int[]{nx, ny, count+1});
                    }
                }
                
            }
            
        }
         
        return -1;   
    }
    
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발</category>
      <category>IT</category>
      <category>Java</category>
      <category>자바</category>
      <category>프로그래머스</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/44</guid>
      <comments>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%BD%94%EB%94%A9-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%AF%B8%EB%A1%9C-%ED%83%88%EC%B6%9CJAVA#entry44comment</comments>
      <pubDate>Thu, 26 Jun 2025 21:56:41 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/코딩테스트] 콜라 문제(JAVA)</title>
      <link>https://king-developer.tistory.com/entry/TEST</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오래전 유행했던 콜라 문제가 있습니다. 콜라 문제의 지문은 다음과 같습니다.&lt;br /&gt;정답은 아무에게도 말하지 마세요.&lt;br /&gt;콜라 빈 병 2개를 가져다주면 콜라 1병을 주는 마트가 있다. 빈 병 20개를 가져다주면 몇 병을 받을 수 있는가?&lt;br /&gt;단,&amp;nbsp;보유&amp;nbsp;중인&amp;nbsp;빈&amp;nbsp;병이&amp;nbsp;2개&amp;nbsp;미만이면,&amp;nbsp;콜라를&amp;nbsp;받을&amp;nbsp;수&amp;nbsp;없다. &lt;br /&gt;&lt;br /&gt;문제를&amp;nbsp;풀던&amp;nbsp;상빈이는&amp;nbsp;콜라&amp;nbsp;문제의&amp;nbsp;완벽한&amp;nbsp;해답을&amp;nbsp;찾았습니다.&amp;nbsp;상빈이가&amp;nbsp;푼&amp;nbsp;방법은&amp;nbsp;아래&amp;nbsp;그림과&amp;nbsp;같습니다.&amp;nbsp;우선&amp;nbsp;콜라&amp;nbsp;빈&amp;nbsp;병&amp;nbsp;20병을&amp;nbsp;가져가서&amp;nbsp;10병을&amp;nbsp;받습니다.&amp;nbsp;받은&amp;nbsp;10병을&amp;nbsp;모두&amp;nbsp;마신&amp;nbsp;뒤,&amp;nbsp;가져가서&amp;nbsp;5병을&amp;nbsp;받습니다.&amp;nbsp;5병&amp;nbsp;중&amp;nbsp;4병을&amp;nbsp;모두&amp;nbsp;마신&amp;nbsp;뒤&amp;nbsp;가져가서&amp;nbsp;2병을&amp;nbsp;받고,&amp;nbsp;또&amp;nbsp;2병을&amp;nbsp;모두&amp;nbsp;마신&amp;nbsp;뒤&amp;nbsp;가져가서&amp;nbsp;1병을&amp;nbsp;받습니다.&amp;nbsp;받은&amp;nbsp;1병과&amp;nbsp;5병을&amp;nbsp;받았을&amp;nbsp;때&amp;nbsp;남은&amp;nbsp;1병을&amp;nbsp;모두&amp;nbsp;마신&amp;nbsp;뒤&amp;nbsp;가져가면&amp;nbsp;1병을&amp;nbsp;또&amp;nbsp;받을&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;이&amp;nbsp;경우&amp;nbsp;상빈이는&amp;nbsp;총&amp;nbsp;10&amp;nbsp;+&amp;nbsp;5&amp;nbsp;+&amp;nbsp;2&amp;nbsp;+&amp;nbsp;1&amp;nbsp;+&amp;nbsp;1&amp;nbsp;=&amp;nbsp;19병의&amp;nbsp;콜라를&amp;nbsp;받을&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image6.png&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;815&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZpFOx/btsOSknVnv1/KiLJkxJWzC3qwajBEGe8jK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZpFOx/btsOSknVnv1/KiLJkxJWzC3qwajBEGe8jK/img.png&quot; data-alt=&quot;출처 - 프로그래머스 콜라 문제&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZpFOx/btsOSknVnv1/KiLJkxJWzC3qwajBEGe8jK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZpFOx%2FbtsOSknVnv1%2FKiLJkxJWzC3qwajBEGe8jK%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;755&quot; height=&quot;815&quot; data-filename=&quot;image6.png&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;815&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 - 프로그래머스 콜라 문제&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제를&amp;nbsp;열심히&amp;nbsp;풀던&amp;nbsp;상빈이는&amp;nbsp;일반화된&amp;nbsp;콜라&amp;nbsp;문제를&amp;nbsp;생각했습니다.&amp;nbsp;이&amp;nbsp;문제는&amp;nbsp;빈&amp;nbsp;병&amp;nbsp;a개를&amp;nbsp;가져다주면&amp;nbsp;콜라&amp;nbsp;b병을&amp;nbsp;주는&amp;nbsp;마트가&amp;nbsp;있을&amp;nbsp;때,&amp;nbsp;빈&amp;nbsp;병&amp;nbsp;n개를&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;a개&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;콜라&amp;nbsp;문제를&amp;nbsp;해결하는&amp;nbsp;프로그램을&amp;nbsp;만들어&amp;nbsp;주세요. &lt;br /&gt;&lt;br /&gt;콜라를&amp;nbsp;받기&amp;nbsp;위해&amp;nbsp;마트에&amp;nbsp;주어야&amp;nbsp;하는&amp;nbsp;병&amp;nbsp;수&amp;nbsp;a,&amp;nbsp;빈&amp;nbsp;병&amp;nbsp;a개를&amp;nbsp;가져다&amp;nbsp;주면&amp;nbsp;마트가&amp;nbsp;주는&amp;nbsp;콜라&amp;nbsp;병&amp;nbsp;수&amp;nbsp;b,&amp;nbsp;상빈이가&amp;nbsp;가지고&amp;nbsp;있는&amp;nbsp;빈&amp;nbsp;병의&amp;nbsp;개수&amp;nbsp;n이&amp;nbsp;매개변수로&amp;nbsp;주어집니다.&amp;nbsp;상빈이가&amp;nbsp;받을&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;콜라의&amp;nbsp;병&amp;nbsp;수를&amp;nbsp;return&amp;nbsp;하도록&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;작성해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;제한사항&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1&amp;nbsp;&amp;le;&amp;nbsp;b&amp;nbsp;&amp;lt;&amp;nbsp;a&amp;nbsp;&amp;le;&amp;nbsp;n&amp;nbsp;&amp;le;&amp;nbsp;1,000,000 &lt;br /&gt;정답은&amp;nbsp;항상&amp;nbsp;int&amp;nbsp;범위를&amp;nbsp;넘지&amp;nbsp;않게&amp;nbsp;주어집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제 풀이&lt;/h3&gt;
&lt;pre id=&quot;code_1750858052123&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        // 상빈이가 가지고 있는 빈 병의 개수가 콜라를 받기 위해 마트에 주어야 하는 병의 개수 보다 적다면 
        while(n &amp;gt;= a) {
        
    		// 상빈이가 받을 수 있는 콜라의 병의 개수
            answer += n / a * b;
            
            // 빈 병을 가져다 주면 마트가 주는 콜라 병의 개수 + 상빈이가 받을 수 있는 콜라의 병의 개수
            n = n % a + n / a * b;
        }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;전체 코드&lt;/h3&gt;
&lt;pre id=&quot;code_1750858075725&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    public int solution(int a, int b, int n) {
        int answer = 0;
        
        while(n &amp;gt;= a) {
            answer += n / a * b;
            n = n % a + n / a * b;
        }
        
        return answer;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발</category>
      <category>IT</category>
      <category>Java</category>
      <category>코딩</category>
      <category>테스트</category>
      <category>프로그래머스</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/43</guid>
      <comments>https://king-developer.tistory.com/entry/TEST#entry43comment</comments>
      <pubDate>Tue, 24 Jun 2025 20:41:52 +0900</pubDate>
    </item>
    <item>
      <title>실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발(후기)</title>
      <link>https://king-developer.tistory.com/entry/%EC%8B%A4%EC%A0%84-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B6%80%ED%8A%B8%EC%99%80-JPA-%ED%99%9C%EC%9A%A91-%EC%9B%B9-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B0%9C%EB%B0%9C%ED%9B%84%EA%B8%B0</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;안녕하세요!&lt;br /&gt;&lt;/span&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;face&quot; data-emoticon-name=&quot;073&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/face/large/073.png&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/face/large/073.png&quot; width=&quot;80&quot; /&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;b&gt;저는 사실 JPA의 필요성을 처음에는 느끼지 못했어요.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;JDBC (Java Database Connectivity)**를 사용한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;DB 연결&lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1739413011145&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package java_arguments.JDBC_test;
import java.sql.*;

public class DB_Connection {

    static final String DRIVER =  &quot;org.mariadb.jdbc.Driver&quot;;
    static final String URL = &quot;jdbc:mariadb://localhost:3306/test_db&quot;;
    static final String USER = &quot;root&quot;;
    static final String PASSWORD = &quot;testdb&quot;;

    Connection con;
    PreparedStatement pstmt;
    ResultSet rs;

    public DB_Connection(){
        try {
            // JDBC 드라이버 로드
            Class.forName(DRIVER);
            // DB 연결
            con = DriverManager.getConnection(URL, USER, PASSWORD);
            if(con != null){
                System.out.println(&quot;DB 접속에 성공했습니다.&quot;);
            }
        } catch (ClassNotFoundException e) {
            System.out.println(&quot;드라이버 로드 실패&quot;);
        } catch (SQLException e) {
            System.out.println(&quot;DB 접속 실패: &quot; + e.getMessage());
        } finally {
            // 자원 반환: 연결이 성공한 후에 자원 해제하는 코드를 추가해야 합니다.
            if (con != null) {
                try {
                    con.close();
                    System.out.println(&quot;DB 연결 종료&quot;);
                } catch (SQLException e) {
                    System.out.println(&quot;DB 연결 종료 실패: &quot; + e.getMessage());
                }
            }
        }
    }

    public static void main(String[] args) {
        new DB_Connection();  // DB 연결을 시도합니다.
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 코드와 같이 JDBC (Java Database Connectivity)**를 사용한 &lt;b&gt;DB 연결 코드&lt;/b&gt;를 사용하다가&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt; MyBatis &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;를 사용한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;DB 연결&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1739418118769&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&amp;gt;
&amp;lt;!DOCTYPE configuration PUBLIC &quot;-//mybatis.org//DTD Config 3.0//EN&quot; &quot;http://mybatis.org/dtd/mybatis-3-config.dtd&quot;&amp;gt;
&amp;lt;configuration&amp;gt;

    &amp;lt;!-- JDBC 연결 정보 --&amp;gt;
    &amp;lt;environments default=&quot;development&quot;&amp;gt;
        &amp;lt;environment id=&quot;development&quot;&amp;gt;
            &amp;lt;transactionManager type=&quot;JDBC&quot;/&amp;gt;
            &amp;lt;dataSource type=&quot;POOLED&quot;&amp;gt;
                &amp;lt;property name=&quot;driver&quot; value=&quot;org.mariadb.jdbc.Driver&quot;/&amp;gt;
                &amp;lt;property name=&quot;url&quot; value=&quot;jdbc:mariadb://localhost:3306/test_db&quot;/&amp;gt;
                &amp;lt;property name=&quot;username&quot; value=&quot;root&quot;/&amp;gt;
                &amp;lt;property name=&quot;password&quot; value=&quot;testdb&quot;/&amp;gt;
            &amp;lt;/dataSource&amp;gt;
        &amp;lt;/environment&amp;gt;
    &amp;lt;/environments&amp;gt;

    &amp;lt;!-- Mapper 파일 위치 지정 --&amp;gt;
    &amp;lt;mappers&amp;gt;
        &amp;lt;mapper resource=&quot;UserMapper.xml&quot;/&amp;gt;
    &amp;lt;/mappers&amp;gt;

&amp;lt;/configuration&amp;gt;&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;위의 코드와 같이 mybatis-config.xml 파일 설정을 하면 DB 연결이 되는 &lt;b&gt;유레카&lt;/b&gt;를 봤습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 코드 간결화와 유지보수성 향상&lt;/b&gt;: JDBC 코드를 직접 작성하는 대신 MyBatis와 같은 ORM 프레임워크를 사용하면 SQL 쿼리를 별도로 관리할 수 있어 코드가 더 깔끔하고 유지보수하기 쉬워집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. SQL 분리 및 관리&lt;/b&gt;: MyBatis는 SQL 문장을 XML 파일로 분리하여 관리하므로, Java 코드에서 직접 SQL을 작성할 필요가 없어 가독성이 높아지고 비즈니스 로직과 데이터베이스 작업을 분리할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 중앙 집중식 설정 관리&lt;/b&gt;: mybatis-config.xml 파일을 사용하여 데이터베이스 연결 정보와 관련된 설정을 한 곳에서 관리할 수 있어, 데이터베이스 변경 시 수정이 용이합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 자동 리소스 관리&lt;/b&gt;: MyBatis는 SQL 쿼리 실행 후 리소스를 자동으로 반환해주기 때문에, Connection, PreparedStatement, ResultSet과 같은 리소스를 직접 관리할 필요가 없어 코드가 더 간결하고 안전하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;하지만&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;MyBatis에 익숙해지고 나서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&quot;더 편리한 방법이 있을까?&quot;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;라는 생각이 들었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 &lt;b&gt;JPA&lt;/b&gt;라는 유용한 기술이 있다는 걸 떠올리고, 이에 대해 인강을 듣기 시작했습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;기초편을 먼저 듣지 않고 실습편을 먼저 들었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;제 스타일을 고려했을 때,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;실습을 통해 사전 지식을 쌓은 후&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;기초편을 들으면 실습편에서 배운 내용을 떠올리며&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;효과적으로 공부할 수 있을 것 같았습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;여러분도 자신만의 스타일에 맞게 공부하시면 좋을 것 같습니다!&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이 강의를 듣고 느낀 점은&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;JAVA와 MyBatis 방식에 익숙하다면 강의를 듣는 데&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;큰 어려움이 없었을 거라는 생각이 들었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;JPA도 결국 자바 기반이기 때문입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;굳이 어려운 점을 꼽자면,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;필요한 &lt;b&gt;어노테이션(@)&lt;/b&gt;들이 많아 간단한 암기가 필요하고,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 데이터베이스 관점&lt;/b&gt;이 아닌 &lt;b&gt;객체 지향 관점&lt;/b&gt;에서 쿼리가 처리되기 때문에&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; 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;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; 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;</description>
      <category>인강 후기</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/42</guid>
      <comments>https://king-developer.tistory.com/entry/%EC%8B%A4%EC%A0%84-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B6%80%ED%8A%B8%EC%99%80-JPA-%ED%99%9C%EC%9A%A91-%EC%9B%B9-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B0%9C%EB%B0%9C%ED%9B%84%EA%B8%B0#entry42comment</comments>
      <pubDate>Sat, 15 Feb 2025 14:37:03 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/코딩테스트] 유연근무제(JAVA)</title>
      <link>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%9C%A0%EC%97%B0%EA%B7%BC%EB%AC%B4%EC%A0%9CJAVA</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요!!&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;niniz&quot; data-emoticon-name=&quot;004&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/004.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/004.gif&quot; width=&quot;150&quot; /&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;프로그래머스&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;설정한&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;직원들은&amp;nbsp;일주일동안&amp;nbsp;자신이&amp;nbsp;설정한&amp;nbsp;출근&amp;nbsp;희망&amp;nbsp;시각&amp;nbsp;+&amp;nbsp;10분까지&amp;nbsp;어플로&amp;nbsp;출근해야&amp;nbsp;합니다.&amp;nbsp;예를&amp;nbsp;들어&amp;nbsp;출근&amp;nbsp;희망&amp;nbsp;시각이&amp;nbsp;9시&amp;nbsp;58분인&amp;nbsp;직원은&amp;nbsp;10시&amp;nbsp;8분까지&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;100을&amp;nbsp;곱하고&amp;nbsp;분을&amp;nbsp;더한&amp;nbsp;정수로&amp;nbsp;표현됩니다.&amp;nbsp;예를&amp;nbsp;들어&amp;nbsp;10시&amp;nbsp;13분은&amp;nbsp;1013이&amp;nbsp;되고&amp;nbsp;9시&amp;nbsp;58분은&amp;nbsp;958이&amp;nbsp;됩니다. &lt;br /&gt;&lt;br /&gt;당신은&amp;nbsp;직원들이&amp;nbsp;설정한&amp;nbsp;출근&amp;nbsp;희망&amp;nbsp;시각과&amp;nbsp;실제로&amp;nbsp;출근한&amp;nbsp;기록을&amp;nbsp;바탕으로&amp;nbsp;상품을&amp;nbsp;받을&amp;nbsp;직원이&amp;nbsp;몇&amp;nbsp;명인지&amp;nbsp;알고&amp;nbsp;싶습니다. &lt;br /&gt;&lt;br /&gt;직원&amp;nbsp;n명이&amp;nbsp;설정한&amp;nbsp;출근&amp;nbsp;희망&amp;nbsp;시각을&amp;nbsp;담은&amp;nbsp;1차원&amp;nbsp;정수&amp;nbsp;배열&amp;nbsp;schedules,&amp;nbsp;직원들이&amp;nbsp;일주일&amp;nbsp;동안&amp;nbsp;출근한&amp;nbsp;시각을&amp;nbsp;담은&amp;nbsp;2차원&amp;nbsp;정수&amp;nbsp;배열&amp;nbsp;timelogs,&amp;nbsp;이벤트를&amp;nbsp;시작한&amp;nbsp;요일을&amp;nbsp;의미하는&amp;nbsp;정수&amp;nbsp;startday가&amp;nbsp;매개변수로&amp;nbsp;주어집니다.&amp;nbsp;이때&amp;nbsp;상품을&amp;nbsp;받을&amp;nbsp;직원의&amp;nbsp;수를&amp;nbsp;return&amp;nbsp;하도록&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;완성해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;제한사항&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1&amp;nbsp;&amp;le;&amp;nbsp;schedules의&amp;nbsp;길이&amp;nbsp;=&amp;nbsp;n&amp;nbsp;&amp;le;&amp;nbsp;1,000 &lt;br /&gt;schedules[i]는&amp;nbsp;i&amp;nbsp;+&amp;nbsp;1번째&amp;nbsp;직원이&amp;nbsp;설정한&amp;nbsp;출근&amp;nbsp;희망&amp;nbsp;시각을&amp;nbsp;의미합니다. &lt;br /&gt;700&amp;nbsp;&amp;le;&amp;nbsp;schedules[i]&amp;nbsp;&amp;le;&amp;nbsp;1100 &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;timelogs의&amp;nbsp;길이&amp;nbsp;=&amp;nbsp;n&amp;nbsp;&amp;le;&amp;nbsp;1,000 &lt;br /&gt;timelogs[i]의&amp;nbsp;길이&amp;nbsp;=&amp;nbsp;7 &lt;br /&gt;timelogs[i][j]는&amp;nbsp;i&amp;nbsp;+&amp;nbsp;1번째&amp;nbsp;직원이&amp;nbsp;이벤트&amp;nbsp;j&amp;nbsp;+&amp;nbsp;1일차에&amp;nbsp;출근한&amp;nbsp;시각을&amp;nbsp;의미합니다. &lt;br /&gt;600&amp;nbsp;&amp;le;&amp;nbsp;timelogs[i][j]&amp;nbsp;&amp;le;&amp;nbsp;2359 &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;startday&amp;nbsp;&amp;le;&amp;nbsp;7 &lt;br /&gt;1은&amp;nbsp;월요일,&amp;nbsp;2는&amp;nbsp;화요일,&amp;nbsp;3은&amp;nbsp;수요일,&amp;nbsp;4는&amp;nbsp;목요일,&amp;nbsp;5는&amp;nbsp;금요일,&amp;nbsp;6은&amp;nbsp;토요일,&amp;nbsp;7은&amp;nbsp;일요일에&amp;nbsp;이벤트를&amp;nbsp;시작했음을&amp;nbsp;의미합니다. &lt;br /&gt;출근&amp;nbsp;희망&amp;nbsp;시각과&amp;nbsp;실제로&amp;nbsp;출근한&amp;nbsp;시각을&amp;nbsp;100으로&amp;nbsp;나눈&amp;nbsp;나머지는&amp;nbsp;59&amp;nbsp;이하입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;문제 풀이&lt;/h3&gt;
&lt;pre id=&quot;code_1739411414935&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 상품을 받을 직원 수
int count = 0;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 결과를 return 받을 수 있는 변수를 초기화합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739411543396&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 각 직원에 대해 반복
for (int i = 0; i &amp;lt; timelogs.length; i++) {         
	...
    // 해당 직원의 일주일 간 출근 기록을 확인
    for (int j = 0; j &amp;lt; timelogs[i].length; j++) {
       ...
    }
    ...
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 이중 for문을 사용하여 해당 직원의 일주일 간 출근 기록을 확인합니다. 이중 for문을 사용하는 이유는 timelogs[i].length 부분에서 i번째를 위해서 입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739411719016&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 출근 시간이 제한시간을 넘지 않았는지 확인하는 변수
boolean flag = true;

...

// 주말(토요일, 일요일)을 제외한 평일에 대해서만 확인
if (((startday + j) % 7 == 0 || (startday + j) % 7 == 6)) {
    // 주말이라면 출근 시각을 검사할 필요가 없으므로 넘어감
    continue;
}

// 평일에 출근 시간이 제한시간을 초과하면 해당 직원은 지각
if (changeTime(schedules[i]) &amp;lt; timelogs[i][j]) {
    flag = false;  
    break;
}

// 모든 평일에 지각하지 않았다면 상품을 받을 자격이 있음
if (flag) {
    count++; 
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 주말(토요일, 일요일)은 제외한 평일에 대해서만 확인하기 위해 if문을 사용합니다. 그리고 평일 출근 시간이 제한 시간을 초과하면 해당 직원은 지각이므로 count가 되지 않도록 하고 이외에는 count가 되도록 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739412011152&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 시간으로 형변환 + 출근 희망 시각에 10분을 더하는 메서드
private int changeTime(int time) {
    // 시각을 분과 시로 분리
    int minute = time % 100;  
    int hour = time / 100;   

    // 10분을 더함
    minute += 10;

    // 만약 10분을 더해서 60분을 넘으면 시각을 1시간 증가시키고, 분은 60으로 나눈 나머지 값을 사용
    if (minute &amp;gt; 59) {
        minute %= 60; 
        hour++;        
    }

    // 계산된 시각을 다시 &quot;HHMM&quot; 형식으로 반환
    return (hour * 100) + minute;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 이 문제에서 가장 중요한 부분이라고 생각합니다. 모든 시각은 시에 100을 곱하고 분을 더한 정수로 표현하였기 때문에 이것을 시간 형식으로 변환하여 10분을 더하는 작업 후 원래 형식으로 변환하여 return합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;전체 코드&lt;/h3&gt;
&lt;pre id=&quot;code_1739412138563&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    public int solution(int[] schedules, int[][] timelogs, int startday) {
        // 상품을 받을 직원 수
        int count = 0;
        
        // 각 직원에 대해 반복
        for (int i = 0; i &amp;lt; timelogs.length; i++) {         
            // 출근 시간이 제한시간을 넘지 않았는지 확인하는 변수
            boolean flag = true;
            
            // 해당 직원의 일주일 간 출근 기록을 확인
            for (int j = 0; j &amp;lt; timelogs[i].length; j++) {
                
                // 주말(토요일, 일요일)을 제외한 평일에 대해서만 확인
                if (((startday + j) % 7 == 0 || (startday + j) % 7 == 6)) {
                    // 주말이라면 출근 시각을 검사할 필요가 없으므로 넘어감
                    continue;
                }
                
                // 평일에 출근 시간이 제한시간을 초과하면 해당 직원은 지각
                if (changeTime(schedules[i]) &amp;lt; timelogs[i][j]) {
                    flag = false;  
                    break;
                }
            }
            
            // 모든 평일에 지각하지 않았다면 상품을 받을 자격이 있음
            if (flag) {
                count++; 
            }
        }      
        // 상품을 받을 직원 수 반환
        return count;
    }
    
    // 시간으로 형변환 + 출근 희망 시각에 10분을 더하는 메서드
    private int changeTime(int time) {
        // 시각을 분과 시로 분리
        int minute = time % 100;  
        int hour = time / 100;   
        
        // 10분을 더함
        minute += 10;
        
        // 만약 10분을 더해서 60분을 넘으면 시각을 1시간 증가시키고, 분은 60으로 나눈 나머지 값을 사용
        if (minute &amp;gt; 59) {
            minute %= 60; 
            hour++;        
        }
        
        // 계산된 시각을 다시 &quot;HHMM&quot; 형식으로 반환
        return (hour * 100) + minute;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1739592020389&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/388351&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/iYN5V/hyYfOsT0Ln/W5mtFSuBfGWJfO2DBs4ugK/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/SxSuo/hyYf0mAxZe/YQ6yP3nb2ePY2v1uHUzrGK/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/388351&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/388351&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/iYN5V/hyYfOsT0Ln/W5mtFSuBfGWJfO2DBs4ugK/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/SxSuo/hyYf0mAxZe/YQ6yP3nb2ePY2v1uHUzrGK/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;</description>
      <category>알고리즘</category>
      <category>iava</category>
      <category>IT</category>
      <category>유연근무제</category>
      <category>자바</category>
      <category>코데</category>
      <category>코딩</category>
      <category>코딩테스트</category>
      <category>프로그래머스</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/41</guid>
      <comments>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%9C%A0%EC%97%B0%EA%B7%BC%EB%AC%B4%EC%A0%9CJAVA#entry41comment</comments>
      <pubDate>Thu, 13 Feb 2025 23:02:55 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/코딩테스트] 개인정보 수집 유효기간(JAVA)</title>
      <link>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EA%B0%9C%EC%9D%B8%EC%A0%95%EB%B3%B4-%EC%88%98%EC%A7%91-%EC%9C%A0%ED%9A%A8%EA%B8%B0%EA%B0%84JAVA</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;안녕하세요.&lt;br /&gt;&lt;/span&gt;오늘은 개인정보 수집 유효기간이 지났을 때&lt;br /&gt;개인정보를 삭제하는 코드를 가지고 왔습니다!!
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;010&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/010.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/010.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제&amp;nbsp;설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고객의&amp;nbsp;약관&amp;nbsp;동의를&amp;nbsp;얻어서&amp;nbsp;수집된&amp;nbsp;1~n번으로&amp;nbsp;분류되는&amp;nbsp;개인정보&amp;nbsp;n개가&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;있습니다.&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;예를&amp;nbsp;들어,&amp;nbsp;A라는&amp;nbsp;약관의&amp;nbsp;유효기간이&amp;nbsp;12&amp;nbsp;달이고,&amp;nbsp;2021년&amp;nbsp;1월&amp;nbsp;5일에&amp;nbsp;수집된&amp;nbsp;개인정보가&amp;nbsp;A약관으로&amp;nbsp;수집되었다면&amp;nbsp;해당&amp;nbsp;개인정보는&amp;nbsp;2022년&amp;nbsp;1월&amp;nbsp;4일까지&amp;nbsp;보관&amp;nbsp;가능하며&amp;nbsp;2022년&amp;nbsp;1월&amp;nbsp;5일부터&amp;nbsp;파기해야&amp;nbsp;할&amp;nbsp;개인정보입니다. &lt;br /&gt;당신은&amp;nbsp;오늘&amp;nbsp;날짜로&amp;nbsp;파기해야&amp;nbsp;할&amp;nbsp;개인정보&amp;nbsp;번호들을&amp;nbsp;구하려&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;모든&amp;nbsp;달은&amp;nbsp;28일까지&amp;nbsp;있다고&amp;nbsp;가정합니다. &lt;br /&gt;&lt;br /&gt;다음은&amp;nbsp;오늘&amp;nbsp;날짜가&amp;nbsp;2022.05.19일&amp;nbsp;때의&amp;nbsp;예시입니다. &lt;br /&gt;&lt;br /&gt;약관&amp;nbsp;종류 유효기간 &lt;br /&gt;A&amp;nbsp; &amp;nbsp; &amp;nbsp; 6&amp;nbsp; &amp;nbsp; &amp;nbsp; 달 &lt;br /&gt;B&amp;nbsp; &amp;nbsp; &amp;nbsp; 12&amp;nbsp; &amp;nbsp; 달 &lt;br /&gt;C&amp;nbsp; &amp;nbsp; &amp;nbsp; 3&amp;nbsp; &amp;nbsp; &amp;nbsp; 달 &lt;br /&gt;번호 개인정보수집일자 약관종류 &lt;br /&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2021.05.02&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; A &lt;br /&gt;2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2021.07.01&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; B &lt;br /&gt;3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2022.02.19&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; C &lt;br /&gt;4&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2022.02.20&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; C&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;첫&amp;nbsp;번째&amp;nbsp;개인정보는&amp;nbsp;A약관에&amp;nbsp;의해&amp;nbsp;2021년&amp;nbsp;11월&amp;nbsp;1일까지&amp;nbsp;보관&amp;nbsp;가능하며,&amp;nbsp;유효기간이&amp;nbsp;지났으므로&amp;nbsp;파기해야&amp;nbsp;할&amp;nbsp;개인정보입니다. &lt;br /&gt;두&amp;nbsp;번째&amp;nbsp;개인정보는&amp;nbsp;B약관에&amp;nbsp;의해&amp;nbsp;2022년&amp;nbsp;6월&amp;nbsp;28일까지&amp;nbsp;보관&amp;nbsp;가능하며,&amp;nbsp;유효기간이&amp;nbsp;지나지&amp;nbsp;않았으므로&amp;nbsp;아직&amp;nbsp;보관&amp;nbsp;가능합니다. &lt;br /&gt;세&amp;nbsp;번째&amp;nbsp;개인정보는&amp;nbsp;C약관에&amp;nbsp;의해&amp;nbsp;2022년&amp;nbsp;5월&amp;nbsp;18일까지&amp;nbsp;보관&amp;nbsp;가능하며,&amp;nbsp;유효기간이&amp;nbsp;지났으므로&amp;nbsp;파기해야&amp;nbsp;할&amp;nbsp;개인정보입니다. &lt;br /&gt;네&amp;nbsp;번째&amp;nbsp;개인정보는&amp;nbsp;C약관에&amp;nbsp;의해&amp;nbsp;2022년&amp;nbsp;5월&amp;nbsp;19일까지&amp;nbsp;보관&amp;nbsp;가능하며,&amp;nbsp;유효기간이&amp;nbsp;지나지&amp;nbsp;않았으므로&amp;nbsp;아직&amp;nbsp;보관&amp;nbsp;가능합니다. &lt;br /&gt;따라서&amp;nbsp;파기해야&amp;nbsp;할&amp;nbsp;개인정보&amp;nbsp;번호는&amp;nbsp;[1,&amp;nbsp;3]입니다. &lt;br /&gt;&lt;br /&gt;오늘&amp;nbsp;날짜를&amp;nbsp;의미하는&amp;nbsp;문자열&amp;nbsp;today,&amp;nbsp;약관의&amp;nbsp;유효기간을&amp;nbsp;담은&amp;nbsp;1차원&amp;nbsp;문자열&amp;nbsp;배열&amp;nbsp;terms와&amp;nbsp;수집된&amp;nbsp;개인정보의&amp;nbsp;정보를&amp;nbsp;담은&amp;nbsp;1차원&amp;nbsp;문자열&amp;nbsp;배열&amp;nbsp;privacies가&amp;nbsp;매개변수로&amp;nbsp;주어집니다.&amp;nbsp;이때&amp;nbsp;파기해야&amp;nbsp;할&amp;nbsp;개인정보의&amp;nbsp;번호를&amp;nbsp;오름차순으로&amp;nbsp;1차원&amp;nbsp;정수&amp;nbsp;배열에&amp;nbsp;담아&amp;nbsp;return&amp;nbsp;하도록&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;완성해&amp;nbsp;주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;제한사항&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;today는&amp;nbsp;&quot;YYYY.MM.DD&quot;&amp;nbsp;형태로&amp;nbsp;오늘&amp;nbsp;날짜를&amp;nbsp;나타냅니다. &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;terms의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;20 &lt;br /&gt;terms의&amp;nbsp;원소는&amp;nbsp;&quot;약관&amp;nbsp;종류&amp;nbsp;유효기간&quot;&amp;nbsp;형태의&amp;nbsp;약관&amp;nbsp;종류와&amp;nbsp;유효기간을&amp;nbsp;공백&amp;nbsp;하나로&amp;nbsp;구분한&amp;nbsp;문자열입니다. &lt;br /&gt;약관&amp;nbsp;종류는&amp;nbsp;A~Z중&amp;nbsp;알파벳&amp;nbsp;대문자&amp;nbsp;하나이며,&amp;nbsp;terms&amp;nbsp;배열에서&amp;nbsp;약관&amp;nbsp;종류는&amp;nbsp;중복되지&amp;nbsp;않습니다. &lt;br /&gt;유효기간은&amp;nbsp;개인정보를&amp;nbsp;보관할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;달&amp;nbsp;수를&amp;nbsp;나타내는&amp;nbsp;정수이며,&amp;nbsp;1&amp;nbsp;이상&amp;nbsp;100&amp;nbsp;이하입니다. &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;privacies의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;100 &lt;br /&gt;privacies[i]는&amp;nbsp;i+1번&amp;nbsp;개인정보의&amp;nbsp;수집&amp;nbsp;일자와&amp;nbsp;약관&amp;nbsp;종류를&amp;nbsp;나타냅니다. &lt;br /&gt;privacies의&amp;nbsp;원소는&amp;nbsp;&quot;날짜&amp;nbsp;약관&amp;nbsp;종류&quot;&amp;nbsp;형태의&amp;nbsp;날짜와&amp;nbsp;약관&amp;nbsp;종류를&amp;nbsp;공백&amp;nbsp;하나로&amp;nbsp;구분한&amp;nbsp;문자열입니다. &lt;br /&gt;날짜는&amp;nbsp;&quot;YYYY.MM.DD&quot;&amp;nbsp;형태의&amp;nbsp;개인정보가&amp;nbsp;수집된&amp;nbsp;날짜를&amp;nbsp;나타내며,&amp;nbsp;today&amp;nbsp;이전의&amp;nbsp;날짜만&amp;nbsp;주어집니다. &lt;br /&gt;privacies의&amp;nbsp;약관&amp;nbsp;종류는&amp;nbsp;항상&amp;nbsp;terms에&amp;nbsp;나타난&amp;nbsp;약관&amp;nbsp;종류만&amp;nbsp;주어집니다. &lt;br /&gt;today와&amp;nbsp;privacies에&amp;nbsp;등장하는&amp;nbsp;날짜의&amp;nbsp;YYYY는&amp;nbsp;연도,&amp;nbsp;MM은&amp;nbsp;월,&amp;nbsp;DD는&amp;nbsp;일을&amp;nbsp;나타내며&amp;nbsp;점(.)&amp;nbsp;하나로&amp;nbsp;구분되어&amp;nbsp;있습니다. &lt;br /&gt;2000&amp;nbsp;&amp;le;&amp;nbsp;YYYY&amp;nbsp;&amp;le;&amp;nbsp;2022 &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;MM&amp;nbsp;&amp;le;&amp;nbsp;12 &lt;br /&gt;MM이&amp;nbsp;한&amp;nbsp;자릿수인&amp;nbsp;경우&amp;nbsp;앞에&amp;nbsp;0이&amp;nbsp;붙습니다. &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;DD&amp;nbsp;&amp;le;&amp;nbsp;28 &lt;br /&gt;DD가&amp;nbsp;한&amp;nbsp;자릿수인&amp;nbsp;경우&amp;nbsp;앞에&amp;nbsp;0이&amp;nbsp;붙습니다. &lt;br /&gt;파기해야&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;문제풀이&lt;/h3&gt;
&lt;pre id=&quot;code_1730439423546&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 날짜, 문자열을 포맷, 동적 배열 구현을 위해 클래스 임포트한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1730439511623&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 결과를 저장할 리스트
ArrayList&amp;lt;Integer&amp;gt; list = new ArrayList&amp;lt;&amp;gt;();
// 유효기간 계산에 사용할 날짜 변수
LocalDate plusDate = null;
// 인덱스 초기화
int index = 1;&lt;/code&gt;&lt;/pre&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;pre id=&quot;code_1730439553600&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 날짜 형식 지정
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(&quot;yyyy.MM.dd&quot;);
// 오늘 날짜를 LocalDate로 변환
LocalDate currentDate = LocalDate.parse(today, formatter);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 날짜 형식을 지정하여 today 변수를 LocalDate로 변환한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1730439623285&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for(String privacie : privacies) {
    String[] privacyData = privacie.split(&quot; &quot;);

    // 개인정보동의 날짜를 날짜로 변환
    String privacyDateStr = privacyData[0];
    LocalDate privacyDate = LocalDate.parse(privacyDateStr, formatter);

    // 개인정보동의 유형
    String privacyTerm = privacyData[1];

    // 동의 유형에 해당하는 유효기간을 찾기
    for(String term : terms) {
        String[] termInfo = term.split(&quot; &quot;);
        if(termInfo[0].equals(privacyTerm)) {
            plusDate = privacyDate.plusMonths(Integer.parseInt(termInfo[1]));
            break;
        }
    }

    // 유효기간이 null이 아니고 만료 여부 판단
    if (plusDate != null &amp;amp;&amp;amp; !plusDate.isAfter(currentDate)) {
        list.add(index);
    }
    index++;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. privacies 값을 동의 날짜, 형식으로 구분하고 terms 값은 형식, 동의 기간으로 구분한다. 그다음 형식이 같으면 동의 날짜에 동의기간을 더한 후의 날짜가 현재 시간보다 과거에 있으면 파쇄해야 할 번호 인덱스를 넣는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1730441583149&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;return list.stream().mapToInt(Integer::intValue).toArray();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. list는 반환 값이 ArrayList&amp;lt;Integer&amp;gt;라서 반환값 int []에 맞추어 반환한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1730441637804&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/150370&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/g7ysj/hyXpDfMa1D/tDd28jTeVwPF3RfElxnDd1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/codVbO/hyXpyMjAyC/1uYToBk5jdVB2vnHh1vcak/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/150370&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/150370&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/g7ysj/hyXpDfMa1D/tDd28jTeVwPF3RfElxnDd1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/codVbO/hyXpyMjAyC/1uYToBk5jdVB2vnHh1vcak/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;</description>
      <category>알고리즘</category>
      <category>IT</category>
      <category>Java</category>
      <category>자바</category>
      <category>코딩테스트</category>
      <category>프로그래머스</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/40</guid>
      <comments>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EA%B0%9C%EC%9D%B8%EC%A0%95%EB%B3%B4-%EC%88%98%EC%A7%91-%EC%9C%A0%ED%9A%A8%EA%B8%B0%EA%B0%84JAVA#entry40comment</comments>
      <pubDate>Fri, 1 Nov 2024 15:14:27 +0900</pubDate>
    </item>
    <item>
      <title>김영한의 실전 자바 - 중급 2편 후기</title>
      <link>https://king-developer.tistory.com/entry/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EC%A4%91%EA%B8%89-2%ED%8E%B8-%ED%9B%84%EA%B8%B0</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;안녕하세요!!&lt;br /&gt;&lt;br /&gt;김영한 강사님의 로드맵을 &lt;br /&gt;따라가고 있는&lt;br /&gt;주니어 개발자입니다.&lt;br /&gt;&lt;br /&gt;벌써 중급 2편에 관한 후기를 작성하네요.&lt;br /&gt;&lt;/span&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;014&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/014.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/014.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;br /&gt;결론부터 말씀드리면&lt;br /&gt;지금 이 강의를 위해 &lt;br /&gt;앞의 강의를 들었다고 해도&lt;br /&gt;부족함이 없었던 강의 었어요.&lt;br /&gt;&lt;br /&gt;저는 국비 6개월 수료 후&lt;br /&gt;취업을 하여 1년 동안 개발을 하면서&lt;br /&gt;긁지 못하는 가려움(?)이 있었어요.&lt;br /&gt;&lt;br /&gt;하지만&lt;br /&gt;&lt;b&gt;드디어!!!!&lt;/b&gt;&lt;br /&gt;가려움을 찾았네요.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #333333; text-align: center;&quot;&gt;바로&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #333333; text-align: center;&quot;&gt;자료구조에 대한 지식 부족!!&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #333333; text-align: center;&quot;&gt;이었던 거 같아요.&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;취직 후 백엔드 업무를 하면서&lt;br /&gt;전체적인 흐름도 알겠고&lt;br /&gt;알고리즘도 천천히 읽으면 알겠고&lt;br /&gt;업무 하는데도 큰 문제가 없었어요.&lt;br /&gt;하지만 늘 뭔가 부족함이 있었는데 찾았네요.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;대부분 업무를 하면 ArrayList를 왜 사용하는지 모르고 &lt;br /&gt;&quot;대부분 이렇게 사용하니까&quot; 느낌이 었다면&lt;br /&gt;&lt;/b&gt;&lt;b&gt;지금은 이유를 알고 사용하는 느낌입니다.&lt;br /&gt;&lt;/b&gt;&lt;b&gt;왜 ArrayList를 사용하는지 알겠어요.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;순서 문제&lt;br /&gt;중복 문제&lt;br /&gt;시간복잡도 문제&lt;br /&gt;알고리즘 문제&lt;br /&gt;등등&lt;br /&gt;&lt;b&gt;다양한 이유가 있었네요.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;이 강의를 들으니 대부분의 문제를 해결할 수 있었어요.&lt;br /&gt;&lt;br /&gt;그 이외에도 제네릭과 컬렉션 프레임워크에 대해서도 공부할 수 있었어요.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;시니어가 되기에는 갈길이 멀지만&lt;/b&gt;&lt;br /&gt;&lt;b&gt;천천히 걸어가겠습니다.&lt;/b&gt;&lt;br /&gt;감사합니다.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;025&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/025.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/025.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;figure id=&quot;og_1730274058572&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;김영한의 실전 자바 - 중급 2편 강의 | 김영한 - 인프런&quot; data-og-description=&quot;김영한 | 자바 제네릭과 컬렉션 프레임워크를 실무 중심으로 깊이있게 학습합니다. 자료 구조에 대한 기본기도 함께 학습합니다., 국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 실전 &quot; data-og-host=&quot;www.inflearn.com&quot; data-og-source-url=&quot;https://www.inflearn.com/course/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EC%A4%91%EA%B8%89-2?attributionToken=iQHwiAoMCNPFh7kGELfRrbYBEAEaJDY3MmNlOTc4LTAwMDAtMjU2ZC1iZDQyLTNjMjg2ZDQyZjNhZSoHMTA3MTIzNjIwt7eMLcXL8xeo5aotmNa3LcLwnhWjgJcijr6dFdSynRWQ97IwjpHJMJvWty2a7sYwOg5kZWZhdWx0X3NlYXJjaEgBaAF6AnNp&quot; data-og-url=&quot;https://www.inflearn.com/course/김영한의-실전-자바-중급-2&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/l6Bvz/hyXptcKouf/13uDExoawVTU3eX3a7ndxK/img.png?width=1200&amp;amp;height=781&amp;amp;face=0_0_1200_781,https://scrap.kakaocdn.net/dn/bV3KgA/hyXpzKM9Bg/sz66t8ktDGrrZvamPP2sKk/img.png?width=1200&amp;amp;height=781&amp;amp;face=0_0_1200_781,https://scrap.kakaocdn.net/dn/LtwZw/hyXpqG4WYC/LxEQmXMkg0cLsEKlDhOGn1/img.jpg?width=1439&amp;amp;height=1441&amp;amp;face=171_677_281_798&quot;&gt;&lt;a href=&quot;https://www.inflearn.com/course/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EC%A4%91%EA%B8%89-2?attributionToken=iQHwiAoMCNPFh7kGELfRrbYBEAEaJDY3MmNlOTc4LTAwMDAtMjU2ZC1iZDQyLTNjMjg2ZDQyZjNhZSoHMTA3MTIzNjIwt7eMLcXL8xeo5aotmNa3LcLwnhWjgJcijr6dFdSynRWQ97IwjpHJMJvWty2a7sYwOg5kZWZhdWx0X3NlYXJjaEgBaAF6AnNp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.inflearn.com/course/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EC%A4%91%EA%B8%89-2?attributionToken=iQHwiAoMCNPFh7kGELfRrbYBEAEaJDY3MmNlOTc4LTAwMDAtMjU2ZC1iZDQyLTNjMjg2ZDQyZjNhZSoHMTA3MTIzNjIwt7eMLcXL8xeo5aotmNa3LcLwnhWjgJcijr6dFdSynRWQ97IwjpHJMJvWty2a7sYwOg5kZWZhdWx0X3NlYXJjaEgBaAF6AnNp&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/l6Bvz/hyXptcKouf/13uDExoawVTU3eX3a7ndxK/img.png?width=1200&amp;amp;height=781&amp;amp;face=0_0_1200_781,https://scrap.kakaocdn.net/dn/bV3KgA/hyXpzKM9Bg/sz66t8ktDGrrZvamPP2sKk/img.png?width=1200&amp;amp;height=781&amp;amp;face=0_0_1200_781,https://scrap.kakaocdn.net/dn/LtwZw/hyXpqG4WYC/LxEQmXMkg0cLsEKlDhOGn1/img.jpg?width=1439&amp;amp;height=1441&amp;amp;face=171_677_281_798');&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;김영한의 실전 자바 - 중급 2편 강의 | 김영한 - 인프런&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;김영한 | 자바 제네릭과 컬렉션 프레임워크를 실무 중심으로 깊이있게 학습합니다. 자료 구조에 대한 기본기도 함께 학습합니다., 국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 실전&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.inflearn.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>인강 후기</category>
      <category>IT</category>
      <category>Java</category>
      <category>김영한</category>
      <category>자바</category>
      <category>중급 2편</category>
      <category>후기</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/39</guid>
      <comments>https://king-developer.tistory.com/entry/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EC%A4%91%EA%B8%89-2%ED%8E%B8-%ED%9B%84%EA%B8%B0#entry39comment</comments>
      <pubDate>Wed, 30 Oct 2024 16:43:24 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/코딩테스트] 둘만의 암호 (JAVA)</title>
      <link>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%91%98%EB%A7%8C%EC%9D%98-%EC%95%94%ED%98%B8-JAVA</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;안녕하세요.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;우리 둘만의 암호를&lt;br /&gt;코딩으로 해석해보겠습니다!&lt;br /&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;001&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/001.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/001.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두&amp;nbsp;문자열&amp;nbsp;s와&amp;nbsp;skip,&amp;nbsp;그리고&amp;nbsp;자연수&amp;nbsp;index가&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;문자열&amp;nbsp;s의&amp;nbsp;각&amp;nbsp;알파벳을&amp;nbsp;index만큼&amp;nbsp;뒤의&amp;nbsp;알파벳으로&amp;nbsp;바꿔줍니다. &lt;br /&gt;index만큼의&amp;nbsp;뒤의&amp;nbsp;알파벳이&amp;nbsp;z를&amp;nbsp;넘어갈&amp;nbsp;경우&amp;nbsp;다시&amp;nbsp;a로&amp;nbsp;돌아갑니다. &lt;br /&gt;skip에&amp;nbsp;있는&amp;nbsp;알파벳은&amp;nbsp;제외하고&amp;nbsp;건너뜁니다. &lt;br /&gt;예를&amp;nbsp;들어&amp;nbsp;s&amp;nbsp;=&amp;nbsp;&quot;aukks&quot;,&amp;nbsp;skip&amp;nbsp;=&amp;nbsp;&quot;wbqd&quot;,&amp;nbsp;index&amp;nbsp;=&amp;nbsp;5일&amp;nbsp;때,&amp;nbsp;a에서&amp;nbsp;5만큼&amp;nbsp;뒤에&amp;nbsp;있는&amp;nbsp;알파벳은&amp;nbsp;f지만&amp;nbsp;[b,&amp;nbsp;c,&amp;nbsp;d,&amp;nbsp;e,&amp;nbsp;f]에서&amp;nbsp;'b'와&amp;nbsp;'d'는&amp;nbsp;skip에&amp;nbsp;포함되므로&amp;nbsp;세지&amp;nbsp;않습니다.&amp;nbsp;따라서&amp;nbsp;'b',&amp;nbsp;'d'를&amp;nbsp;제외하고&amp;nbsp;'a'에서&amp;nbsp;5만큼&amp;nbsp;뒤에&amp;nbsp;있는&amp;nbsp;알파벳은&amp;nbsp;[c,&amp;nbsp;e,&amp;nbsp;f,&amp;nbsp;g,&amp;nbsp;h]&amp;nbsp;순서에&amp;nbsp;의해&amp;nbsp;'h'가&amp;nbsp;됩니다.&amp;nbsp;나머지&amp;nbsp;&quot;ukks&quot;&amp;nbsp;또한&amp;nbsp;위&amp;nbsp;규칙대로&amp;nbsp;바꾸면&amp;nbsp;&quot;appy&quot;가&amp;nbsp;되며&amp;nbsp;결과는&amp;nbsp;&quot;happy&quot;가&amp;nbsp;됩니다. &lt;br /&gt;&lt;br /&gt;두&amp;nbsp;문자열&amp;nbsp;s와&amp;nbsp;skip,&amp;nbsp;그리고&amp;nbsp;자연수&amp;nbsp;index가&amp;nbsp;매개변수로&amp;nbsp;주어질&amp;nbsp;때&amp;nbsp;위&amp;nbsp;규칙대로&amp;nbsp;s를&amp;nbsp;변환한&amp;nbsp;결과를&amp;nbsp;return하도록&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;완성해주세요.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;제한사항&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5&amp;nbsp;&amp;le;&amp;nbsp;s의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;50 &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;skip의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;10 &lt;br /&gt;s와&amp;nbsp;skip은&amp;nbsp;알파벳&amp;nbsp;소문자로만&amp;nbsp;이루어져&amp;nbsp;있습니다. &lt;br /&gt;skip에&amp;nbsp;포함되는&amp;nbsp;알파벳은&amp;nbsp;s에&amp;nbsp;포함되지&amp;nbsp;않습니다. &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;index&amp;nbsp;&amp;le;&amp;nbsp;20 &lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;문제풀이&lt;/h3&gt;
&lt;pre id=&quot;code_1730195163689&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;String alphabet = &quot;abcdefghijklmnopqrstuvwxyz&quot;;
StringBuilder result = new StringBuilder();&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;1. alphabet 변수를 생성했어요. 왜냐하면 알파벳의 index를 알기 위해서입니다. 그리고 result 결과 값을 담기 위해서 StringBuilder를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1730195301097&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// skip에 포함된 문자 제거
for(char charS : s.toCharArray()) {
    int currentIndex = alphabet.indexOf(charS);
    int count = 0;
    ...(생략)
}&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;2. 매개변수 값 s를 사용해서 한글자식 뽑고 currentIndex 값을 찾는다. 그리고 count는 매개변수 skip 값이 없을 때 +1를 하여&amp;nbsp; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;매개변수 index만큼 이동시키기 위해 있는 변수다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1730195563758&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;while(count &amp;lt; index) {
    // alphabet.length()의 길이를 초과할 때 처음부터 시작
    currentIndex = (currentIndex + 1) % alphabet.length();

    // skip에 없을 떄 count 증가
    if(skip.indexOf(alphabet.charAt(currentIndex)) == -1) {
        count++;
    }

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. while문을 사용해서 index만큼 돌 수 있다. 그리고 alphabet.length()의 길이를 초과할 때 처음부터 시작하여 currentIndex 초기화를 초기화한다. if문을 사용해서 skip에 문자가 없을 때 count를 증가시킨다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1730195761263&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;result.append(alphabet.charAt(currentIndex));&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 결과값을 담는다. StringBuilder를 사용했기 때문에 append 함수를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1730195791926&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; return result.toString();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 결과값을 return한다. result가 StringBuilder이기 때문에 toString으로 형변환한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;전체코드&lt;/h3&gt;
&lt;pre id=&quot;code_1730195864414&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    public String solution(String s, String skip, int index) {
        String alphabet = &quot;abcdefghijklmnopqrstuvwxyz&quot;;
        StringBuilder result = new StringBuilder();
        
        // skip에 포함된 문자 제거
        for(char charS : s.toCharArray()) {
            int currentIndex = alphabet.indexOf(charS);
            int count = 0;
            
            while(count &amp;lt; index) {
                // alphabet.length()의 길이를 초과할 때 처음부터 시작
                currentIndex = (currentIndex + 1) % alphabet.length();
                
                // skip에 없을 떄 count 증가
                if(skip.indexOf(alphabet.charAt(currentIndex)) == -1) {
                    count++;
                }
                
            }
            
            result.append(alphabet.charAt(currentIndex));
            
        }
        return result.toString();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1730195885734&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/155652&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/biI52V/hyXpo9Z6BL/zbNbQjMyT7c6LfUkv9NNKK/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/U581e/hyXpCHb3Xk/6MwNCM6Qf3mNTksr7qLcFk/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/155652&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/155652&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/biI52V/hyXpo9Z6BL/zbNbQjMyT7c6LfUkv9NNKK/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/U581e/hyXpCHb3Xk/6MwNCM6Qf3mNTksr7qLcFk/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;</description>
      <category>알고리즘</category>
      <category>IT</category>
      <category>Java</category>
      <category>코딩테스트</category>
      <category>프로그래머스</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/38</guid>
      <comments>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%91%98%EB%A7%8C%EC%9D%98-%EC%95%94%ED%98%B8-JAVA#entry38comment</comments>
      <pubDate>Tue, 29 Oct 2024 18:58:11 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/코딩테스트]  카드 뭉치(JAVA)</title>
      <link>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%B9%B4%EB%93%9C-%EB%AD%89%EC%B9%98JAVA</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;안녕하세요!!&lt;br /&gt;벌써 10월 말&lt;br /&gt;날씨가 많이 쌀쌀하네요.&lt;br /&gt;감기 조심!!&lt;br /&gt;&lt;br /&gt;오늘은 카드 뭉치들을 &lt;br /&gt;순서대로 뽑아 목푯 값과&lt;br /&gt;일치하는지 확인하는 코딩입니다!!&lt;/span&gt;&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;코니는&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;배열을&amp;nbsp;만들&amp;nbsp;수&amp;nbsp;있는지&amp;nbsp;알고&amp;nbsp;싶습니다. &lt;br /&gt;&lt;br /&gt;원하는&amp;nbsp;카드&amp;nbsp;뭉치에서&amp;nbsp;카드를&amp;nbsp;순서대로&amp;nbsp;한&amp;nbsp;장씩&amp;nbsp;사용합니다. &lt;br /&gt;한&amp;nbsp;번&amp;nbsp;사용한&amp;nbsp;카드는&amp;nbsp;다시&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;없습니다. &lt;br /&gt;카드를&amp;nbsp;사용하지&amp;nbsp;않고&amp;nbsp;다음&amp;nbsp;카드로&amp;nbsp;넘어갈&amp;nbsp;수&amp;nbsp;없습니다. &lt;br /&gt;기존에&amp;nbsp;주어진&amp;nbsp;카드&amp;nbsp;뭉치의&amp;nbsp;단어&amp;nbsp;순서는&amp;nbsp;바꿀&amp;nbsp;수&amp;nbsp;없습니다. &lt;br /&gt;예를&amp;nbsp;들어&amp;nbsp;첫&amp;nbsp;번째&amp;nbsp;카드&amp;nbsp;뭉치에&amp;nbsp;순서대로&amp;nbsp;[&quot;i&quot;,&amp;nbsp;&quot;drink&quot;,&amp;nbsp;&quot;water&quot;],&amp;nbsp;두&amp;nbsp;번째&amp;nbsp;카드&amp;nbsp;뭉치에&amp;nbsp;순서대로&amp;nbsp;[&quot;want&quot;,&amp;nbsp;&quot;to&quot;]가&amp;nbsp;적혀있을&amp;nbsp;때&amp;nbsp;[&quot;i&quot;,&amp;nbsp;&quot;want&quot;,&amp;nbsp;&quot;to&quot;,&amp;nbsp;&quot;drink&quot;,&amp;nbsp;&quot;water&quot;]&amp;nbsp;순서의&amp;nbsp;단어&amp;nbsp;배열을&amp;nbsp;만들려고&amp;nbsp;한다면&amp;nbsp;첫&amp;nbsp;번째&amp;nbsp;카드&amp;nbsp;뭉치에서&amp;nbsp;&quot;i&quot;를&amp;nbsp;사용한&amp;nbsp;후&amp;nbsp;두&amp;nbsp;번째&amp;nbsp;카드&amp;nbsp;뭉치에서&amp;nbsp;&quot;want&quot;와&amp;nbsp;&quot;to&quot;를&amp;nbsp;사용하고&amp;nbsp;첫&amp;nbsp;번째&amp;nbsp;카드뭉치에&amp;nbsp;&quot;drink&quot;와&amp;nbsp;&quot;water&quot;를&amp;nbsp;차례대로&amp;nbsp;사용하면&amp;nbsp;원하는&amp;nbsp;순서의&amp;nbsp;단어&amp;nbsp;배열을&amp;nbsp;만들&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;문자열로&amp;nbsp;이루어진&amp;nbsp;배열&amp;nbsp;cards1,&amp;nbsp;cards2와&amp;nbsp;원하는&amp;nbsp;단어&amp;nbsp;배열&amp;nbsp;goal이&amp;nbsp;매개변수로&amp;nbsp;주어질&amp;nbsp;때,&amp;nbsp;cards1과&amp;nbsp;cards2에&amp;nbsp;적힌&amp;nbsp;단어들로&amp;nbsp;goal를&amp;nbsp;만들&amp;nbsp;있다면&amp;nbsp;&quot;Yes&quot;를,&amp;nbsp;만들&amp;nbsp;수&amp;nbsp;없다면&amp;nbsp;&quot;No&quot;를&amp;nbsp;return 하는&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;완성해 주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;제한사항&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1&amp;nbsp;&amp;le;&amp;nbsp;cards1의&amp;nbsp;길이,&amp;nbsp;cards2의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;10 &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;cards1[i]의&amp;nbsp;길이,&amp;nbsp;cards2[i]의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;10 &lt;br /&gt;cards1과&amp;nbsp;cards2에는&amp;nbsp;서로&amp;nbsp;다른&amp;nbsp;단어만&amp;nbsp;존재합니다. &lt;br /&gt;2&amp;nbsp;&amp;le;&amp;nbsp;goal의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;cards1의&amp;nbsp;길이&amp;nbsp;+&amp;nbsp;cards2의&amp;nbsp;길이 &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;goal[i]의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;10 &lt;br /&gt;goal의&amp;nbsp;원소는&amp;nbsp;cards1과&amp;nbsp;cards2의&amp;nbsp;원소들로만&amp;nbsp;이루어져&amp;nbsp;있습니다. &lt;br /&gt;cards1,&amp;nbsp;cards2,&amp;nbsp;goal의&amp;nbsp;문자열들은&amp;nbsp;모두&amp;nbsp;알파벳&amp;nbsp;소문자로만&amp;nbsp;이루어져&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;문제 풀이&lt;/h3&gt;
&lt;pre id=&quot;code_1729918842468&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// cards1의 인덱스
int index1 = 0;

// cards2의 인덱스
int index2 = 0;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.&amp;nbsp; 파라미터 값에 카드 뭉치를 2개 주었다. 그래서 카드 뭉치들의 인덱스를 count 하기 위해 변수를 생성했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1729918942317&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for(String g : goal) {
    if(index1 &amp;lt; cards1.length &amp;amp;&amp;amp; cards1[index1].equals(g)) {
        // cards1 단어 사용
        index1++;
    }else if(index2 &amp;lt; cards2.length &amp;amp;&amp;amp; cards2[index2].equals(g)) {
        // cards2 단어 사용
        index2++;
    }else {
        // 단어 사용 X
        return &quot;No&quot;;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 목푯 값인 goal를 for문으로 돌리고 if문으로 index를 증가시키므로 순차적으로 값을 비교할 수 있다. 이 코드 전에는 문자열에 담아서 goal과 비교하다 보니 순차적으로 값을 비교할 수 없어 위과 같은 코딩으로 수정했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1729920129920&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;return &quot;Yes&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 2번의 for문을 돌고 난 후에 goal 값과 동일하다면 return &quot;Yes&quot;를 빠져나가게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1729920254311&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/159994&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bfPSc6/hyXpBHs4gq/5wh127C9UKNYWu5VCX5ntK/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/wwPpj/hyXlTbYEok/49qzqAt1YJAq2ZfdK9ilU1/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/159994&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/159994&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bfPSc6/hyXpBHs4gq/5wh127C9UKNYWu5VCX5ntK/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/wwPpj/hyXlTbYEok/49qzqAt1YJAq2ZfdK9ilU1/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;</description>
      <category>알고리즘</category>
      <category>IT</category>
      <category>Java</category>
      <category>코딩</category>
      <category>코딩테스드</category>
      <category>프로그래머스</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/37</guid>
      <comments>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%B9%B4%EB%93%9C-%EB%AD%89%EC%B9%98JAVA#entry37comment</comments>
      <pubDate>Sat, 26 Oct 2024 14:24:22 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/ 코딩테스트] 대충 만든 자판(JAVA)</title>
      <link>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%8C%80%EC%B6%A9-%EB%A7%8C%EB%93%A0-%EC%9E%90%ED%8C%90JAVA</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제 설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;휴대폰의&amp;nbsp;자판은&amp;nbsp;컴퓨터&amp;nbsp;키보드&amp;nbsp;자판과는&amp;nbsp;다르게&amp;nbsp;하나의&amp;nbsp;키에&amp;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;br /&gt;&lt;br /&gt;예를&amp;nbsp;들어,&amp;nbsp;1번&amp;nbsp;키에&amp;nbsp;&quot;A&quot;,&amp;nbsp;&quot;B&quot;,&amp;nbsp;&quot;C&quot;&amp;nbsp;순서대로&amp;nbsp;문자가&amp;nbsp;할당되어&amp;nbsp;있다면&amp;nbsp;1번&amp;nbsp;키를&amp;nbsp;한&amp;nbsp;번&amp;nbsp;누르면&amp;nbsp;&quot;A&quot;,&amp;nbsp;두&amp;nbsp;번&amp;nbsp;누르면&amp;nbsp;&quot;B&quot;,&amp;nbsp;세&amp;nbsp;번&amp;nbsp;누르면&amp;nbsp;&quot;C&quot;가&amp;nbsp;되는&amp;nbsp;식입니다. &lt;br /&gt;&lt;br /&gt;같은&amp;nbsp;규칙을&amp;nbsp;적용해&amp;nbsp;아무렇게나&amp;nbsp;만든&amp;nbsp;휴대폰&amp;nbsp;자판이&amp;nbsp;있습니다.&amp;nbsp;이&amp;nbsp;휴대폰&amp;nbsp;자판은&amp;nbsp;키의&amp;nbsp;개수가&amp;nbsp;1개부터&amp;nbsp;최대&amp;nbsp;100개까지&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;경우도&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;수&amp;nbsp;없을&amp;nbsp;수도&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;휴대폰&amp;nbsp;자판을&amp;nbsp;이용해&amp;nbsp;특정&amp;nbsp;문자열을&amp;nbsp;작성할&amp;nbsp;때,&amp;nbsp;키를&amp;nbsp;최소&amp;nbsp;몇&amp;nbsp;번&amp;nbsp;눌러야&amp;nbsp;그&amp;nbsp;문자열을&amp;nbsp;작성할&amp;nbsp;수&amp;nbsp;있는지&amp;nbsp;알아보고자&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;1번&amp;nbsp;키부터&amp;nbsp;차례대로&amp;nbsp;할당된&amp;nbsp;문자들이&amp;nbsp;순서대로&amp;nbsp;담긴&amp;nbsp;문자열배열&amp;nbsp;keymap과&amp;nbsp;입력하려는&amp;nbsp;문자열들이&amp;nbsp;담긴&amp;nbsp;문자열&amp;nbsp;배열&amp;nbsp;targets가&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;return&amp;nbsp;하는&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;완성해&amp;nbsp;주세요. &lt;br /&gt;&lt;br /&gt;단,&amp;nbsp;목표&amp;nbsp;문자열을&amp;nbsp;작성할&amp;nbsp;수&amp;nbsp;없을&amp;nbsp;때는&amp;nbsp;-1을&amp;nbsp;저장합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;제한사항&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1&amp;nbsp;&amp;le;&amp;nbsp;keymap의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;100 &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;keymap의&amp;nbsp;원소의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;100 &lt;br /&gt;keymap[i]는&amp;nbsp;i&amp;nbsp;+&amp;nbsp;1번&amp;nbsp;키를&amp;nbsp;눌렀을&amp;nbsp;때&amp;nbsp;순서대로&amp;nbsp;바뀌는&amp;nbsp;문자를&amp;nbsp;의미합니다. &lt;br /&gt;예를&amp;nbsp;들어&amp;nbsp;keymap[0]&amp;nbsp;=&amp;nbsp;&quot;ABACD&quot;&amp;nbsp;인&amp;nbsp;경우&amp;nbsp;1번&amp;nbsp;키를&amp;nbsp;한&amp;nbsp;번&amp;nbsp;누르면&amp;nbsp;A,&amp;nbsp;두&amp;nbsp;번&amp;nbsp;누르면&amp;nbsp;B,&amp;nbsp;세&amp;nbsp;번&amp;nbsp;누르면&amp;nbsp;A&amp;nbsp;가&amp;nbsp;됩니다. &lt;br /&gt;keymap의&amp;nbsp;원소의&amp;nbsp;길이는&amp;nbsp;서로&amp;nbsp;다를&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;keymap의&amp;nbsp;원소는&amp;nbsp;알파벳&amp;nbsp;대문자로만&amp;nbsp;이루어져&amp;nbsp;있습니다. &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;targets의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;100 &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;targets의&amp;nbsp;원소의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;100 &lt;br /&gt;targets의&amp;nbsp;원소는&amp;nbsp;알파벳&amp;nbsp;대문자로만&amp;nbsp;이루어져&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제 풀이&lt;/h3&gt;
&lt;pre id=&quot;code_1729568231484&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 최소 눌림 값을 넣기 위한 HashMap
HashMap&amp;lt;Character,Integer&amp;gt; map = new HashMap&amp;lt;&amp;gt;();

//결과 값을 담을 배열
int[] result = new int[targets.length];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 자료구조는 HashMap을 선택했다. 이유는 O(1)의 시간 복잡도로 키에 대한 값을 검색할 수 있고, 최소한의 눌림 횟수를 키-값 쌍으로 저장하기 위해서이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1729568708643&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//keymap
for(int i = 0; i &amp;lt; keymap.length; i++) {
    for(int j = 0; j &amp;lt;keymap[i].length(); j++) {
       char temp = keymap[i].charAt(j);

       // map에 해당 값이 존재하지 않을 때, 최소 눌림일 때 갱신    
       if(!map.containsKey(temp) || map.get(temp) &amp;gt; j + 1) {
           map.put(temp, j + 1);
       } 
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 매개변수로 받은 keymap 값을 이중 for문을 사용하여 하나의 문자로 구분하고 if문을 사용하여 map에 해당 값이 존재하지 않을 때 또는 최소 눌림일 때 map에 값을 넣는다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1729568943902&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//targets
for(int i = 0; i &amp;lt; targets.length; i++) {
    int count = 0;
    boolean flog = true;

    for(int j = 0; j &amp;lt;targets[i].length(); j++) {
        char temp = targets[i].charAt(j);

        if(map.containsKey(temp)) {
            count += map.get(temp);
        }else {
            flog = false;
            break;
        }    
    }

    result[i] = flog ? count : -1;

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;매개변수로 받은 targets 값을 이중 for문을 사용하여 하나의 문자로 구분하고 if문을 사용하여 map에 값이 존재한다면 map에 들어있는 최소 눌림 값을 count한다. 그리고 값이 존재하지 않는다면 -1 값을 return한다.&lt;span&gt;&amp;nbsp;&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_1729569084729&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(String[] keymap, String[] targets) {
        // 최소 눌림 값을 넣기 위한 HashMap
        HashMap&amp;lt;Character,Integer&amp;gt; map = new HashMap&amp;lt;&amp;gt;();
        //결과 값을 담을 배열
        int[] result = new int[targets.length];
        
        //keymap
        for(int i = 0; i &amp;lt; keymap.length; i++) {
            for(int j = 0; j &amp;lt;keymap[i].length(); j++) {
               char temp = keymap[i].charAt(j);
                
               // map에 해당 값이 존재하지 않을 때, 최소 눌림일 때 갱신    
               if(!map.containsKey(temp) || map.get(temp) &amp;gt; j + 1) {
                   map.put(temp, j + 1);
               } 
            }
        }       
        
        //targets
        for(int i = 0; i &amp;lt; targets.length; i++) {
            int count = 0;
            boolean flog = true;
            
            for(int j = 0; j &amp;lt;targets[i].length(); j++) {
                char temp = targets[i].charAt(j);
                
                if(map.containsKey(temp)) {
                    count += map.get(temp);
                }else {
                    flog = false;
                    break;
                }    
            }
            
            result[i] = flog ? count : -1;
            
        }
        
 
        
        return result;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1729569106126&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/160586&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/oCo37/hyXlNhxR2f/dO0Pbmp6f68LzYwFs0PK30/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bKcu3z/hyXlHVXIhb/Xx9qQHORVR4ohMyUCB56Uk/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/160586&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/160586&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/oCo37/hyXlNhxR2f/dO0Pbmp6f68LzYwFs0PK30/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bKcu3z/hyXlHVXIhb/Xx9qQHORVR4ohMyUCB56Uk/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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <category>IT</category>
      <category>Java</category>
      <category>자바</category>
      <category>코딩테스트</category>
      <category>프로그래머스</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/36</guid>
      <comments>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%8C%80%EC%B6%A9-%EB%A7%8C%EB%93%A0-%EC%9E%90%ED%8C%90JAVA#entry36comment</comments>
      <pubDate>Tue, 22 Oct 2024 17:51:59 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/ 코딩테스트] 덧칠하기 (JAVA)</title>
      <link>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%8D%A7%EC%B9%A0%ED%95%98%EA%B8%B0-JAVA</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;오늘은 페인트 덧칠하기를 가지고 왔습니다.&lt;br /&gt;문제 설명을 읽으니 페인트의 원감 절감에 대해서 &lt;br /&gt;굉장히 신경 쓰는 거 같네요.&lt;br /&gt;&lt;/span&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;019&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/019.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/019.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제&amp;nbsp;설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어느&amp;nbsp;학교에&amp;nbsp;페인트가&amp;nbsp;칠해진&amp;nbsp;길이가&amp;nbsp;n미터인&amp;nbsp;벽이&amp;nbsp;있습니다.&amp;nbsp;벽에&amp;nbsp;동아리&amp;nbsp;&amp;middot;&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;합니다.&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;넓은&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;1미터&amp;nbsp;길이의&amp;nbsp;구역&amp;nbsp;n개로&amp;nbsp;나누고,&amp;nbsp;각&amp;nbsp;구역에&amp;nbsp;왼쪽부터&amp;nbsp;순서대로&amp;nbsp;1번부터&amp;nbsp;n번까지&amp;nbsp;번호를&amp;nbsp;붙였습니다.&amp;nbsp;그리고&amp;nbsp;페인트를&amp;nbsp;다시&amp;nbsp;칠해야&amp;nbsp;할&amp;nbsp;구역들을&amp;nbsp;정했습니다. &lt;br /&gt;&lt;br /&gt;벽에&amp;nbsp;페인트를&amp;nbsp;칠하는&amp;nbsp;롤러의&amp;nbsp;길이는&amp;nbsp;m미터이고,&amp;nbsp;롤러로&amp;nbsp;벽에&amp;nbsp;페인트를&amp;nbsp;한&amp;nbsp;번&amp;nbsp;칠하는&amp;nbsp;규칙은&amp;nbsp;다음과&amp;nbsp;같습니다. &lt;br /&gt;&lt;br /&gt;롤러가&amp;nbsp;벽에서&amp;nbsp;벗어나면&amp;nbsp;안&amp;nbsp;됩니다. &lt;br /&gt;구역의&amp;nbsp;일부분만&amp;nbsp;포함되도록&amp;nbsp;칠하면&amp;nbsp;안&amp;nbsp;됩니다. &lt;br /&gt;즉,&amp;nbsp;롤러의&amp;nbsp;좌우측&amp;nbsp;끝을&amp;nbsp;구역의&amp;nbsp;경계선&amp;nbsp;혹은&amp;nbsp;벽의&amp;nbsp;좌우측&amp;nbsp;끝부분에&amp;nbsp;맞춘&amp;nbsp;후&amp;nbsp;롤러를&amp;nbsp;위아래로&amp;nbsp;움직이면서&amp;nbsp;벽을&amp;nbsp;칠합니다.&amp;nbsp;현재&amp;nbsp;페인트를&amp;nbsp;칠하는&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;한&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;한&amp;nbsp;번&amp;nbsp;페인트칠을&amp;nbsp;해야&amp;nbsp;합니다.&amp;nbsp;예산을&amp;nbsp;아끼기&amp;nbsp;위해&amp;nbsp;다시&amp;nbsp;칠할&amp;nbsp;구역을&amp;nbsp;정했듯&amp;nbsp;마찬가지로&amp;nbsp;롤러로&amp;nbsp;페인트칠을&amp;nbsp;하는&amp;nbsp;횟수를&amp;nbsp;최소화하려고&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;정수&amp;nbsp;n,&amp;nbsp;m과&amp;nbsp;다시&amp;nbsp;페인트를&amp;nbsp;칠하기로&amp;nbsp;정한&amp;nbsp;구역들의&amp;nbsp;번호가&amp;nbsp;담긴&amp;nbsp;정수&amp;nbsp;배열&amp;nbsp;section이&amp;nbsp;매개변수로&amp;nbsp;주어질&amp;nbsp;때&amp;nbsp;롤러로&amp;nbsp;페인트칠해야&amp;nbsp;하는&amp;nbsp;최소&amp;nbsp;횟수를&amp;nbsp;return&amp;nbsp;하는&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;작성해&amp;nbsp;주세요&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;제한사항&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1&amp;nbsp;&amp;le;&amp;nbsp;m&amp;nbsp;&amp;le;&amp;nbsp;n&amp;nbsp;&amp;le;&amp;nbsp;100,000 &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;section의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;n &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;section의&amp;nbsp;원소&amp;nbsp;&amp;le;&amp;nbsp;n &lt;br /&gt;section의&amp;nbsp;원소는&amp;nbsp;페인트를&amp;nbsp;다시&amp;nbsp;칠해야&amp;nbsp;하는&amp;nbsp;구역의&amp;nbsp;번호입니다. &lt;br /&gt;section에서&amp;nbsp;같은&amp;nbsp;원소가&amp;nbsp;두&amp;nbsp;번&amp;nbsp;이상&amp;nbsp;나타나지&amp;nbsp;않습니다. &lt;br /&gt;section의&amp;nbsp;원소는&amp;nbsp;오름차순으로&amp;nbsp;정렬되어&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;문제풀이&lt;/h3&gt;
&lt;pre id=&quot;code_1729428612561&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 페인트칠 횟수
int count = 0;
// 현재 구역에서 롤러로 칠할 수 있는 마지막 구역
int lastPainted = 0;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 변수 선언 부분입니다. 저는 변수를 2개 선언했습니다. count 변수는 롤러로 페인트칠을 몇 번 하였는지 카운트하는 것이고 lastPainted 변수는 현재 구역에서 롤러로 칠할 수 있는 마지막 구역입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1729428690848&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for(int i = 0; i &amp;lt; section.length; i++) {
   // 마지막 페인트칠한 끝 번호보다 큰 값이 있다면
   if(section[i] &amp;gt; lastPainted) {
       // 현재 구역에서 롤러로 칠할 수 있는 마지막 구역
       lastPainted = section[i] + m - 1; 
       count++;
   } 

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. for문을 돌려 lastPainted 값을 넣고 count 합니다. 하지만 여기에서는 if문으로 조건이 필요합니다. 마지막으로 롤러로 칠했던 구역보다 큰 구역이 있을 경우를 추가합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;전체코드&lt;/h3&gt;
&lt;pre id=&quot;code_1729428889286&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    public int solution(int n, int m, int[] section) {
        // 페인트칠 횟수
        int count = 0;
        // 현재 구역에서 롤러로 칠할 수 있는 마지막 구역
        int lastPainted = 0;

        for(int i = 0; i &amp;lt; section.length; i++) {
           // 마지막 페인트칠한 끝 번호보다 큰 값이 있다면
           if(section[i] &amp;gt; lastPainted) {
               // 현재 구역에서 롤러로 칠할 수 있는 마지막 구역
               lastPainted = section[i] + m - 1; 
               count++;
           } 

        }
        return count;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1729428897447&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/161989&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/pCBNO/hyXlLQ9sw4/UUmvshp8KSapiVHIiP0bCK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/lT7wd/hyXhSdmwIn/P2eH1JuQopoNFsXkizFaak/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/161989&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/161989&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/pCBNO/hyXlLQ9sw4/UUmvshp8KSapiVHIiP0bCK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/lT7wd/hyXhSdmwIn/P2eH1JuQopoNFsXkizFaak/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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <category>IT</category>
      <category>Java</category>
      <category>자바</category>
      <category>코딩</category>
      <category>프로그래머스</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/35</guid>
      <comments>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%8D%A7%EC%B9%A0%ED%95%98%EA%B8%B0-JAVA#entry35comment</comments>
      <pubDate>Sun, 20 Oct 2024 21:55:20 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/ 코딩테스트] 바탕화면 정리 (JAVA)</title>
      <link>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%B0%94%ED%83%95%ED%99%94%EB%A9%B4-%EC%A0%95%EB%A6%AC-JAVA</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;오늘의 코딩!!&lt;br /&gt;바탕화면 깨끗이 정리&lt;br /&gt;&lt;/span&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;019&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/019.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/019.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코딩테스트를&amp;nbsp;준비하는&amp;nbsp;머쓱이는&amp;nbsp;프로그래머스에서&amp;nbsp;문제를&amp;nbsp;풀고&amp;nbsp;나중에&amp;nbsp;다시&amp;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;생각했습니다.&amp;nbsp;프로그래머스에서&amp;nbsp;작성했던&amp;nbsp;코드는&amp;nbsp;그&amp;nbsp;문제에&amp;nbsp;가서&amp;nbsp;다시&amp;nbsp;볼&amp;nbsp;수&amp;nbsp;있기&amp;nbsp;때문에&amp;nbsp;저장해&amp;nbsp;둔&amp;nbsp;파일들을&amp;nbsp;전부&amp;nbsp;삭제하기로&amp;nbsp;했습니다. &lt;br /&gt;&lt;br /&gt;컴퓨터&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;wallpaper가&amp;nbsp;주어집니다.&amp;nbsp;파일들은&amp;nbsp;바탕화면의&amp;nbsp;격자칸에&amp;nbsp;위치하고&amp;nbsp;바탕화면의&amp;nbsp;격자점들은&amp;nbsp;바탕화면의&amp;nbsp;가장&amp;nbsp;왼쪽&amp;nbsp;위를&amp;nbsp;(0,&amp;nbsp;0)으로&amp;nbsp;시작해&amp;nbsp;(세로&amp;nbsp;좌표,&amp;nbsp;가로&amp;nbsp;좌표)로&amp;nbsp;표현합니다.&amp;nbsp;빈칸은&amp;nbsp;&quot;.&quot;,&amp;nbsp;파일이&amp;nbsp;있는&amp;nbsp;칸은&amp;nbsp;&quot;#&quot;의&amp;nbsp;값을&amp;nbsp;가집니다.&amp;nbsp;드래그를&amp;nbsp;하면&amp;nbsp;파일들을&amp;nbsp;선택할&amp;nbsp;수&amp;nbsp;있고,&amp;nbsp;선택된&amp;nbsp;파일들을&amp;nbsp;삭제할&amp;nbsp;수&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;br /&gt;&lt;br /&gt;드래그는&amp;nbsp;바탕화면의&amp;nbsp;격자점&amp;nbsp;S(lux,&amp;nbsp;luy)를&amp;nbsp;마우스&amp;nbsp;왼쪽&amp;nbsp;버튼으로&amp;nbsp;클릭한&amp;nbsp;상태로&amp;nbsp;격자점&amp;nbsp;E(rdx,&amp;nbsp;rdy)로&amp;nbsp;이동한&amp;nbsp;뒤&amp;nbsp;마우스&amp;nbsp;왼쪽&amp;nbsp;버튼을&amp;nbsp;떼는&amp;nbsp;행동입니다.&amp;nbsp;이때,&amp;nbsp;&quot;점&amp;nbsp;S에서&amp;nbsp;점&amp;nbsp;E로&amp;nbsp;드래그한다&quot;고&amp;nbsp;표현하고&amp;nbsp;점&amp;nbsp;S와&amp;nbsp;점&amp;nbsp;E를&amp;nbsp;각각&amp;nbsp;드래그의&amp;nbsp;시작점,&amp;nbsp;끝점이라고&amp;nbsp;표현합니다. &lt;br /&gt;&lt;br /&gt;점&amp;nbsp;S(lux,&amp;nbsp;luy)에서&amp;nbsp;점&amp;nbsp;E(rdx,&amp;nbsp;rdy)로&amp;nbsp;드래그를&amp;nbsp;할&amp;nbsp;때,&amp;nbsp;&quot;드래그&amp;nbsp;한&amp;nbsp;거리&quot;는&amp;nbsp;|rdx&amp;nbsp;-&amp;nbsp;lux|&amp;nbsp;+&amp;nbsp;|rdy&amp;nbsp;-&amp;nbsp;luy|로&amp;nbsp;정의합니다. &lt;br /&gt;&lt;br /&gt;점&amp;nbsp;S에서&amp;nbsp;점&amp;nbsp;E로&amp;nbsp;드래그를&amp;nbsp;하면&amp;nbsp;바탕화면에서&amp;nbsp;두&amp;nbsp;격자점을&amp;nbsp;각각&amp;nbsp;왼쪽&amp;nbsp;위,&amp;nbsp;오른쪽&amp;nbsp;아래로&amp;nbsp;하는&amp;nbsp;직사각형&amp;nbsp;내부에&amp;nbsp;있는&amp;nbsp;모든&amp;nbsp;파일이&amp;nbsp;선택됩니다. &lt;br /&gt;&lt;br /&gt;예를&amp;nbsp;들어&amp;nbsp;wallpaper&amp;nbsp;=&amp;nbsp;[&quot;.#...&quot;,&amp;nbsp;&quot;..#..&quot;,&amp;nbsp;&quot;...#.&quot;]인&amp;nbsp;바탕화면을&amp;nbsp;그림으로&amp;nbsp;나타내면&amp;nbsp;다음과&amp;nbsp;같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;eg1.png&quot; data-origin-width=&quot;340&quot; data-origin-height=&quot;220&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcpbvh/btsKbzkdDoE/sT8qvKlY7VgH3W5eF4brkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcpbvh/btsKbzkdDoE/sT8qvKlY7VgH3W5eF4brkk/img.png&quot; data-alt=&quot;[출처] 프로그래머스 &amp;amp;gt; 바탕화면 정리 (1)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcpbvh/btsKbzkdDoE/sT8qvKlY7VgH3W5eF4brkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbcpbvh%2FbtsKbzkdDoE%2FsT8qvKlY7VgH3W5eF4brkk%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;437&quot; height=&quot;283&quot; data-filename=&quot;eg1.png&quot; data-origin-width=&quot;340&quot; data-origin-height=&quot;220&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[출처] 프로그래머스 &amp;gt; 바탕화면 정리 (1)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이러한&amp;nbsp;바탕화면에서&amp;nbsp;다음&amp;nbsp;그림과&amp;nbsp;같이&amp;nbsp;S(0,&amp;nbsp;1)에서&amp;nbsp;E(3,&amp;nbsp;4)로&amp;nbsp;드래그하면&amp;nbsp;세&amp;nbsp;개의&amp;nbsp;파일이&amp;nbsp;모두&amp;nbsp;선택되므로&amp;nbsp;드래그&amp;nbsp;한&amp;nbsp;거리&amp;nbsp;(3&amp;nbsp;-&amp;nbsp;0)&amp;nbsp;+&amp;nbsp;(4&amp;nbsp;-&amp;nbsp;1)&amp;nbsp;=&amp;nbsp;6을&amp;nbsp;최솟값으로&amp;nbsp;모든&amp;nbsp;파일을&amp;nbsp;선택&amp;nbsp;가능합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;eg1-2.png&quot; data-origin-width=&quot;340&quot; data-origin-height=&quot;220&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blcADt/btsKdnvzlcX/Fr1tsFdiCRSkCEDkH45Dz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blcADt/btsKdnvzlcX/Fr1tsFdiCRSkCEDkH45Dz1/img.png&quot; data-alt=&quot;[출처] 프로그래머스 &amp;amp;gt; 바탕화면 정리 (2)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blcADt/btsKdnvzlcX/Fr1tsFdiCRSkCEDkH45Dz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblcADt%2FbtsKdnvzlcX%2FFr1tsFdiCRSkCEDkH45Dz1%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;445&quot; height=&quot;288&quot; data-filename=&quot;eg1-2.png&quot; data-origin-width=&quot;340&quot; data-origin-height=&quot;220&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[출처] 프로그래머스 &amp;gt; 바탕화면 정리 (2)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;(0,&amp;nbsp;0)에서&amp;nbsp;(3,&amp;nbsp;5)로&amp;nbsp;드래그해도&amp;nbsp;모든&amp;nbsp;파일을&amp;nbsp;선택할&amp;nbsp;수&amp;nbsp;있지만&amp;nbsp;이때&amp;nbsp;드래그&amp;nbsp;한&amp;nbsp;거리는&amp;nbsp;(3&amp;nbsp;-&amp;nbsp;0)&amp;nbsp;+&amp;nbsp;(5&amp;nbsp;-&amp;nbsp;0)&amp;nbsp;=&amp;nbsp;8이고&amp;nbsp;이전의&amp;nbsp;방법보다&amp;nbsp;거리가&amp;nbsp;늘어납니다. &lt;br /&gt;&lt;br /&gt;머쓱이의&amp;nbsp;컴퓨터&amp;nbsp;바탕화면의&amp;nbsp;상태를&amp;nbsp;나타내는&amp;nbsp;문자열&amp;nbsp;배열&amp;nbsp;wallpaper가&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;return하는&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;작성해&amp;nbsp;주세요.&amp;nbsp;드래그의&amp;nbsp;시작점이&amp;nbsp;(lux,&amp;nbsp;luy),&amp;nbsp;끝점이&amp;nbsp;(rdx,&amp;nbsp;rdy)라면&amp;nbsp;정수&amp;nbsp;배열&amp;nbsp;[lux,&amp;nbsp;luy,&amp;nbsp;rdx,&amp;nbsp;rdy]를&amp;nbsp;return하면&amp;nbsp;됩니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;제안사항&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1&amp;nbsp;&amp;le;&amp;nbsp;wallpaper의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;50 &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;wallpaper[i]의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;50 &lt;br /&gt;wallpaper의&amp;nbsp;모든&amp;nbsp;원소의&amp;nbsp;길이는&amp;nbsp;동일합니다. &lt;br /&gt;wallpaper[i][j]는&amp;nbsp;바탕화면에서&amp;nbsp;i&amp;nbsp;+&amp;nbsp;1행&amp;nbsp;j&amp;nbsp;+&amp;nbsp;1열에&amp;nbsp;해당하는&amp;nbsp;칸의&amp;nbsp;상태를&amp;nbsp;나타냅니다. &lt;br /&gt;wallpaper[i][j]는&amp;nbsp;&quot;#&quot;&amp;nbsp;또는&amp;nbsp;&quot;.&quot;의&amp;nbsp;값만&amp;nbsp;가집니다. &lt;br /&gt;바탕화면에는&amp;nbsp;적어도&amp;nbsp;하나의&amp;nbsp;파일이&amp;nbsp;있습니다. &lt;br /&gt;드래그&amp;nbsp;시작점&amp;nbsp;(lux,&amp;nbsp;luy)와&amp;nbsp;끝점&amp;nbsp;(rdx,&amp;nbsp;rdy)는&amp;nbsp;lux&amp;nbsp;&amp;lt;&amp;nbsp;rdx,&amp;nbsp;luy&amp;nbsp;&amp;lt;&amp;nbsp;rdy를&amp;nbsp;만족해야&amp;nbsp;합니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;문제풀이&lt;/h3&gt;
&lt;pre id=&quot;code_1729254876305&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// S(lux, luy)
int lux = Integer.MAX_VALUE;
int luy = Integer.MAX_VALUE;

// E(rdx, rdy)
int rdx = Integer.MIN_VALUE;
int rdy = Integer.MIN_VALUE;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. S(Lux, Luy)의 최솟값을 구하기 위해 초기화 값을 Integer.MAX_VALUE를 사용하고 Math.min(lux, i)를 통해 값을 비교하여 최솟값을 찾는다. E(Rdx, Rdy) 값은 최댓값을 구하기 위해 초기화 값을 Integer.MIN_VALUE를 사용하고 Math.max(rdx, i)를 통해 값을 비교하여 최댓값을 찾는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1729255854574&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for(int i = 0; i &amp;lt; wallpaper.length; i++) {
    for(int j = 0; j &amp;lt; wallpaper[i].length(); j++) {
        if(wallpaper[i].charAt(j) == '#') {
            // S(lux, luy)
            lux = Math.min(lux, i);
            luy = Math.min(luy, j);

            // E(rdx, rdy)
            rdx = Math.max(rdx, i);
            rdy = Math.max(rdy, j);
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 이중 for문을 사용하여 '#' 문자를 찾아 S의 최솟값, E의 최댓값을 비교한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1729255915535&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;return new int[] {lux, luy, rdx + 1, rdy + 1};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 값을 return합니다. rdx + 1, rdy +1에 각 +1 한 이유는 좌표를 재설정해주기 위해서이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;전체코드&lt;/h3&gt;
&lt;pre id=&quot;code_1729256025230&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    public int[] solution(String[] wallpaper) {
        // S(lux, luy)
        int lux = Integer.MAX_VALUE;
        int luy = Integer.MAX_VALUE;
        
        // E(rdx, rdy)
        int rdx = Integer.MIN_VALUE;
        int rdy = Integer.MIN_VALUE;    
           
        for(int i = 0; i &amp;lt; wallpaper.length; i++) {
            for(int j = 0; j &amp;lt; wallpaper[i].length(); j++) {
                if(wallpaper[i].charAt(j) == '#') {
                    // S(lux, luy)
                    lux = Math.min(lux, i);
                    luy = Math.min(luy, j);
                    
                    // E(rdx, rdy)
                    rdx = Math.max(rdx, i);
                    rdy = Math.max(rdy, j);
                }
            }
        }
        
        return new int[] {lux, luy, rdx + 1, rdy + 1};
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1729256072112&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/161990&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/tYoQc/hyXhVOngdM/0BUWkGNDQmvIVf2cgDJcR1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/srquO/hyXhOuYO7w/VVfcGnjgoYgNMkkWGpMbMk/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/161990&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/161990&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/tYoQc/hyXhVOngdM/0BUWkGNDQmvIVf2cgDJcR1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/srquO/hyXhOuYO7w/VVfcGnjgoYgNMkkWGpMbMk/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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <category>IT</category>
      <category>Java</category>
      <category>자바</category>
      <category>코딩테스트</category>
      <category>프로그래머스</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/34</guid>
      <comments>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%B0%94%ED%83%95%ED%99%94%EB%A9%B4-%EC%A0%95%EB%A6%AC-JAVA#entry34comment</comments>
      <pubDate>Fri, 18 Oct 2024 21:54:14 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/ 코딩테스트] 공원 산책 (JAVA)</title>
      <link>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EA%B3%B5%EC%9B%90-%EC%82%B0%EC%B1%85-JAVA</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;오늘도 등장한 코딩 테스트!!&lt;br /&gt;공원 산책 위험해~&lt;br /&gt;&lt;/span&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;007&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/007.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/007.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지나다니는&amp;nbsp;길을&amp;nbsp;'O',&amp;nbsp;장애물을&amp;nbsp;'X'로&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;형식으로&amp;nbsp;주어집니다. &lt;br /&gt;&lt;br /&gt;[&quot;방향&amp;nbsp;거리&quot;,&amp;nbsp;&quot;방향&amp;nbsp;거리&quot;&amp;nbsp;&amp;hellip;&amp;nbsp;] &lt;br /&gt;예를&amp;nbsp;들어&amp;nbsp;&quot;E&amp;nbsp;5&quot;는&amp;nbsp;로봇&amp;nbsp;강아지가&amp;nbsp;현재&amp;nbsp;위치에서&amp;nbsp;동쪽으로&amp;nbsp;5칸&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;주어진&amp;nbsp;방향으로&amp;nbsp;이동할&amp;nbsp;때&amp;nbsp;공원을&amp;nbsp;벗어나는지&amp;nbsp;확인합니다. &lt;br /&gt;주어진&amp;nbsp;방향으로&amp;nbsp;이동&amp;nbsp;중&amp;nbsp;장애물을&amp;nbsp;만나는지&amp;nbsp;확인합니다. &lt;br /&gt;위&amp;nbsp;두&amp;nbsp;가지중&amp;nbsp;어느&amp;nbsp;하나라도&amp;nbsp;해당된다면,&amp;nbsp;로봇&amp;nbsp;강아지는&amp;nbsp;해당&amp;nbsp;명령을&amp;nbsp;무시하고&amp;nbsp;다음&amp;nbsp;명령을&amp;nbsp;수행합니다. &lt;br /&gt;공원의&amp;nbsp;가로&amp;nbsp;길이가&amp;nbsp;W,&amp;nbsp;세로&amp;nbsp;길이가&amp;nbsp;H라고&amp;nbsp;할&amp;nbsp;때,&amp;nbsp;공원의&amp;nbsp;좌측&amp;nbsp;상단의&amp;nbsp;좌표는&amp;nbsp;(0,&amp;nbsp;0),&amp;nbsp;우측&amp;nbsp;하단의&amp;nbsp;좌표는&amp;nbsp;(H&amp;nbsp;-&amp;nbsp;1,&amp;nbsp;W&amp;nbsp;-&amp;nbsp;1)&amp;nbsp;입니다. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;743&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eX6bFT/btsJ8reEgT9/lOzl4mmuDLwZ1I0M75jkh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eX6bFT/btsJ8reEgT9/lOzl4mmuDLwZ1I0M75jkh1/img.png&quot; data-alt=&quot;[출처] 프로그래머스 코딩테스트 연습 &amp;amp;gt; 연습문제 &amp;amp;gt; 공원 산책&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eX6bFT/btsJ8reEgT9/lOzl4mmuDLwZ1I0M75jkh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeX6bFT%2FbtsJ8reEgT9%2FlOzl4mmuDLwZ1I0M75jkh1%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;850&quot; height=&quot;743&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;743&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[출처] 프로그래머스 코딩테스트 연습 &amp;gt; 연습문제 &amp;gt; 공원 산책&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;공원을&amp;nbsp;나타내는&amp;nbsp;문자열&amp;nbsp;배열&amp;nbsp;park,&amp;nbsp;로봇&amp;nbsp;강아지가&amp;nbsp;수행할&amp;nbsp;명령이&amp;nbsp;담긴&amp;nbsp;문자열&amp;nbsp;배열&amp;nbsp;routes가&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;return&amp;nbsp;하도록&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;완성해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;제한사항&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3&amp;nbsp;&amp;le;&amp;nbsp;park의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;50 &lt;br /&gt;3&amp;nbsp;&amp;le;&amp;nbsp;park[i]의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;50 &lt;br /&gt;park[i]는&amp;nbsp;다음&amp;nbsp;문자들로&amp;nbsp;이루어져&amp;nbsp;있으며&amp;nbsp;시작지점은&amp;nbsp;하나만&amp;nbsp;주어집니다. &lt;br /&gt;S&amp;nbsp;:&amp;nbsp;시작&amp;nbsp;지점 &lt;br /&gt;O&amp;nbsp;:&amp;nbsp;이동&amp;nbsp;가능한&amp;nbsp;통로 &lt;br /&gt;X&amp;nbsp;:&amp;nbsp;장애물 &lt;br /&gt;park는&amp;nbsp;직사각형&amp;nbsp;모양입니다. &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;routes의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;50 &lt;br /&gt;routes의&amp;nbsp;각&amp;nbsp;원소는&amp;nbsp;로봇&amp;nbsp;강아지가&amp;nbsp;수행할&amp;nbsp;명령어를&amp;nbsp;나타냅니다. &lt;br /&gt;로봇&amp;nbsp;강아지는&amp;nbsp;routes의&amp;nbsp;첫&amp;nbsp;번째&amp;nbsp;원소부터&amp;nbsp;순서대로&amp;nbsp;명령을&amp;nbsp;수행합니다. &lt;br /&gt;routes의&amp;nbsp;원소는&amp;nbsp;&quot;op&amp;nbsp;n&quot;과&amp;nbsp;같은&amp;nbsp;구조로&amp;nbsp;이루어져&amp;nbsp;있으며,&amp;nbsp;op는&amp;nbsp;이동할&amp;nbsp;방향,&amp;nbsp;n은&amp;nbsp;이동할&amp;nbsp;칸의&amp;nbsp;수를&amp;nbsp;의미합니다. &lt;br /&gt;op는&amp;nbsp;다음&amp;nbsp;네&amp;nbsp;가지중&amp;nbsp;하나로&amp;nbsp;이루어져&amp;nbsp;있습니다. &lt;br /&gt;N&amp;nbsp;:&amp;nbsp;북쪽으로&amp;nbsp;주어진&amp;nbsp;칸만큼&amp;nbsp;이동합니다. &lt;br /&gt;S&amp;nbsp;:&amp;nbsp;남쪽으로&amp;nbsp;주어진&amp;nbsp;칸만큼&amp;nbsp;이동합니다. &lt;br /&gt;W&amp;nbsp;:&amp;nbsp;서쪽으로&amp;nbsp;주어진&amp;nbsp;칸만큼&amp;nbsp;이동합니다. &lt;br /&gt;E&amp;nbsp;:&amp;nbsp;동쪽으로&amp;nbsp;주어진&amp;nbsp;칸만큼&amp;nbsp;이동합니다. &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;n&amp;nbsp;&amp;le;&amp;nbsp;9&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;문제풀이&lt;/h3&gt;
&lt;pre id=&quot;code_1729066867448&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//현재 위치
int X = 0;
int Y = 0;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 현재 위치를 담기 위해서 변수를 초기화한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1729067095561&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 시작위치 찾기
for(int i = 0; i &amp;lt; park.length; i++) {
   for(int j = 0; j &amp;lt; park[i].length(); j++) {
       if(park[i].charAt(j) == 'S') {
           X = i;
           Y = j;
       }
   }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 매개변수 값으로 받은 park를 사용하여 시작위치를 찾는다. park가 2차원 배열은 아니지만 이중 for문을 사용할 수 있었던 이유는 charAt 함수를 사용해서 2차원 배열처럼 사용할 수 있기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1729067254962&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 이동 명령 처리
for(String route : routes) {
    String[] parts = route.split(&quot; &quot;);

    String direction = parts[0];
    int distance = Integer.parseInt(parts[1]);

    ...(생략)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 매개변수 값인 routes를 사용해서 direction(방향), distance(거리) 변수를 생성한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1729067430481&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 임시 변수
int tempX = X;
int tempY = Y;

boolean flog = true;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 임시 변수 tempX, tempY를&amp;nbsp; 생성한다. 이유는 공원을 벗어는지, 장애물을 만나는지와 같은 검사를 할 때 for문을 돌 때마다 실시간으로 확인을 해야하기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1729067721315&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for(int d = 0; d &amp;lt; distance; d++) {
    if(direction.equals(&quot;N&quot;)) {
        tempX--;
    } else if(direction.equals(&quot;S&quot;)) {
        tempX++; 
    } else if(direction.equals(&quot;W&quot;)) {
        tempY--; 
    } else if(direction.equals(&quot;E&quot;)) {
        tempY++;
    }

    if(tempX &amp;lt; 0 || tempX &amp;gt;= park.length || tempY &amp;lt; 0 || tempY &amp;gt;= park[0].length() || park[tempX].charAt(tempY) == 'X') {
    flog = false;
    break;
    }

}

if(flog) {
    X = tempX;
    Y = tempY;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. if문을 사용해서 동서남북으로 거리를 이동시킨다. 여기서 중요한 점은 for문을 돌릴 때 distance(거리)로 돌려야 한다는 점이다. 이 후 유효성 if문를 사용하여 X, Y에 값을 넣는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1729067807477&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;return new int[] {X, Y};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 배열로 return하기 때문에 X, Y를 담은 객체를 하나 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;전체코드&lt;/h3&gt;
&lt;pre id=&quot;code_1729067872851&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    public int[] solution(String[] park, String[] routes) {

        //현재 위치
        int X = 0;
        int Y = 0;
        
        
        // 시작위치 찾기
        for(int i = 0; i &amp;lt; park.length; i++) {
           for(int j = 0; j &amp;lt; park[i].length(); j++) {
               if(park[i].charAt(j) == 'S') {
                   X = i;
                   Y = j;
               }
           }
        }
        
        // 이동 명령 처리
        for(String route : routes) {
            String[] parts = route.split(&quot; &quot;);
            
            String direction = parts[0];
            int distance = Integer.parseInt(parts[1]);
            
            // 임시 변수
            int tempX = X;
            int tempY = Y;
            
            boolean flog = true;
            
            for(int d = 0; d &amp;lt; distance; d++) {
                if(direction.equals(&quot;N&quot;)) {
                    tempX--;
                } else if(direction.equals(&quot;S&quot;)) {
                    tempX++; 
                } else if(direction.equals(&quot;W&quot;)) {
                    tempY--; 
                } else if(direction.equals(&quot;E&quot;)) {
                    tempY++;
                }
                
                if(tempX &amp;lt; 0 || tempX &amp;gt;= park.length || tempY &amp;lt; 0 || tempY &amp;gt;= park[0].length() || park[tempX].charAt(tempY) == 'X') {
                flog = false;
                break;
                }
                
            }
            
            if(flog) {
                X = tempX;
                Y = tempY;
            }
        }
        
        return new int[] {X, Y};
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;figure id=&quot;og_1729067885892&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/172928&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/1hIWu/hyXhQsnmh0/1a9hFoX2aS3bvG0kfXdkJ1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/GfmnX/hyXhUhdLWT/Tw1t3RwWiYH4lVkccGYwak/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/172928&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/172928&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/1hIWu/hyXhQsnmh0/1a9hFoX2aS3bvG0kfXdkJ1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/GfmnX/hyXhUhdLWT/Tw1t3RwWiYH4lVkccGYwak/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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <category>IT</category>
      <category>Java</category>
      <category>자바</category>
      <category>코딩테스트</category>
      <category>프로그래머스</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/33</guid>
      <comments>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EA%B3%B5%EC%9B%90-%EC%82%B0%EC%B1%85-JAVA#entry33comment</comments>
      <pubDate>Wed, 16 Oct 2024 17:38:33 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/ 코딩테스트] 추억 점수 (JAVA)</title>
      <link>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%B6%94%EC%96%B5-%EC%A0%90%EC%88%98-JAVA</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;점점 성장하는 개발자!!&lt;br /&gt;가 되기 위한&lt;br /&gt;&lt;b&gt;한걸음&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;013&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/013.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/013.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사진들을&amp;nbsp;보며&amp;nbsp;추억에&amp;nbsp;젖어&amp;nbsp;있던&amp;nbsp;루는&amp;nbsp;사진별로&amp;nbsp;추억&amp;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;속&amp;nbsp;인물의&amp;nbsp;이름이&amp;nbsp;[&quot;may&quot;,&amp;nbsp;&quot;kein&quot;,&amp;nbsp;&quot;kain&quot;]이고&amp;nbsp;각&amp;nbsp;인물의&amp;nbsp;그리움&amp;nbsp;점수가&amp;nbsp;[5점,&amp;nbsp;10점,&amp;nbsp;1점]일&amp;nbsp;때&amp;nbsp;해당&amp;nbsp;사진의&amp;nbsp;추억&amp;nbsp;점수는&amp;nbsp;16(5&amp;nbsp;+&amp;nbsp;10&amp;nbsp;+&amp;nbsp;1)점이&amp;nbsp;됩니다.&amp;nbsp;다른&amp;nbsp;사진&amp;nbsp;속&amp;nbsp;인물의&amp;nbsp;이름이&amp;nbsp;[&quot;kali&quot;,&amp;nbsp;&quot;mari&quot;,&amp;nbsp;&quot;don&quot;,&amp;nbsp;&quot;tony&quot;]이고&amp;nbsp;[&quot;kali&quot;,&amp;nbsp;&quot;mari&quot;,&amp;nbsp;&quot;don&quot;]의&amp;nbsp;그리움&amp;nbsp;점수가&amp;nbsp;각각&amp;nbsp;[11점,&amp;nbsp;1점,&amp;nbsp;55점]]이고,&amp;nbsp;&quot;tony&quot;는&amp;nbsp;그리움&amp;nbsp;점수가&amp;nbsp;없을&amp;nbsp;때,&amp;nbsp;이&amp;nbsp;사진의&amp;nbsp;추억&amp;nbsp;점수는&amp;nbsp;3명의&amp;nbsp;그리움&amp;nbsp;점수를&amp;nbsp;합한&amp;nbsp;67(11&amp;nbsp;+&amp;nbsp;1&amp;nbsp;+&amp;nbsp;55)점입니다. &lt;br /&gt;&lt;br /&gt;그리워하는&amp;nbsp;사람의&amp;nbsp;이름을&amp;nbsp;담은&amp;nbsp;문자열&amp;nbsp;배열&amp;nbsp;name,&amp;nbsp;각&amp;nbsp;사람별&amp;nbsp;그리움&amp;nbsp;점수를&amp;nbsp;담은&amp;nbsp;정수&amp;nbsp;배열&amp;nbsp;yearning,&amp;nbsp;각&amp;nbsp;사진에&amp;nbsp;찍힌&amp;nbsp;인물의&amp;nbsp;이름을&amp;nbsp;담은&amp;nbsp;이차원&amp;nbsp;문자열&amp;nbsp;배열&amp;nbsp;photo가&amp;nbsp;매개변수로&amp;nbsp;주어질&amp;nbsp;때,&amp;nbsp;사진들의&amp;nbsp;추억&amp;nbsp;점수를&amp;nbsp;photo에&amp;nbsp;주어진&amp;nbsp;순서대로&amp;nbsp;배열에&amp;nbsp;담아&amp;nbsp;return하는&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;완성해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;제한사항&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3&amp;nbsp;&amp;le;&amp;nbsp;name의&amp;nbsp;길이&amp;nbsp;=&amp;nbsp;yearning의&amp;nbsp;길이&amp;le;&amp;nbsp;100 &lt;br /&gt;3&amp;nbsp;&amp;le;&amp;nbsp;name의&amp;nbsp;원소의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;7 &lt;br /&gt;name의&amp;nbsp;원소들은&amp;nbsp;알파벳&amp;nbsp;소문자로만&amp;nbsp;이루어져&amp;nbsp;있습니다. &lt;br /&gt;name에는&amp;nbsp;중복된&amp;nbsp;값이&amp;nbsp;들어가지&amp;nbsp;않습니다. &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;yearning[i]&amp;nbsp;&amp;le;&amp;nbsp;100 &lt;br /&gt;yearning[i]는&amp;nbsp;i번째&amp;nbsp;사람의&amp;nbsp;그리움&amp;nbsp;점수입니다. &lt;br /&gt;3&amp;nbsp;&amp;le;&amp;nbsp;photo의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;100 &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;photo[i]의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;100 &lt;br /&gt;3&amp;nbsp;&amp;le;&amp;nbsp;photo[i]의&amp;nbsp;원소(문자열)의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;7 &lt;br /&gt;photo[i]의&amp;nbsp;원소들은&amp;nbsp;알파벳&amp;nbsp;소문자로만&amp;nbsp;이루어져&amp;nbsp;있습니다. &lt;br /&gt;photo[i]의&amp;nbsp;원소들은&amp;nbsp;중복된&amp;nbsp;값이&amp;nbsp;들어가지&amp;nbsp;않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;문제풀이&lt;/h3&gt;
&lt;pre id=&quot;code_1728989467967&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//해시맵 객체 생성
HashMap&amp;lt;String, Integer&amp;gt; map = new HashMap&amp;lt;&amp;gt;();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 키, 값을 담는 HashMap 자료구조를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728989508628&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// name과 yearning을 map에 저장
for (int i = 0; i &amp;lt; name.length; i++) {
    map.put(name[i], yearning[i]);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. HashMap 자료구조에 값을 넣는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728989547579&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 결과를 담을 배열
int[] answer = new int[photo.length];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 결과 값이 배열로 나가기 때문에 배열 객체를 생성하고 길이는 photo의 길이로 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728989620309&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//사진 별 점수 합
for(int i = 0; i &amp;lt; photo.length; i++) {
    int sum = 0;
    for(String ph : photo[i]) {
	...(생략)
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. photo의 매개변수가 2차 배열이라서 이중 배열을 사용한다. 그리고 photo의 점수가 필요하기 때문에 지역변수인 int sum를 초기화한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728989730614&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if(map.containsKey(ph)) {
   sum += map.get(ph);
}

answer[i] = sum;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. if문을 사용해서 map에 ph와 동일한 이름이 있다면&amp;nbsp; sum(합)한다. 그리고 결과 배열에 담는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;전체코드&lt;/h3&gt;
&lt;pre id=&quot;code_1728990109339&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.HashMap;

class Solution {
    public int[] solution(String[] name, int[] yearning, String[][] photo) {
        //해시맵 객체 생성
        HashMap&amp;lt;String, Integer&amp;gt; map = new HashMap&amp;lt;&amp;gt;();
        
        //행시맵 값
        for(int i = 0; i &amp;lt; name.length; i++) {
            map.put(name[i], yearning[i]);
        }
        
        //결과 값 담을 배열
        int[] answer = new int[photo.length];
        
        //사진 별 점수 합
        for(int i = 0; i &amp;lt; photo.length; i++) {
            int sum = 0;
            for(String ph : photo[i]) {
                if(map.containsKey(ph)) {
                   sum += map.get(ph);
                }
            }
            answer[i] = sum;
        }
        
        return answer;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1728990159253&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/176963&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/EhUys/hyXhRxJI9g/H3yFpt85qnErqAKdDYfJIk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/VbycV/hyXd5Rrolt/iY1bHWpqMF7vWxwUbFb3ok/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/176963&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/176963&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/EhUys/hyXhRxJI9g/H3yFpt85qnErqAKdDYfJIk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/VbycV/hyXd5Rrolt/iY1bHWpqMF7vWxwUbFb3ok/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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <category>IT</category>
      <category>Java</category>
      <category>코딩테스트</category>
      <category>프로그래머스</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/32</guid>
      <comments>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%B6%94%EC%96%B5-%EC%A0%90%EC%88%98-JAVA#entry32comment</comments>
      <pubDate>Tue, 15 Oct 2024 20:02:08 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/ 코딩테스트] 달리기 경주 (JAVA)</title>
      <link>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%8B%AC%EB%A6%AC%EA%B8%B0-%EA%B2%BD%EC%A3%BC-JAVA</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;안녕하세요.&lt;br /&gt;오늘의 달리기 경주!!&lt;br /&gt;&lt;b&gt;RUN&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;niniz&quot; data-emoticon-name=&quot;024&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/024.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/024.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘의 문제 풀이는 2가지입니다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. 이중 for문을 사용한 알고리즘&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;2. HashMap 자료구조를 사용한 알고리즘&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;얀에서는&amp;nbsp;매년&amp;nbsp;달리기&amp;nbsp;경주가&amp;nbsp;열립니다.&amp;nbsp;해설진들은&amp;nbsp;선수들이&amp;nbsp;자기&amp;nbsp;바로&amp;nbsp;앞의&amp;nbsp;선수를&amp;nbsp;추월할&amp;nbsp;때&amp;nbsp;추월한&amp;nbsp;선수의&amp;nbsp;이름을&amp;nbsp;부릅니다.&amp;nbsp;예를&amp;nbsp;들어&amp;nbsp;1등부터&amp;nbsp;3등까지&amp;nbsp;&quot;mumu&quot;,&amp;nbsp;&quot;soe&quot;,&amp;nbsp;&quot;poe&quot;&amp;nbsp;선수들이&amp;nbsp;순서대로&amp;nbsp;달리고&amp;nbsp;있을&amp;nbsp;때,&amp;nbsp;해설진이&amp;nbsp;&quot;soe&quot;선수를&amp;nbsp;불렀다면&amp;nbsp;2등인&amp;nbsp;&quot;soe&quot;&amp;nbsp;선수가&amp;nbsp;1등인&amp;nbsp;&quot;mumu&quot;&amp;nbsp;선수를&amp;nbsp;추월했다는&amp;nbsp;것입니다.&amp;nbsp;즉&amp;nbsp;&quot;soe&quot;&amp;nbsp;선수가&amp;nbsp;1등,&amp;nbsp;&quot;mumu&quot;&amp;nbsp;선수가&amp;nbsp;2등으로&amp;nbsp;바뀝니다. &lt;br /&gt;&lt;br /&gt;선수들의&amp;nbsp;이름이&amp;nbsp;1등부터&amp;nbsp;현재&amp;nbsp;등수&amp;nbsp;순서대로&amp;nbsp;담긴&amp;nbsp;문자열&amp;nbsp;배열&amp;nbsp;players와&amp;nbsp;해설진이&amp;nbsp;부른&amp;nbsp;이름을&amp;nbsp;담은&amp;nbsp;문자열&amp;nbsp;배열&amp;nbsp;callings가&amp;nbsp;매개변수로&amp;nbsp;주어질&amp;nbsp;때,&amp;nbsp;경주가&amp;nbsp;끝났을&amp;nbsp;때&amp;nbsp;선수들의&amp;nbsp;이름을&amp;nbsp;1등부터&amp;nbsp;등수&amp;nbsp;순서대로&amp;nbsp;배열에&amp;nbsp;담아&amp;nbsp;return&amp;nbsp;하는&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;완성해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;제한사항&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5&amp;nbsp;&amp;le;&amp;nbsp;players의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;50,000 &lt;br /&gt;players[i]는&amp;nbsp;i번째&amp;nbsp;선수의&amp;nbsp;이름을&amp;nbsp;의미합니다. &lt;br /&gt;players의&amp;nbsp;원소들은&amp;nbsp;알파벳&amp;nbsp;소문자로만&amp;nbsp;이루어져&amp;nbsp;있습니다. &lt;br /&gt;players에는&amp;nbsp;중복된&amp;nbsp;값이&amp;nbsp;들어가&amp;nbsp;있지&amp;nbsp;않습니다. &lt;br /&gt;3&amp;nbsp;&amp;le;&amp;nbsp;players[i]의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;10 &lt;br /&gt;2&amp;nbsp;&amp;le;&amp;nbsp;callings의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;1,000,000 &lt;br /&gt;callings는&amp;nbsp;players의&amp;nbsp;원소들로만&amp;nbsp;이루어져&amp;nbsp;있습니다. &lt;br /&gt;경주&amp;nbsp;진행중&amp;nbsp;1등인&amp;nbsp;선수의&amp;nbsp;이름은&amp;nbsp;불리지&amp;nbsp;않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1. 문제풀이 (이중 for문)&lt;/h3&gt;
&lt;pre id=&quot;code_1728739427084&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    public String[] solution(String[] players, String[] callings) {
        
        //이중 for문
        for(int i = 0; i &amp;lt; callings.length; i++) {
            for(int j = 0; j &amp;lt; players.length; j++) {
            
            	// 선수 순서바꾸기
                if(callings[i].equals(players[j])) {
                    String temp = players[j-1];
                    players[j-1] = players[j];
                    players[j] = temp;
                    break;
                } 
            }
        } 
        
        return players;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 이중 for문을 사용하여 선수의 순서를 바꾸는 코드입니다. 이 코드의 문제는 이중 for문을 사용하기 때문에 성능이 좋지 않습니다. 그래서 프로그래머스에서 이 코드를 사용할 경우에 시간 초과로 인한 실패 문구가 뜹니다. 그래서 저는 이중 for문를 사용하지 않고 HashMap를 사용해 다시 코딩을 했어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2. 문제풀이 (HashMap)&lt;/h3&gt;
&lt;pre id=&quot;code_1728739672420&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 해시맵
HashMap&amp;lt;String, Integer&amp;gt; playerIndex = new HashMap&amp;lt;&amp;gt;();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 해시맵 객체를 생성합니다. 키에는 이름이 들어가고 값에는 등수(index)가 들어가요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728739824287&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 해시맵 값 저장
for(int i = 0; i &amp;lt; players.length; i++) {
    playerIndex.put(players[i], i);
}&lt;/code&gt;&lt;/pre&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;pre id=&quot;code_1728739923247&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 선수 순서 업데이트
for(String calling : callings) {
	// 불린 선수 현재 인덱스 값
    int currentIndex = playerIndex.get(calling);

    // 1등은 호출되지 않음 2등부터 시작
    if(currentIndex &amp;gt; 0) {
        String temp = players[currentIndex - 1];
        players[currentIndex - 1] = players[currentIndex];
        players[currentIndex] = temp;

		//해시값 업데이트
        playerIndex.put(calling, currentIndex - 1);
        playerIndex.put(temp, currentIndex);

    }

}&lt;/code&gt;&lt;/pre&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;전체코드&lt;/h3&gt;
&lt;pre id=&quot;code_1728740069099&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.HashMap;

class Solution {
    public String[] solution(String[] players, String[] callings) {
        // 해시맵
        HashMap&amp;lt;String, Integer&amp;gt; playerIndex = new HashMap&amp;lt;&amp;gt;();
        
        // 해시맵 값 저장
        for(int i = 0; i &amp;lt; players.length; i++) {
            playerIndex.put(players[i], i);
        }
        
        // 선수 순서 업데이트
        for(String calling : callings) {
            int currentIndex = playerIndex.get(calling);
            
            // 1등은 호출되지 않음 2등부터 시작
            if(currentIndex &amp;gt; 0) {
                String temp = players[currentIndex - 1];
                players[currentIndex - 1] = players[currentIndex];
                players[currentIndex] = temp;

                
                playerIndex.put(calling, currentIndex - 1);
                playerIndex.put(temp, currentIndex);
                
            }
            
        }
        
        
        return players;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1728740093131&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/178871&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dMhroH/hyXefGiF5r/ldbOGJSjEJ0Dl7ujOowdRK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/zMvRq/hyXehD80Tj/XsFoOxTTdBOKgqlazZ3us0/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/178871&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/178871&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dMhroH/hyXefGiF5r/ldbOGJSjEJ0Dl7ujOowdRK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/zMvRq/hyXehD80Tj/XsFoOxTTdBOKgqlazZ3us0/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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <category>IT</category>
      <category>개발</category>
      <category>코딩</category>
      <category>프로그래머스</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/31</guid>
      <comments>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%8B%AC%EB%A6%AC%EA%B8%B0-%EA%B2%BD%EC%A3%BC-JAVA#entry31comment</comments>
      <pubDate>Sat, 12 Oct 2024 22:34:58 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/ 코딩테스트] PCCE 기출문제 10번 / 데이터 분석 (JAVA)</title>
      <link>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-PCCE-%EA%B8%B0%EC%B6%9C%EB%AC%B8%EC%A0%9C-10%EB%B2%88-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D-JAV</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;안녕하세요.&lt;br /&gt;끊임없이 전진하는 개발자가 있다고?&lt;br /&gt;&lt;b&gt;It's me&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;niniz&quot; data-emoticon-name=&quot;038&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/038.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/038.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제 설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI&amp;nbsp;엔지니어인&amp;nbsp;현식이는&amp;nbsp;데이터를&amp;nbsp;분석하는&amp;nbsp;작업을&amp;nbsp;진행하고&amp;nbsp;있습니다.&amp;nbsp;데이터는&amp;nbsp;[&quot;코드&amp;nbsp;번호(code)&quot;,&amp;nbsp;&quot;제조일(date)&quot;,&amp;nbsp;&quot;최대&amp;nbsp;수량(maximum)&quot;,&amp;nbsp;&quot;현재&amp;nbsp;수량(remain)&quot;]으로&amp;nbsp;구성되어&amp;nbsp;있으며&amp;nbsp;현식이는&amp;nbsp;이&amp;nbsp;데이터들&amp;nbsp;중&amp;nbsp;조건을&amp;nbsp;만족하는&amp;nbsp;데이터만&amp;nbsp;뽑아서&amp;nbsp;정렬하려&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;예를&amp;nbsp;들어&amp;nbsp;다음과&amp;nbsp;같이&amp;nbsp;데이터가&amp;nbsp;주어진다면 &lt;br /&gt;&lt;br /&gt;data&amp;nbsp;=&amp;nbsp;[[1,&amp;nbsp;20300104,&amp;nbsp;100,&amp;nbsp;80],&amp;nbsp;[2,&amp;nbsp;20300804,&amp;nbsp;847,&amp;nbsp;37],&amp;nbsp;[3,&amp;nbsp;20300401,&amp;nbsp;10,&amp;nbsp;8]] &lt;br /&gt;이&amp;nbsp;데이터는&amp;nbsp;다음&amp;nbsp;표처럼&amp;nbsp;나타낼&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;code date&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; maximum&amp;nbsp; remain &lt;br /&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;20300104&amp;nbsp; &amp;nbsp;100&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 80 &lt;br /&gt;2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;20300804&amp;nbsp; &amp;nbsp;847&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 37 &lt;br /&gt;3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;20300401&amp;nbsp; &amp;nbsp;10&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 8&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;주어진&amp;nbsp;데이터&amp;nbsp;중&amp;nbsp;&quot;제조일이&amp;nbsp;20300501&amp;nbsp;이전인&amp;nbsp;물건들을&amp;nbsp;현재&amp;nbsp;수량이&amp;nbsp;적은&amp;nbsp;순서&quot;로&amp;nbsp;정렬해야&amp;nbsp;한다면&amp;nbsp;조건에&amp;nbsp;맞게&amp;nbsp;가공된&amp;nbsp;데이터는&amp;nbsp;다음과&amp;nbsp;같습니다. &lt;br /&gt;&lt;br /&gt;data&amp;nbsp;=&amp;nbsp;[[3,20300401,10,8],[1,20300104,100,80]] &lt;br /&gt;정렬한&amp;nbsp;데이터들이&amp;nbsp;담긴&amp;nbsp;이차원&amp;nbsp;정수&amp;nbsp;리스트&amp;nbsp;data와&amp;nbsp;어떤&amp;nbsp;정보를&amp;nbsp;기준으로&amp;nbsp;데이터를&amp;nbsp;뽑아낼지를&amp;nbsp;의미하는&amp;nbsp;문자열&amp;nbsp;ext,&amp;nbsp;뽑아낼&amp;nbsp;정보의&amp;nbsp;기준값을&amp;nbsp;나타내는&amp;nbsp;정수&amp;nbsp;val_ext,&amp;nbsp;정보를&amp;nbsp;정렬할&amp;nbsp;기준이&amp;nbsp;되는&amp;nbsp;문자열&amp;nbsp;sort_by가&amp;nbsp;주어집니다. &lt;br /&gt;&lt;br /&gt;data에서&amp;nbsp;ext&amp;nbsp;값이&amp;nbsp;val_ext보다&amp;nbsp;작은&amp;nbsp;데이터만&amp;nbsp;뽑은&amp;nbsp;후,&amp;nbsp;sort_by에&amp;nbsp;해당하는&amp;nbsp;값을&amp;nbsp;기준으로&amp;nbsp;오름차순으로&amp;nbsp;정렬하여&amp;nbsp;return&amp;nbsp;하도록&amp;nbsp;solution&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;제한사항&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1&amp;nbsp;&amp;le;&amp;nbsp;data의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;500 &lt;br /&gt;data[i]의&amp;nbsp;원소는&amp;nbsp;[코드&amp;nbsp;번호(code),&amp;nbsp;제조일(date),&amp;nbsp;최대&amp;nbsp;수량(maximum),&amp;nbsp;현재&amp;nbsp;수량(remain)]&amp;nbsp;형태입니다. &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;코드&amp;nbsp;번호&amp;le;&amp;nbsp;100,000 &lt;br /&gt;20000101&amp;nbsp;&amp;le;&amp;nbsp;제조일&amp;le;&amp;nbsp;29991231 &lt;br /&gt;data[i][1]은&amp;nbsp;yyyymmdd&amp;nbsp;형태의&amp;nbsp;값을&amp;nbsp;가지며,&amp;nbsp;올바른&amp;nbsp;날짜만&amp;nbsp;주어집니다.&amp;nbsp;(yyyy&amp;nbsp;:&amp;nbsp;연도,&amp;nbsp;mm&amp;nbsp;:&amp;nbsp;월,&amp;nbsp;dd&amp;nbsp;:&amp;nbsp;일) &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;최대&amp;nbsp;수량&amp;le;&amp;nbsp;10,000 &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;현재&amp;nbsp;수량&amp;le;&amp;nbsp;최대&amp;nbsp;수량 &lt;br /&gt;ext와&amp;nbsp;sort_by의&amp;nbsp;값은&amp;nbsp;다음&amp;nbsp;중&amp;nbsp;한&amp;nbsp;가지를&amp;nbsp;가집니다. &lt;br /&gt;&quot;code&quot;,&amp;nbsp;&quot;date&quot;,&amp;nbsp;&quot;maximum&quot;,&amp;nbsp;&quot;remain&quot; &lt;br /&gt;순서대로&amp;nbsp;코드&amp;nbsp;번호,&amp;nbsp;제조일,&amp;nbsp;최대&amp;nbsp;수량,&amp;nbsp;현재&amp;nbsp;수량을&amp;nbsp;의미합니다. &lt;br /&gt;val_ext는&amp;nbsp;ext에&amp;nbsp;따라&amp;nbsp;올바른&amp;nbsp;범위의&amp;nbsp;숫자로&amp;nbsp;주어집니다. &lt;br /&gt;정렬&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;문제풀이&lt;/h3&gt;
&lt;pre id=&quot;code_1728302731289&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 필터링된 데이터를 저장할 리스트
List&amp;lt;int[]&amp;gt; filter = new ArrayList&amp;lt;&amp;gt;();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. return를 위한 값을 위해 리스트 자료형을 사용했다.&lt;/p&gt;
&lt;pre id=&quot;code_1728303228563&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        // 조건에 맞는 데이터 찾기
        for(int[] part : data) {
            int extValue = 0;
            
            switch(ext) {
                // 코드 번호    
                case &quot;code&quot;:
                     extValue = part[0];
                     break;
                // 제조일      
                case &quot;date&quot;:
                     extValue = part[1];
                     break;
                // 최대 수량    
                case &quot;maximum&quot;:
                     extValue = part[2];
                     break;
                // 현재 수량    
                case &quot;remain&quot;:
                     extValue = part[3];
                     break;                        
            }

            // 조건에 맞는 데이터
            if(extValue &amp;lt; val_ext) {
                filter.add(part);
            }
        }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;2. 조건에 맞는 데이터를 찾기 위해 for문을 돌리고 for문 안에 swich문을 사용하여 매개변수가 올바르게 들어가도록 설정한다. 그리고 if문을 사용하여 조건에 맞는 데이터를 추가한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728303345154&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; //sort_by에 따라 정렬
Comparator&amp;lt;int[]&amp;gt; comparator = null;

switch(sort_by) {
    case &quot;code&quot;:
        comparator = Comparator.comparingInt(arr -&amp;gt; arr[0]);
        break;
    case &quot;date&quot;:
        comparator = Comparator.comparingInt(arr -&amp;gt; arr[1]);
        break;
    case &quot;maximum&quot;:
        comparator = Comparator.comparingInt(arr -&amp;gt; arr[2]);
        break;
    case &quot;remain&quot;:
        comparator = Comparator.comparingInt(arr -&amp;gt; arr[3]);
        break;
    
     // 데이터 정렬 
     filter.sort(comparator);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 정렬을 하기 위해서 사용자 정의 정렬인 Comparator 비교자를 사용한다. switch문을 사용해 정렬 기준을 무엇으로 할지 설정 후 sort 함수를 사용해 정렬한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728303470393&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 2차 배열로 변환
int[][] result = new int[filter.size()][];
return filter.toArray(result);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 2차 배열로 반환하기 위한&amp;nbsp; 2차 배열 (result)을 생성한다. 배열의 크기는 filter에 쌓인 데이터 값으로 하고 toArray 함수를 사용하여 빈 배열인 result에 filter에 쌓인 값을 복사한다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;전체코드&lt;/h3&gt;
&lt;pre id=&quot;code_1728303664423&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;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

class Solution {
    public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
        // 필터링된 데이터를 저장할 리스트
        List&amp;lt;int[]&amp;gt; filter = new ArrayList&amp;lt;&amp;gt;();
        
        // 조건에 맞는 데이터 찾기
        for(int[] part : data) {
            int extValue = 0;
            
            switch(ext) {
                // 코드 번호    
                case &quot;code&quot;:
                     extValue = part[0];
                     break;
                // 제조일      
                case &quot;date&quot;:
                     extValue = part[1];
                     break;
                // 최대 수량    
                case &quot;maximum&quot;:
                     extValue = part[2];
                     break;
                // 현재 수량    
                case &quot;remain&quot;:
                     extValue = part[3];
                     break;                        
            }

            // 조건에 맞는 데이터
            if(extValue &amp;lt; val_ext) {
                filter.add(part);
            }
        }
        
        //sort_by에 따라 정렬
        Comparator&amp;lt;int[]&amp;gt; comparator = null;
        
        switch(sort_by) {
            case &quot;code&quot;:
                comparator = Comparator.comparingInt(arr -&amp;gt; arr[0]);
                break;
            case &quot;date&quot;:
                comparator = Comparator.comparingInt(arr -&amp;gt; arr[1]);
                break;
            case &quot;maximum&quot;:
                comparator = Comparator.comparingInt(arr -&amp;gt; arr[2]);
                break;
            case &quot;remain&quot;:
                comparator = Comparator.comparingInt(arr -&amp;gt; arr[3]);
                break;
        }
        
       // 데이터 정렬 
       filter.sort(comparator);
       
       // 2차 배열로 변환
       int[][] result = new int[filter.size()][];
       return filter.toArray(result);
        
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1728303613891&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/250121&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/q26dp/hyXedtPx1N/xaNKGWd33QZ7qHaC3gdoa0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/k2pLR/hyXd6BsEwl/idfPmj0ov7Cynvkm9cpJx1/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/250121&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/250121&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/q26dp/hyXedtPx1N/xaNKGWd33QZ7qHaC3gdoa0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/k2pLR/hyXd6BsEwl/idfPmj0ov7Cynvkm9cpJx1/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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <category>IT</category>
      <category>Java</category>
      <category>코딩</category>
      <category>프로그래머스</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/30</guid>
      <comments>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-PCCE-%EA%B8%B0%EC%B6%9C%EB%AC%B8%EC%A0%9C-10%EB%B2%88-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D-JAV#entry30comment</comments>
      <pubDate>Mon, 7 Oct 2024 21:22:03 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/코딩 테스트] PCCE 기출문제 9번 / 이웃한 칸 (JAVA)</title>
      <link>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4JAVA-PCCE-%EA%B8%B0%EC%B6%9C%EB%AC%B8%EC%A0%9C-9%EB%B2%88-%EC%9D%B4%EC%9B%83%ED%95%9C-%EC%B9%B8</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;오늘도&lt;br /&gt;아자아자!!!&lt;br /&gt;&lt;/span&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;001&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/001.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/001.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&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;각&amp;nbsp;칸마다&amp;nbsp;색이&amp;nbsp;칠해진&amp;nbsp;2차원&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;br /&gt;&lt;br /&gt;보드의&amp;nbsp;각&amp;nbsp;칸에&amp;nbsp;칠해진&amp;nbsp;색깔&amp;nbsp;이름이&amp;nbsp;담긴&amp;nbsp;이차원&amp;nbsp;문자열&amp;nbsp;리스트&amp;nbsp;board와&amp;nbsp;고른&amp;nbsp;칸의&amp;nbsp;위치를&amp;nbsp;나타내는&amp;nbsp;두&amp;nbsp;정수&amp;nbsp;h,&amp;nbsp;w가&amp;nbsp;주어질&amp;nbsp;때&amp;nbsp;board[h][w]와&amp;nbsp;이웃한&amp;nbsp;칸들&amp;nbsp;중&amp;nbsp;같은&amp;nbsp;색으로&amp;nbsp;칠해져&amp;nbsp;있는&amp;nbsp;칸의&amp;nbsp;개수를&amp;nbsp;return&amp;nbsp;하도록&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;완성해&amp;nbsp;주세요. &lt;br /&gt;&lt;br /&gt;이웃한&amp;nbsp;칸들&amp;nbsp;중&amp;nbsp;몇&amp;nbsp;개의&amp;nbsp;칸이&amp;nbsp;같은&amp;nbsp;색으로&amp;nbsp;색칠되어&amp;nbsp;있는지&amp;nbsp;확인하는&amp;nbsp;과정은&amp;nbsp;다음과&amp;nbsp;같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;제한사항&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1&amp;nbsp;&amp;le;&amp;nbsp;board의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;7 &lt;br /&gt;board의&amp;nbsp;길이와&amp;nbsp;board[n]의&amp;nbsp;길이는&amp;nbsp;동일합니다. &lt;br /&gt;0&amp;nbsp;&amp;le;&amp;nbsp;h,&amp;nbsp;w&amp;nbsp;&amp;lt;&amp;nbsp;board의&amp;nbsp;길이 &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;board[h][w]의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;10 &lt;br /&gt;board[h][w]는&amp;nbsp;영어&amp;nbsp;소문자로만&amp;nbsp;이루어져&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;문제풀이&lt;/h3&gt;
&lt;pre id=&quot;code_1728051137953&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int n = board.length;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.&amp;nbsp;정수를&amp;nbsp;저장할&amp;nbsp;변수&amp;nbsp;n을&amp;nbsp;만들고&amp;nbsp;board의&amp;nbsp;길이를&amp;nbsp;저장합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728051159554&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int count = 0;&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;2.&amp;nbsp;같은&amp;nbsp;색으로&amp;nbsp;색칠된&amp;nbsp;칸의&amp;nbsp;개수를&amp;nbsp;저장할&amp;nbsp;변수&amp;nbsp;count를&amp;nbsp;만들고&amp;nbsp;0을&amp;nbsp;저장합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728051171066&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int[] dh = {0,1,-1,0};
int[] dw = {1,0,0,-1};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.&amp;nbsp;h와&amp;nbsp;w의&amp;nbsp;변화량을&amp;nbsp;저장할&amp;nbsp;정수&amp;nbsp;리스트&amp;nbsp;dh,&amp;nbsp;dw를&amp;nbsp;만들고&amp;nbsp;각각&amp;nbsp;[0,&amp;nbsp;1,&amp;nbsp;-1,&amp;nbsp;0],&amp;nbsp;[1,&amp;nbsp;0,&amp;nbsp;0,&amp;nbsp;-1]을&amp;nbsp;저장합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728051196247&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; for(int i=0; i&amp;lt; 4; 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;4.&amp;nbsp;반복문을&amp;nbsp;이용해&amp;nbsp;i&amp;nbsp;값을&amp;nbsp;0부터&amp;nbsp;3까지&amp;nbsp;1&amp;nbsp;씩&amp;nbsp;증가시키며&amp;nbsp;아래&amp;nbsp;작업을&amp;nbsp;반복합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728051227765&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int h_check = h + dh[i];
int w_check = w + dw[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;4-1. 체크할 칸의 h, w 좌표를 나타내는 변수 h_check, w_check를 만들고 각각 h + dh[i], w + dw[i]를 저장합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728051252306&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; if(h_check &amp;gt;= 0 &amp;amp;&amp;amp; h_check &amp;lt; n &amp;amp;&amp;amp; w_check &amp;gt;= 0 &amp;amp;&amp;amp; w_check &amp;lt; n) {
 	...(생략)
 }&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;4-2. h_check가 0 이상 n 미만이고 w_check가 0 이상 n 미만이라면 다음을 수행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728051282114&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if(board[h][w].equals(board[h_check][w_check])) {
  count++;
}&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;4-3 board[h][w]와 board[h_check][w_check]의 값이 동일하다면 count의 값을 1 증가시킵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;전체코드&lt;/h3&gt;
&lt;pre id=&quot;code_1728051298390&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    public int solution(String[][] board, int h, int w) {
        int n = board.length;
        int count = 0;
        int[] dh = {0,1,-1,0};
        int[] dw = {1,0,0,-1};
        
        for(int i=0; i&amp;lt; 4; i++) {
            int h_check = h + dh[i];
            int w_check = w + dw[i]; 
            
            if(h_check &amp;gt;= 0 &amp;amp;&amp;amp; h_check &amp;lt; n &amp;amp;&amp;amp; w_check &amp;gt;= 0 &amp;amp;&amp;amp; w_check &amp;lt; n) {
                if(board[h][w].equals(board[h_check][w_check])) {
                    count++;
                }
            }
        }
        
        return count;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1728303775860&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/250125&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/FKxjW/hyXd8swiqo/MgQuXS8AASqd6iOJ1cnDF1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/b5HJ6M/hyXd9ydyEi/4NnJr0GXkHdjo0Zj74pqhk/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/250125&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/250125&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/FKxjW/hyXd8swiqo/MgQuXS8AASqd6iOJ1cnDF1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/b5HJ6M/hyXd9ydyEi/4NnJr0GXkHdjo0Zj74pqhk/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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <category>IT</category>
      <category>자바</category>
      <category>코딩</category>
      <category>테스트</category>
      <category>프로그래머스</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/29</guid>
      <comments>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4JAVA-PCCE-%EA%B8%B0%EC%B6%9C%EB%AC%B8%EC%A0%9C-9%EB%B2%88-%EC%9D%B4%EC%9B%83%ED%95%9C-%EC%B9%B8#entry29comment</comments>
      <pubDate>Fri, 4 Oct 2024 23:15:16 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/코딩 테스트]  붕대 감기 (JAVA)</title>
      <link>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%A0%88%EB%A8%B8%EC%8A%A4JAVA-%EB%B6%95%EB%8C%80-%EA%B0%90%EA%B8%B0</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이번 문제 쉽지 않았다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;고민고민하다가 다른 분 코드를 조금 참고했다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;특히 시간 초 count 하는 부분이 헷갈렸다.&lt;br /&gt;꾸준히 하다 보면 익숙해지겠지&lt;br /&gt;아자아자!!&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;008&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/008.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/008.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제 설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤&amp;nbsp;게임에는&amp;nbsp;붕대&amp;nbsp;감기라는&amp;nbsp;기술이&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;붕대&amp;nbsp;감기는&amp;nbsp;t초&amp;nbsp;동안&amp;nbsp;붕대를&amp;nbsp;감으면서&amp;nbsp;1초마다&amp;nbsp;x만큼의&amp;nbsp;체력을&amp;nbsp;회복합니다.&amp;nbsp;t초&amp;nbsp;연속으로&amp;nbsp;붕대를&amp;nbsp;감는&amp;nbsp;데&amp;nbsp;성공한다면&amp;nbsp;y만큼의&amp;nbsp;체력을&amp;nbsp;추가로&amp;nbsp;회복합니다.&amp;nbsp;게임&amp;nbsp;캐릭터에는&amp;nbsp;최대&amp;nbsp;체력이&amp;nbsp;존재해&amp;nbsp;현재&amp;nbsp;체력이&amp;nbsp;최대&amp;nbsp;체력보다&amp;nbsp;커지는&amp;nbsp;것은&amp;nbsp;불가능합니다. &lt;br /&gt;&lt;br /&gt;기술을&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;그&amp;nbsp;즉시&amp;nbsp;붕대&amp;nbsp;감기를&amp;nbsp;다시&amp;nbsp;사용하며,&amp;nbsp;연속&amp;nbsp;성공&amp;nbsp;시간이&amp;nbsp;0으로&amp;nbsp;초기화됩니다. &lt;br /&gt;&lt;br /&gt;몬스터의&amp;nbsp;공격을&amp;nbsp;받으면&amp;nbsp;정해진&amp;nbsp;피해량만큼&amp;nbsp;현재&amp;nbsp;체력이&amp;nbsp;줄어듭니다.&amp;nbsp;이때,&amp;nbsp;현재&amp;nbsp;체력이&amp;nbsp;0&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;당신은&amp;nbsp;붕대감기&amp;nbsp;기술의&amp;nbsp;정보,&amp;nbsp;캐릭터가&amp;nbsp;가진&amp;nbsp;최대&amp;nbsp;체력과&amp;nbsp;몬스터의&amp;nbsp;공격&amp;nbsp;패턴이&amp;nbsp;주어질&amp;nbsp;때&amp;nbsp;캐릭터가&amp;nbsp;끝까지&amp;nbsp;생존할&amp;nbsp;수&amp;nbsp;있는지&amp;nbsp;궁금합니다. &lt;br /&gt;&lt;br /&gt;붕대&amp;nbsp;감기&amp;nbsp;기술의&amp;nbsp;시전&amp;nbsp;시간,&amp;nbsp;1초당&amp;nbsp;회복량,&amp;nbsp;추가&amp;nbsp;회복량을&amp;nbsp;담은&amp;nbsp;1차원&amp;nbsp;정수&amp;nbsp;배열&amp;nbsp;bandage와&amp;nbsp;최대&amp;nbsp;체력을&amp;nbsp;의미하는&amp;nbsp;정수&amp;nbsp;health,&amp;nbsp;몬스터의&amp;nbsp;공격&amp;nbsp;시간과&amp;nbsp;피해량을&amp;nbsp;담은&amp;nbsp;2차원&amp;nbsp;정수&amp;nbsp;배열&amp;nbsp;attacks가&amp;nbsp;매개변수로&amp;nbsp;주어집니다.&amp;nbsp;모든&amp;nbsp;공격이&amp;nbsp;끝난&amp;nbsp;직후&amp;nbsp;남은&amp;nbsp;체력을&amp;nbsp;return&amp;nbsp;하도록&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;완성해&amp;nbsp;주세요.&amp;nbsp;만약&amp;nbsp;몬스터의&amp;nbsp;공격을&amp;nbsp;받고&amp;nbsp;캐릭터의&amp;nbsp;체력이&amp;nbsp;0&amp;nbsp;이하가&amp;nbsp;되어&amp;nbsp;죽는다면&amp;nbsp;-1을&amp;nbsp;return&amp;nbsp;해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;제한사항&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bandage는&amp;nbsp;[시전&amp;nbsp;시간,&amp;nbsp;초당&amp;nbsp;회복량,&amp;nbsp;추가&amp;nbsp;회복량]&amp;nbsp;형태의&amp;nbsp;길이가&amp;nbsp;3인&amp;nbsp;정수&amp;nbsp;배열입니다. &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;시전&amp;nbsp;시간&amp;nbsp;=&amp;nbsp;t&amp;nbsp;&amp;le;&amp;nbsp;50 &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;초당&amp;nbsp;회복량&amp;nbsp;=&amp;nbsp;x&amp;nbsp;&amp;le;&amp;nbsp;100 &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;추가&amp;nbsp;회복량&amp;nbsp;=&amp;nbsp;y&amp;nbsp;&amp;le;&amp;nbsp;100 &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;health&amp;nbsp;&amp;le;&amp;nbsp;1,000 &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;attacks의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;100 &lt;br /&gt;attacks[i]는&amp;nbsp;[공격&amp;nbsp;시간,&amp;nbsp;피해량]&amp;nbsp;형태의&amp;nbsp;길이가&amp;nbsp;2인&amp;nbsp;정수&amp;nbsp;배열입니다. &lt;br /&gt;attacks는&amp;nbsp;공격&amp;nbsp;시간을&amp;nbsp;기준으로&amp;nbsp;오름차순&amp;nbsp;정렬된&amp;nbsp;상태입니다. &lt;br /&gt;attacks의&amp;nbsp;공격&amp;nbsp;시간은&amp;nbsp;모두&amp;nbsp;다릅니다. &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;공격&amp;nbsp;시간&amp;nbsp;&amp;le;&amp;nbsp;1,000 &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;피해량&amp;nbsp;&amp;le;&amp;nbsp;100&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;문제풀이&lt;/h3&gt;
&lt;pre id=&quot;code_1727623706952&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    // 추가 회복량 카운트(초)
    int healingTime = 0;
    // 최대 체력
    int maxHealth;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 전역 변수이다. healingTime 변수는 bandage[0]와 비교하여 y(추가 회복량)를 줄지 말지 결정을 위한 변수이다. maxHealth는 health값을 사용하여 최대값을 확인할 수 있는 변수이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727623974531&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	maxHealth = health;  // 최대 체력 설정
        int currentTime = 0; // 현재 시간
        
        // 전체 공격
        for (int[] attack : attacks) {
            int attackTime = attack[0];   // 공격시간
            int damage = attack[1];       // 피해량
            ...
            ...(생략)
            ...
            
            health -= damage; // 공격에 의한 체력 감소
            healingTime = 0;  // 공격을 받으면 추가 회복량 카운트(초) 초기화
            
            // 체력이 0 이하가 되면 -1 return
            if (health &amp;lt;= 0) {
               return -1;  
            }
            
            currentTime++; // 시간 증가
        }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. health값을 사용하여 maxHealth 변수에 최대 체력을 설정 및 현재 시간을 초기화한다. 그다음 전체 공격을 파악하기 위해 for문을 사용한다. attackTime(공격시간), damage(피해량) 변수에 값을 넣고 health(현재 체력)에 damage 값을 뺀다. 마지막에는 currentTime(현재시간)을 증가시킨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727624227568&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;            // 전체 회복
            while (currentTime &amp;lt; attackTime) {
                // x 회복
                if (health + bandage[1] &amp;lt;= maxHealth) {
                    health += bandage[1];
                } else {
                    health = maxHealth; 
                }

                healingTime++; // 회복 시간 증가
                currentTime++; // 시간 증가

                // y 회복
                if (healingTime == bandage[0]) {
                    if (health + bandage[2] &amp;lt;= maxHealth) {
                        health += bandage[2];
                    } else {
                        health = maxHealth; 
                    }
                    healingTime = 0; // 추가 회복량 카운트(초) 초기화
                }
            }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. x 회복은 초당 회복량을 위한 코드이고, y 회복은 추가 회복량을 위한 코드이다. 중요한 부분은 maxHealth 보다 크면 안 되기 때문에 if문 처리를 해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;전체코드&lt;/h3&gt;
&lt;pre id=&quot;code_1727624674963&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    // 추가 회복량 카운트(초)
    int healingTime = 0;
    // 최대 체력
    int maxHealth;

    public int solution(int[] bandage, int health, int[][] attacks) {
        maxHealth = health;  // 최대 체력 설정
        int currentTime = 0; // 현재 시간
        
        // 전체 공격
        for (int[] attack : attacks) {
            int attackTime = attack[0];   // 공격시간
            int damage = attack[1];       // 피해량

            // 전체 회복
            while (currentTime &amp;lt; attackTime) {
                // x 회복
                if (health + bandage[1] &amp;lt;= maxHealth) {
                    health += bandage[1];
                } else {
                    health = maxHealth; 
                }

                healingTime++; // 회복 시간 증가
                currentTime++; // 시간 증가

                // y 회복
                if (healingTime == bandage[0]) {
                    if (health + bandage[2] &amp;lt;= maxHealth) {
                        health += bandage[2];
                    } else {
                        health = maxHealth; 
                    }
                    healingTime = 0; // 추가 회복량 카운트(초) 초기화
                }
            }
           
            health -= damage; // 공격에 의한 체력 감소
            healingTime = 0;  // 공격을 받으면 추가 회복량 카운트(초) 초기화
            
            // 체력이 0 이하가 되면 -1 return
            if (health &amp;lt;= 0) {
               return -1;  
            }
            
            currentTime++; // 시간 증가
        }
        
        return health;  // 모든 공격을 견뎌낸 후의 남은 체력 반환
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <category>IT</category>
      <category>Java</category>
      <category>자바</category>
      <category>코딩</category>
      <category>프로그래머스</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/28</guid>
      <comments>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%A0%88%EB%A8%B8%EC%8A%A4JAVA-%EB%B6%95%EB%8C%80-%EA%B0%90%EA%B8%B0#entry28comment</comments>
      <pubDate>Mon, 30 Sep 2024 00:49:27 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/코딩테스트]  PCCE 기출문제 10번 / 공원(JAVA)</title>
      <link>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-PCCE-%EA%B8%B0%EC%B6%9C%EB%AC%B8%EC%A0%9C-10%EB%B2%88-%EA%B3%B5%EC%9B%90JAVA</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;안녕하세요.&lt;br /&gt;이번에는 공원 빈자리에 돗자리를 까는&lt;br /&gt;코딩 문제를 가지고 왔어요.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2차원 배열&lt;/b&gt;이라서 그런지&lt;br /&gt;&lt;b&gt;for문&lt;/b&gt; 지옥이었어요.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;010&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/010.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/010.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&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;문제&amp;nbsp;설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지민이는&amp;nbsp;다양한&amp;nbsp;크기의&amp;nbsp;정사각형&amp;nbsp;모양&amp;nbsp;돗자리를&amp;nbsp;가지고&amp;nbsp;공원에&amp;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;합니다.&amp;nbsp;예를&amp;nbsp;들어&amp;nbsp;지민이가&amp;nbsp;가지고&amp;nbsp;있는&amp;nbsp;돗자리의&amp;nbsp;한&amp;nbsp;변&amp;nbsp;길이가&amp;nbsp;5,&amp;nbsp;3,&amp;nbsp;2&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;3x3&amp;nbsp;크기입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;550&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bq8lzE/btsJOzi4y02/rkkMX6t7mDOxPCuHCVdSPK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bq8lzE/btsJOzi4y02/rkkMX6t7mDOxPCuHCVdSPK/img.jpg&quot; data-alt=&quot;출처: 프로그래머스 [PCCE 기출문제] 10번&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bq8lzE/btsJOzi4y02/rkkMX6t7mDOxPCuHCVdSPK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbq8lzE%2FbtsJOzi4y02%2FrkkMX6t7mDOxPCuHCVdSPK%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;531&quot; height=&quot;406&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;550&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: 프로그래머스 [PCCE 기출문제] 10번&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지민이가&amp;nbsp;가진&amp;nbsp;돗자리들의&amp;nbsp;한&amp;nbsp;변의&amp;nbsp;길이들이&amp;nbsp;담긴&amp;nbsp;정수&amp;nbsp;리스트&amp;nbsp;mats,&amp;nbsp;현재&amp;nbsp;공원의&amp;nbsp;자리&amp;nbsp;배치도를&amp;nbsp;의미하는&amp;nbsp;2차원&amp;nbsp;문자열&amp;nbsp;리스트&amp;nbsp;park가&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;return&amp;nbsp;하도록&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;완성해&amp;nbsp;주세요.&amp;nbsp;아무런&amp;nbsp;돗자리도&amp;nbsp;깔&amp;nbsp;수&amp;nbsp;없는&amp;nbsp;경우&amp;nbsp;-1을&amp;nbsp;return합니다.&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;1&amp;nbsp;&amp;le;&amp;nbsp;mats의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;10 &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;mats의&amp;nbsp;원소&amp;nbsp;&amp;le;&amp;nbsp;20 &lt;br /&gt;mats는&amp;nbsp;중복된&amp;nbsp;원소를&amp;nbsp;가지지&amp;nbsp;않습니다. &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;park의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;50 &lt;br /&gt;1&amp;nbsp;&amp;le;&amp;nbsp;park[i]의&amp;nbsp;길이&amp;nbsp;&amp;le;&amp;nbsp;50 &lt;br /&gt;park[i][j]의&amp;nbsp;원소는&amp;nbsp;문자열입니다. &lt;br /&gt;park[i][j]에&amp;nbsp;돗자리를&amp;nbsp;깐&amp;nbsp;사람이&amp;nbsp;없다면&amp;nbsp;&quot;-1&quot;,&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;문제풀이&lt;/h3&gt;
&lt;pre id=&quot;code_1727349980249&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    // 세로
    int rows = park.length; 

    // 가로
    int cols = park[0].length;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 파라미터인 String[][] park에서 받은 2차원 배열 값의 세로 길이, 가로 길이를 구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727350415501&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    // 돗자리 크기 내림차순 정렬
    Arrays.sort(mats);

    // 돗자리를 큰 것부터 확인
    for(int z = mats.length -1; z&amp;gt;=0; z--) {
        // 현재 돗자리 크기
        int size = mats[z];
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 지문에서 지민이가 깔 수 있는 가장 큰 돗자리의 한 변의 길이를 원하였기 때문에&amp;nbsp; 내림차순 정렬을 사용 후 for문을 사용하여 size에 5 &lt;span style=&quot;font-family: 'Noto Serif KR'; color: #333333; text-align: center;&quot;&gt;&amp;rarr; 3 &lt;span style=&quot;font-family: 'Noto Serif KR'; color: #333333; text-align: center;&quot;&gt;&amp;rarr; 2 순으로 값이 들어가게 한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727350527530&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    // 모든 위치에 돗자리를 놓을 수 있는 곳 확인 (2차 배열이라서 2중 for문 사용)
    for(int row = 0; row &amp;lt;= rows - size; row++) {
        for(int col = 0; col &amp;lt;= cols - size; col++) {
        }
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.&amp;nbsp; 2차원 배열은 2중 for문을 사용해야 하며, 모든 위치에 돗자리를 놓을 수 있는 곳을 확인한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727350736270&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    // 현재 위치 돗자리 가능 여부
    boolean place = true;

    // 위의 조건을 마친 후 돗자리가 이미 존재 유무 판단을 위해 다시 2중 for문 사용
    for(int i = row; i &amp;lt; row + size; i++) {
        for(int j = col; j &amp;lt; col + size; j++) {
            // 다른 사람의 돗자리가 없는 곳 확인
            if(!park[i][j].equals(&quot;-1&quot;)) {
                place = false;
                break;
            }                        
        }
        // 2중 for문이라 다시한번 다른 사람의 돗자리가 없는 곳 확인
        if(!place) {
            break;
        }
    }

    // 빈자리의 경우 돗자리의 사이즈 반환
    if(place) {
        return size;
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 모든 위치에 돗자리를 놓을 수 있는 곳을 확인 후 다시 한번 2중 for문을 돌려야 한다. 왜냐하면 그 장소에 이미 돗자리가 깔린 자리가 있을 수 있으므로 if 조건문을 사용하여 필터링한다. 여기서 중요한 부분은 boolean place라는 변수를 사용하여 flag를 한다. 조건이 다 끝난 후 돗자리의 사이즈를 반환한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727350897449&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    // 돗자리를 놓을 수 없는 경우 -1
    return -1;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 돗자리를 놓을 수 없는 경우에는 -1 값을 return한다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;전체코드&lt;/h3&gt;
&lt;pre id=&quot;code_1727350929857&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.Arrays;

class Solution {
    public int solution(int[] mats, String[][] park) {
        // 세로
        int rows = park.length; 
        
        // 가로
        int cols = park[0].length;
        
        // 돗자리 크기 내림차순 정렬
        Arrays.sort(mats);
        
        // 돗자리를 큰 것부터 확인
        for(int z = mats.length -1; z&amp;gt;=0; z--) {
            // 현재 돗자리 크기
            int size = mats[z];
            
            // 모든 위치에 돗자리를 놓을 수 있는 곳 확인 (2차 배열이라서 2중 for문 사용)
            for(int row = 0; row &amp;lt;= rows - size; row++) {
                for(int col = 0; col &amp;lt;= cols - size; col++) {
                    // 현재 위치 돗자리 가능 여부
                    boolean place = true;
                    
                    // 위의 조건을 마친 후 돗자리가 이미 존재 유무 판단을 위해 다시 2중 for문 사용
                    for(int i = row; i &amp;lt; row + size; i++) {
                        for(int j = col; j &amp;lt; col + size; j++) {
                            // 다른 사람의 돗자리가 없는 곳 확인
                            if(!park[i][j].equals(&quot;-1&quot;)) {
                                place = false;
                                break;
                            }                        
                        }
                        // 2중 for문이라 다시한번 다른 사람의 돗자리가 없는 곳 확인
                        if(!place) {
                            break;
                        }
                    }
                    
                    // 빈자리의 경우 돗자리의 사이즈 반환
                    if(place) {
                        return size;
                    }
                    
                }
            }
            
        }
        
        // 돗자리를 놓을 수 없는 경우 -1
        return -1;
        
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1727350962223&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/340198?language=java&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/8lbOI/hyXaGWsfYK/mVUyigI1vXoUxqhotNcFlK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bvqibR/hyW6xUpb1t/4KsuN5NgqeNWLEg7Ak0usK/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/340198?language=java&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/340198?language=java&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/8lbOI/hyXaGWsfYK/mVUyigI1vXoUxqhotNcFlK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bvqibR/hyW6xUpb1t/4KsuN5NgqeNWLEg7Ak0usK/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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <category>IT</category>
      <category>Java</category>
      <category>자바</category>
      <category>코딩</category>
      <category>코딩테스트</category>
      <category>프로그레머스</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/27</guid>
      <comments>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-PCCE-%EA%B8%B0%EC%B6%9C%EB%AC%B8%EC%A0%9C-10%EB%B2%88-%EA%B3%B5%EC%9B%90JAVA#entry27comment</comments>
      <pubDate>Thu, 26 Sep 2024 20:42:55 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/코딩 테스트] PCCE 기출문제 9번 / 지폐 접기(JAVA)</title>
      <link>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%BD%94%EB%94%A9-%ED%85%8C%EC%8A%A4%ED%8A%B8-PCCE-%EA%B8%B0%EC%B6%9C%EB%AC%B8%EC%A0%9C-9%EB%B2%88-%EC%A7%80%ED%8F%90-%EC%A0%91%EA%B8%B0JAVA</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;안녕하세요.&lt;br /&gt;오늘은 지폐 접기 관련 코딩 테스트를 풀어 보왔는데요.&lt;br /&gt;LV.1이라서 그런지 문제가 어렵지 않아요!!&lt;br /&gt;하지만 다른 분들의 풀이를 보니&lt;br /&gt;&lt;b&gt;&quot;휠씬 깔끔하게 코딩을 할 수 있었구나&quot;&lt;br /&gt;&lt;/b&gt;라고 느껴 LV.2로 바로 가지 않고&lt;br /&gt;차근차근 LV.1부터 끝까지 해보겠습니다.&lt;br /&gt;&lt;b&gt;시간은 나의 편 Maybe&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;010&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/010.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/010.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제 설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;민수는&amp;nbsp;다양한&amp;nbsp;지폐를&amp;nbsp;수집하는&amp;nbsp;취미를&amp;nbsp;가지고&amp;nbsp;있습니다.&amp;nbsp;지폐마다&amp;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;30&amp;nbsp;*&amp;nbsp;15이고&amp;nbsp;지폐의&amp;nbsp;크기가&amp;nbsp;26&amp;nbsp;*&amp;nbsp;17이라면&amp;nbsp;한번&amp;nbsp;반으로&amp;nbsp;접어&amp;nbsp;13&amp;nbsp;*&amp;nbsp;17&amp;nbsp;크기로&amp;nbsp;만든&amp;nbsp;뒤&amp;nbsp;90도&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;&amp;nbsp;지폐를 접을 때는 항상 길이가 긴 쪽을 반으로 접습니다. &lt;br /&gt;접기&amp;nbsp;전&amp;nbsp;길이가&amp;nbsp;홀수였다면&amp;nbsp;접은&amp;nbsp;후&amp;nbsp;소수점&amp;nbsp;이하는&amp;nbsp;버립니다. &lt;br /&gt;접힌&amp;nbsp;지폐를&amp;nbsp;그대로&amp;nbsp;또는&amp;nbsp;90도&amp;nbsp;돌려서&amp;nbsp;지갑에&amp;nbsp;넣을&amp;nbsp;수&amp;nbsp;있다면&amp;nbsp;그만&amp;nbsp;접습니다. &lt;br /&gt;지갑의&amp;nbsp;가로,&amp;nbsp;세로&amp;nbsp;크기를&amp;nbsp;담은&amp;nbsp;정수&amp;nbsp;리스트&amp;nbsp;wallet과&amp;nbsp;지폐의&amp;nbsp;가로,&amp;nbsp;세로&amp;nbsp;크기를&amp;nbsp;담은&amp;nbsp;정수&amp;nbsp;리스트&amp;nbsp;bill가&amp;nbsp;주어질&amp;nbsp;때,&amp;nbsp;지갑에&amp;nbsp;넣기&amp;nbsp;위해서&amp;nbsp;지폐를&amp;nbsp;최소&amp;nbsp;몇&amp;nbsp;번&amp;nbsp;접어야&amp;nbsp;하는지&amp;nbsp;return하도록&amp;nbsp;solution함수를&amp;nbsp;완성해&amp;nbsp;주세요. &lt;br /&gt;&lt;br /&gt;지폐를&amp;nbsp;지갑에&amp;nbsp;넣기&amp;nbsp;위해&amp;nbsp;접어야&amp;nbsp;하는&amp;nbsp;최소&amp;nbsp;횟수를&amp;nbsp;구하는&amp;nbsp;과정은&amp;nbsp;다음과&amp;nbsp;같습니다. &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;지폐를&amp;nbsp;접은&amp;nbsp;횟수를&amp;nbsp;저장할&amp;nbsp;정수&amp;nbsp;변수&amp;nbsp;answer를&amp;nbsp;만들고&amp;nbsp;0을&amp;nbsp;저장합니다. &lt;br /&gt;2.&amp;nbsp;반복문을&amp;nbsp;이용해&amp;nbsp;bill의&amp;nbsp;작은&amp;nbsp;값이&amp;nbsp;wallet의&amp;nbsp;작은&amp;nbsp;값&amp;nbsp;보다&amp;nbsp;크거나&amp;nbsp;bill의&amp;nbsp;큰&amp;nbsp;값이&amp;nbsp;wallet의&amp;nbsp;큰&amp;nbsp;값&amp;nbsp;보다&amp;nbsp;큰&amp;nbsp;동안&amp;nbsp;아래&amp;nbsp;과정을&amp;nbsp;반복합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2-1.&amp;nbsp;bill[0]이&amp;nbsp;bill[1]보다&amp;nbsp;크다면 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bill[0]을&amp;nbsp;2로&amp;nbsp;나누고&amp;nbsp;나머지는&amp;nbsp;버립니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2-2.&amp;nbsp;그렇지&amp;nbsp;않다면 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bill[1]을&amp;nbsp;2로&amp;nbsp;나누고&amp;nbsp;나머지는&amp;nbsp;버립니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2-3.&amp;nbsp;answer을&amp;nbsp;1&amp;nbsp;증가시킵니다. &lt;br /&gt;3.&amp;nbsp;answer을&amp;nbsp;return합니다. &lt;br /&gt;위의&amp;nbsp;의사코드와&amp;nbsp;작동방식이&amp;nbsp;다른&amp;nbsp;코드를&amp;nbsp;작성해도&amp;nbsp;상관없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;제한사항&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;wallet의&amp;nbsp;길이&amp;nbsp;=&amp;nbsp;bill의&amp;nbsp;길이&amp;nbsp;=&amp;nbsp;2 &lt;br /&gt;10&amp;nbsp;&amp;le;&amp;nbsp;wallet[0],&amp;nbsp;wallet[1]&amp;nbsp;&amp;le;&amp;nbsp;100 &lt;br /&gt;10&amp;nbsp;&amp;le;&amp;nbsp;bill[0],&amp;nbsp;bill[1]&amp;nbsp;&amp;le;&amp;nbsp;2,000&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;문제풀이&lt;/h3&gt;
&lt;pre id=&quot;code_1727084010370&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    // 지갑 크기 할당
    int wWidth = wallet[0];
    int wHeight = wallet[1];
    
    // 지폐 크기 할당
    int bWidth = bill[0];
    int bHeight = bill[1];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 배열로 들어온 값들을 int 형 변수에 담았어요. int형 변수를 사용한 이유는 지문에서 지폐를 접었을 때 소수점이 나오면 소수점을 제거하라고 하였기때문에 소수점을 버리기 위해서 int형을 사용했어요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727084281166&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 지폐를 지갑에 넣기 위해 접어야 하는지 확인하는 반복문
    while((bWidth &amp;gt; wWidth || bHeight &amp;gt; wHeight) &amp;amp;&amp;amp; (bHeight &amp;gt; wWidth || bWidth &amp;gt; wHeight)) {
   
        // 지폐의 큰 값을 반으로 접음
        if(bWidth &amp;gt; bHeight) {
            bWidth = bWidth / 2;
        } else {
            bHeight = bHeight / 2;  
        }
         answer++;
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. while 안에 조건이 긴 이유는 지폐를 90도로 돌려서 지갑에 넣을 수 있기 때문 경우의 수가 많았어요. 그리고 조건문을 통과하면 지폐의 큰 값을 반으로 접는 행위를 반복하고 몇 번 접었는지만 count하면 코딩 끝!!&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;느낀점&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;저는 오늘 반성을 조금 했어요. 다른 분들의 코드를 읽어보니 while문 조건이 길기 때문에 메소드로 따로 빼서 코드의 가독성을 높이고,&amp;nbsp;변수를 사용할 때 max, min 함수를 사용해서 더욱 간편한 코딩을 하는 모습을 봤어요. 문제가 쉬워서 괜히 풀었나 라는 생각이 사라지고 더욱 정신이 번쩍드는 코딩 테스트 문제었습니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;전체코드&lt;/h3&gt;
&lt;pre id=&quot;code_1727084886389&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;string&amp;gt;
#include &amp;lt;vector&amp;gt;

using namespace std;

int solution(vector&amp;lt;int&amp;gt; wallet, vector&amp;lt;int&amp;gt; bill) {
    int answer = 0;

    // 지갑 크기 할당
    int wWidth = wallet[0];
    int wHeight = wallet[1];
    
    // 지폐 크기 할당
    int bWidth = bill[0];
    int bHeight = bill[1];

    // 지폐를 지갑에 넣기 위해 접어야 하는지 확인하는 반복문
    while((bWidth &amp;gt; wWidth || bHeight &amp;gt; wHeight) &amp;amp;&amp;amp; (bHeight &amp;gt; wWidth || bWidth &amp;gt; wHeight)) {
   
        // 지폐의 큰 값을 반으로 접음
        if(bWidth &amp;gt; bHeight) {
            bWidth = bWidth / 2;
        } else {
            bHeight = bHeight / 2;  
        }
         answer++;
    }
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1727084896885&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/340199&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cAmQ2S/hyW6FqDbxo/6EGUNql34rjgN5QQWM3BAK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/qattu/hyW6KMgiRk/Ek6z6DBQDOCrmTNPrqXY70/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/340199&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/340199&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cAmQ2S/hyW6FqDbxo/6EGUNql34rjgN5QQWM3BAK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/qattu/hyW6KMgiRk/Ek6z6DBQDOCrmTNPrqXY70/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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <category>IT</category>
      <category>Java</category>
      <category>개발</category>
      <category>코딩</category>
      <category>코딩테스트</category>
      <category>프로그래머스</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/26</guid>
      <comments>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%BD%94%EB%94%A9-%ED%85%8C%EC%8A%A4%ED%8A%B8-PCCE-%EA%B8%B0%EC%B6%9C%EB%AC%B8%EC%A0%9C-9%EB%B2%88-%EC%A7%80%ED%8F%90-%EC%A0%91%EA%B8%B0JAVA#entry26comment</comments>
      <pubDate>Mon, 23 Sep 2024 18:48:46 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/코딩 테스트] PCCP 기출문제 1번 / 동영상 재생기(JAVA)</title>
      <link>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-PCCP-%EA%B8%B0%EC%B6%9C%EB%AC%B8%EC%A0%9C-1%EB%B2%88-%EB%8F%99%EC%98%81%EC%83%81-%EC%9E%AC%EC%83%9D%EA%B8%B0JAVA</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;안녕하세요.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;동영상 재생기 문제를 자바 언어로 코딩해봤습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;긍정 코딩 테스트!!&lt;/span&gt;&lt;br /&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;023&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/023.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/023.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;당신은&amp;nbsp;동영상&amp;nbsp;재생기를&amp;nbsp;만들고&amp;nbsp;있습니다.&amp;nbsp;당신의&amp;nbsp;동영상&amp;nbsp;재생기는&amp;nbsp;10초&amp;nbsp;전으로&amp;nbsp;이동,&amp;nbsp;10초&amp;nbsp;후로&amp;nbsp;이동,&amp;nbsp;오프닝&amp;nbsp;건너뛰기&amp;nbsp;3가지&amp;nbsp;기능을&amp;nbsp;지원합니다.&amp;nbsp;각&amp;nbsp;기능이&amp;nbsp;수행하는&amp;nbsp;작업은&amp;nbsp;다음과&amp;nbsp;같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;10초&amp;nbsp;전으로&amp;nbsp;이동:&amp;nbsp;사용자가&amp;nbsp;&quot;prev&quot;&amp;nbsp;명령을&amp;nbsp;입력할&amp;nbsp;경우&amp;nbsp;동영상의&amp;nbsp;재생&amp;nbsp;위치를&amp;nbsp;현재&amp;nbsp;위치에서&amp;nbsp;10초&amp;nbsp;전으로&amp;nbsp;이동합니다.&amp;nbsp;현재&amp;nbsp;위치가&amp;nbsp;10초&amp;nbsp;미만인&amp;nbsp;경우&amp;nbsp;영상의&amp;nbsp;처음&amp;nbsp;위치로&amp;nbsp;이동합니다.&amp;nbsp;영상의&amp;nbsp;처음&amp;nbsp;위치는&amp;nbsp;0분&amp;nbsp;0초입니다.&lt;/li&gt;
&lt;li&gt;10초&amp;nbsp;후로&amp;nbsp;이동:&amp;nbsp;사용자가&amp;nbsp;&quot;next&quot;&amp;nbsp;명령을&amp;nbsp;입력할&amp;nbsp;경우&amp;nbsp;동영상의&amp;nbsp;재생&amp;nbsp;위치를&amp;nbsp;현재&amp;nbsp;위치에서&amp;nbsp;10초&amp;nbsp;후로&amp;nbsp;이동합니다.&amp;nbsp;동영상의&amp;nbsp;남은&amp;nbsp;시간이&amp;nbsp;10초&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;/li&gt;
&lt;li&gt;오프닝 건너뛰기: 현재 재생 위치가 오프닝 구간(op_start &amp;le; 현재 재생 위치 &amp;le; op_end)인 경우 자동으로 오프닝이 끝나는 위치로 이동합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동영상의&amp;nbsp;길이를&amp;nbsp;나타내는&amp;nbsp;문자열&amp;nbsp;video_len,&amp;nbsp;기능이&amp;nbsp;수행되기&amp;nbsp;직전의&amp;nbsp;재생위치를&amp;nbsp;나타내는&amp;nbsp;문자열&amp;nbsp;pos,&amp;nbsp;오프닝&amp;nbsp;시작&amp;nbsp;시각을&amp;nbsp;나타내는&amp;nbsp;문자열&amp;nbsp;op_start,&amp;nbsp;오프닝이&amp;nbsp;끝나는&amp;nbsp;시각을&amp;nbsp;나타내는&amp;nbsp;문자열&amp;nbsp;op_end,&amp;nbsp;사용자의&amp;nbsp;입력을&amp;nbsp;나타내는&amp;nbsp;1차원&amp;nbsp;문자열&amp;nbsp;배열&amp;nbsp;commands가&amp;nbsp;매개변수로&amp;nbsp;주어집니다.&amp;nbsp;이때&amp;nbsp;사용자의&amp;nbsp;입력이&amp;nbsp;모두&amp;nbsp;끝난&amp;nbsp;후&amp;nbsp;동영상의&amp;nbsp;위치를&amp;nbsp;&quot;mm:ss&quot;&amp;nbsp;형식으로&amp;nbsp;return&amp;nbsp;하도록&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;완성해&amp;nbsp;주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;제한사항&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;video_len의&amp;nbsp;길이&amp;nbsp;=&amp;nbsp;pos의&amp;nbsp;길이&amp;nbsp;=&amp;nbsp;op_start의&amp;nbsp;길이&amp;nbsp;=&amp;nbsp;op_end의&amp;nbsp;길이&amp;nbsp;=&amp;nbsp;5&lt;/li&gt;
&lt;li&gt;video_len,&amp;nbsp;pos,&amp;nbsp;op_start,&amp;nbsp;op_end는&amp;nbsp;&quot;mm:ss&quot;&amp;nbsp;형식으로&amp;nbsp;mm분&amp;nbsp;ss초를&amp;nbsp;나타냅니다.&lt;/li&gt;
&lt;li&gt;0 &amp;le; mm &amp;le; 59&lt;/li&gt;
&lt;li&gt;0 &amp;le; ss &amp;le; 59&lt;/li&gt;
&lt;li&gt;분,&amp;nbsp;초가&amp;nbsp;한&amp;nbsp;자리일&amp;nbsp;경우&amp;nbsp;0을&amp;nbsp;붙여&amp;nbsp;두&amp;nbsp;자리로&amp;nbsp;나타냅니다.&lt;/li&gt;
&lt;li&gt;비디오의&amp;nbsp;현재&amp;nbsp;위치&amp;nbsp;혹은&amp;nbsp;오프닝이&amp;nbsp;끝나는&amp;nbsp;시각이&amp;nbsp;동영상의&amp;nbsp;범위&amp;nbsp;밖인&amp;nbsp;경우는&amp;nbsp;주어지지&amp;nbsp;않습니다.&lt;/li&gt;
&lt;li&gt;오프닝이&amp;nbsp;시작하는&amp;nbsp;시각은&amp;nbsp;항상&amp;nbsp;오프닝이&amp;nbsp;끝나는&amp;nbsp;시각보다&amp;nbsp;전입니다.&lt;/li&gt;
&lt;li&gt;1 &amp;le; commands의 길이 &amp;le; 100&lt;/li&gt;
&lt;li&gt;commands의&amp;nbsp;원소는&amp;nbsp;&quot;prev&quot;&amp;nbsp;혹은&amp;nbsp;&quot;next&quot;입니다.&lt;/li&gt;
&lt;li&gt;&quot;prev&quot;는&amp;nbsp;10초&amp;nbsp;전으로&amp;nbsp;이동하는&amp;nbsp;명령입니다.&lt;/li&gt;
&lt;li&gt;&quot;next&quot;는&amp;nbsp;10초&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;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;문제풀이&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1726833252344&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    // 문자열 형식을 숫자로 변환
    private int intTime(String pos) {
        String[] parts = pos.split(&quot;:&quot;);
        int minutes = Integer.parseInt(parts[0]);
        int seconds = Integer.parseInt(parts[1]);
        return minutes * 60 + seconds;
    }
    
    // 숫자를 문자열 형식에 맞춰 변환
    private String stringTime(int intTime) {
        int minutes = intTime / 60;
        int seconds = intTime % 60;
        return String.format(&quot;%02d:%02d&quot;, minutes, seconds);
    }&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;기능이 수행되기 직전의 재생위치를 나타내는 pos가 String이라서 연산을 위해 int로 변형합니다.&lt;/li&gt;
&lt;li&gt;그 전에 &quot;mm:ss&quot; 형식으로 값이 들어오기 때문에 split 함수를 사용하여 형식을 연산이 쉬운 형태로 변경합니다.&lt;/li&gt;
&lt;li&gt;문자열 &amp;rarr; 숫자, 숫자 &amp;rarr; 문자로 형변환 하는 부분이 많아서 따로 메서드로 작성하였습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1726833773191&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    public String solution(String video_len, String pos, String op_start, String op_end, String[] commands) {
        int videoLenSec = intTime(video_len);
        int currentPosSec = intTime(pos);
        int opStartSec = intTime(op_start);
        int opEndSec = intTime(op_end);
        
        // pos 시간을 체크하여 오프닝 종료시간으로 자동 이동
        if (currentPosSec &amp;gt;= opStartSec &amp;amp;&amp;amp; currentPosSec &amp;lt;= opEndSec) {
           currentPosSec = opEndSec;
        }
        
        // commands배열을 문자열로 변환하여 값에 따라 prev, next 기능 동작
        for (String command : commands) {
            if (command.equals(&quot;prev&quot;)) {
                currentPosSec = currentPosSec - 10; 
            } else if (command.equals(&quot;next&quot;)) {
                currentPosSec = currentPosSec + 10;  
            }
            
            // 현재 위치가 음수면 0으로 설정
            if (currentPosSec &amp;lt; 0) {
                currentPosSec = 0;
            }
            
            // 동영상 길이 보다 현재 시간이 길면 동영상 길이로 설정
            if (currentPosSec &amp;gt; videoLenSec) {
                currentPosSec = videoLenSec;
            }
            
            // pos 시간을 체크하여 오프닝 종료시간으로 자동 이동
            if (currentPosSec &amp;gt;= opStartSec &amp;amp;&amp;amp; currentPosSec &amp;lt;= opEndSec) {
                currentPosSec = opEndSec;
            }
            

        }
        
        return stringTime(currentPosSec);
    }&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;현재 시간(pos)이 String으로 나오기 때문에 int로 형변환하는 intTime 메소드를 사용한다.&lt;/li&gt;
&lt;li&gt;현재 시간(pos)를 확인하여 오프닝 시간이면 오프닝 종료시간으로 시간을 변경한다.&lt;/li&gt;
&lt;li&gt;commands 배열을 문자열로 변환하여 값에 따라 prev, next 기능이 작동하도록 한다.&lt;/li&gt;
&lt;li&gt;만약 기능이 다 동작 중 현재 위치가 음수가 나왔을 경우에는 0으로 초기화시키고 동영상 보다 현재 시간이 길 경우에는 영상 길이로 초기화한다. &lt;b&gt;(이 부분을 생각하지 못해서 고민을 조금했어요.)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;다시 한번 현재 시간을 확인하여 오프닝 시간이면 오프닝 종료시간으로 시간을 변경한다.&lt;/li&gt;
&lt;li&gt;int를 String으로 형변환 하는 stringTime 메소드를 사용하여 return한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;전체 코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1726834327000&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    // 문자열 형식을 숫자로 변환
    private int intTime(String pos) {
        String[] parts = pos.split(&quot;:&quot;);
        int minutes = Integer.parseInt(parts[0]);
        int seconds = Integer.parseInt(parts[1]);
        return minutes * 60 + seconds;
    }
    
    // 숫자를 문자열 형식에 맞춰 변환
    private String stringTime(int intTime) {
        int minutes = intTime / 60;
        int seconds = intTime % 60;
        return String.format(&quot;%02d:%02d&quot;, minutes, seconds);
    }

    public String solution(String video_len, String pos, String op_start, String op_end, String[] commands) {
        int videoLenSec = intTime(video_len);
        int currentPosSec = intTime(pos);
        int opStartSec = intTime(op_start);
        int opEndSec = intTime(op_end);
        
        // pos 시간을 체크하여 오프닝 종료시간으로 자동 이동
        if (currentPosSec &amp;gt;= opStartSec &amp;amp;&amp;amp; currentPosSec &amp;lt;= opEndSec) {
           currentPosSec = opEndSec;
        }
        
        // commands배열을 문자열로 변환하여 값에 따라 prev, next 기능 동작
        for (String command : commands) {
            if (command.equals(&quot;prev&quot;)) {
                currentPosSec = currentPosSec - 10; 
            } else if (command.equals(&quot;next&quot;)) {
                currentPosSec = currentPosSec + 10;  
            }
            
            // 현재 위치가 음수면 0으로 설정
            if (currentPosSec &amp;lt; 0) {
                currentPosSec = 0;
            }
            
            // 동영상 길이 보다 현재 시간이 길면 동영상 길이로 설정
            if (currentPosSec &amp;gt; videoLenSec) {
                currentPosSec = videoLenSec;
            }
            
            // pos 시간을 체크하여 오프닝 종료시간으로 자동 이동
            if (currentPosSec &amp;gt;= opStartSec &amp;amp;&amp;amp; currentPosSec &amp;lt;= opEndSec) {
                currentPosSec = opEndSec;
            }
            

        }
        
        return stringTime(currentPosSec);
    }
    

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1726834635786&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/340213&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/UtwgJ/hyW6KEQ9ob/tkE1WvfnB9bCmfQyVGG2yk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/BEVYQ/hyW6GboLzU/J16rnSaRtkrvm8ZrkLC9mk/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/340213&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/340213&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/UtwgJ/hyW6KEQ9ob/tkE1WvfnB9bCmfQyVGG2yk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/BEVYQ/hyW6GboLzU/J16rnSaRtkrvm8ZrkLC9mk/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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <category>IT</category>
      <category>Java</category>
      <category>알고리즘</category>
      <category>자바</category>
      <category>코딩</category>
      <category>코딩 테스트</category>
      <category>프로그래머스</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/25</guid>
      <comments>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-PCCP-%EA%B8%B0%EC%B6%9C%EB%AC%B8%EC%A0%9C-1%EB%B2%88-%EB%8F%99%EC%98%81%EC%83%81-%EC%9E%AC%EC%83%9D%EA%B8%B0JAVA#entry25comment</comments>
      <pubDate>Fri, 20 Sep 2024 21:17:39 +0900</pubDate>
    </item>
    <item>
      <title>도커(Docker)</title>
      <link>https://king-developer.tistory.com/entry/%EB%8F%84%EC%BB%A4Docker</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;프로젝트 개발을 완료한 후 도커 서버에 프로젝트를 배포했을 때, 개발 서버에서는 잘 동작하던 코드가 도커 서버에서는 인식되지 않아 도커 서버에 맞춰 다시 코딩해야 했던 경험이 있다. 당시 신입 3개월 차였던 저는 그 이유를 몰랐지만, 시간이 지나면서 이유를 알게 됐다. 이유는 운영 환경이 달랐기 때문이다!!!&lt;/blockquote&gt;
&lt;figure style=&quot;color: #333333; text-align: center;&quot; contenteditable=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/006.gif&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-name=&quot;006&quot; data-emoticon-type=&quot;niniz&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;emoticon&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/006.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;도커(Docker)란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도커는 애플리케이션을 컨테이너라는 경량화되고 이식 가능한 환경에 패키징하여 개발, 배포, 실행할 수 있게 해주는 플랫폼이다. 이를 통해 애플리케이션을 일관된 환경에서 실행할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 도커의 주요 특징&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컨테이너화(Containerization: 컨테이너는 애플리케이션과 그 종속성을 하나의 패키지로 묶어 독립된 실행 환경을 제공한다. 가상머신과 달리 호스트 OS 커널을 공유하면서도 격리된 환경을 제공하여, 일관된 실행을 보장한다. 이로 인해 개발, 테스트, 운영 환경에서 동일하게 동작한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이식성(Portability): 도커 이미지를 사용하면 로컬 개발 환경, 테스트 서버, 클라우드 등 어디서나 동일하게 실행할 수 있습니다. 이는 환경 간 차이로 인한 문제를 최소화합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;경량성(Lightweight): 컨테이너는 호스트 os를 공유하여 가상머신보다 가볍고 빠르게 실행됩니다. 시스템 자원을 효율적으로 사용하며, 빠른 시작 시간과 높은 성능을 제공합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 장점&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일관성: 애플리케이션이 어디서나 동일하게 동작하여 개발과 운영 환경 간의 불일치 문제를 해결한다.&lt;/li&gt;
&lt;li&gt;효율성: 컨테이너는 가상머신보다 가볍고 빠르며, 시스템 자원을 효율적으로 사용한다.&lt;/li&gt;
&lt;li&gt;확장성: 필요에 따라 컨테이너를 손쉽게 추가하거나 제거할 수 있어, 애플리케이션의 확장과 축소가 용이하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 단점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;복잡성: 초기 설정과 학습에 시간이 필요하며, 특히 복장한 오케스트레이션 도구를 사용할 때 더 많은 학습이 요구 될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보안 문제: 호스트 os를 고유하므로 보안 격리가 가상머신만큼 강력하지 않을 수 있다. 컨테이너 간 보안 격리에 주의가 필요하다.&lt;/p&gt;</description>
      <category>개발</category>
      <category>AWS</category>
      <category>IT</category>
      <category>도커</category>
      <category>서버</category>
      <category>특징</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/24</guid>
      <comments>https://king-developer.tistory.com/entry/%EB%8F%84%EC%BB%A4Docker#entry24comment</comments>
      <pubDate>Tue, 16 Jul 2024 16:52:59 +0900</pubDate>
    </item>
    <item>
      <title>웹 소켓(WebSocket)</title>
      <link>https://king-developer.tistory.com/entry/%EC%9B%B9-%EC%86%8C%EC%BC%93WebSocket</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 웹소켓이란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹 소켓(WebSocket)은 웹 애플리케이션과 서버 사이의 실시간 양방향 통신을 가능케하는 프로토콜이다.&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 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2. 웹소켓의 특징&lt;/h3&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;지속적인 연결: 한 번 연결이 수립되면 여러 차례 데이터를 주고 받을 수 있어 HTTP보다 효율적이다.&lt;/li&gt;
&lt;li&gt;낮은 지연시간: 연결이 유지되는 동안 데이터 전송이 빠르고 실시간성이 뛰어나다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;3. 웹소켓의 문제점&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;복잡성 증가: 웹소켓을 구현하고 관리하는 것은 HTTP보다 더 복잡할 수 있다.&lt;/li&gt;
&lt;li&gt;보안 문제: 지속적인 연결을 유지하므로, 보안에 더 주의를 기울여야합니다. DDoS 공격에 취약할 수 있습니다.&lt;/li&gt;
&lt;li&gt;브라우저 호환성: 일부 구형 브라우저에서는 웹소켓 지원이 제한적일 수 있다.&lt;/li&gt;
&lt;li&gt;서버 리소스: 많은 동시 연결을 유지해야 할 경우 서버 리소스 관리에 주의가 필요하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;5. 웹소켓의 동작 방법&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;핸드셰이크: 클라이언트가 HTTP 요청을 통해 웹소켓 연결을 시도한다.&lt;/li&gt;
&lt;li&gt;연결 수립: 서버가 요청을 수락하면, HTTP연걸이 웹소켓 연결로 업그레이드된다.&lt;/li&gt;
&lt;li&gt;데이터 전송: 양방향 통신이 시작되어 클라이언트와 서버가 실시간으로 데이터를 주고받는다.&lt;/li&gt;
&lt;li&gt;연결 종료: 클라이언트나 서버 중 어느 쪽에서든 연결을 종료할 수 있다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;4. 웹소켓API&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JavaScript에서는 WebSocket API를 통해 쉽게 웹소켓을 구현할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1720762658186&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 웹소켓 연결 생성
const socket = new WebSocket('ws://example.com/socket');

// 연결이 수립되었을 때 호출되는 이벤트 핸들러
socket.onopen = function(event) {
    console.log('서버 연결!');
};

// 서버로부터 메시지를 받았을 때 호출되는 이벤트 핸들러
socket.onmessage = function(event) {
    console.log('서버 메시지: ', event.data);
};

// 연결이 종료되었을 때 호출되는 이벤트 핸들러
socket.onclose = function(event) {
    console.log('서버 해제!');
};

// 에러가 발생했을 때 호출되는 이벤트 핸들러
socket.onerror = function(event) {
    console.error('웹소켓 에러: ', event);
};&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;6. 결론&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹소켓은 기본 HTTP 요청 - 응답 방식의 한계를 뛰어넘어, 실시간 양방향 통신이 필요한 다양한 애플리케이션에서 필수적인 기술로 자리 잡았다. 웹소켓을 통해 실시간 채팅, 실시간 게임, 실시간 데이터 스트리밍 등의 애플리케이션을 보다 효과적으로 구현할 수 있게 되었다. 웹 소켓은 현대 웹 개발에서 매우 중요한 역할을 하고 있으며, 실시간 데이터 전송이 요구되는 다양한 분야에서 그 중요성이 커지고 있다.&lt;/p&gt;</description>
      <category>개발</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/23</guid>
      <comments>https://king-developer.tistory.com/entry/%EC%9B%B9-%EC%86%8C%EC%BC%93WebSocket#entry23comment</comments>
      <pubDate>Fri, 12 Jul 2024 14:38:31 +0900</pubDate>
    </item>
    <item>
      <title>김영한의 실전 자바 - 중급 1편 후기</title>
      <link>https://king-developer.tistory.com/entry/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EC%A4%91%EA%B8%89-1%ED%8E%B8</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;하하하&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;009&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/009.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/009.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
안녕하세요!&lt;br /&gt;벌써 자바 - 중급 1편 후기를 작성하게 되었네요.&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;중급 1편 - 섹션&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Object 클래스&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;3. String 클래스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 래퍼, Class 클래스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 열거형 - ENUM&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 날짜와 시간&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 중첩 클래스, 내부 클래스1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. 중첩 클래스, 내부 클래스2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9. 예외 처리1 - 이론&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10. 예외 처리2 - 실습&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;br /&gt;현재 코드가 이렇게 사용되는 이유를 이해할 수 있어 매우 좋았으며,&lt;br /&gt;무작정&amp;nbsp;암기보다는&amp;nbsp;이해를&amp;nbsp;통한&amp;nbsp;암기라는&amp;nbsp;느낌이&amp;nbsp;들었습니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;하지만 제가 복습이 부족해서 기본 편보다 한 번에 이해되는 부분이 적었습니다. &lt;span style=&quot;color: #ee2323;&quot;&gt;복습은 필수입니다!!!&lt;/span&gt;&lt;br /&gt;변명 아닌 변명을 하자면, 직장, 대학 편입, 프로젝트를 진행하면서 인강을 듣다 보니, 다시 들을 때 앞의 내용이 기억나지 않았습니다. 확실히 중급 편이라는 생각이 듭니다. 강의를 다시 듣기보다는 강의에서 제공하는 자료를 통해 복습을 진행할 예정입니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;자바 중급 - 2편이 굉장히 기대됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;늘 궁금했던 제네릭과 자바 컬렉션에 대해서 배울 수 있기 때문입니다.&lt;br /&gt;자바 고급 편은 다음에 기회가 된다면 들을 생각입니다. 스프링 프레임워크와 JPA에 대해서 공부하고 싶기 때문이며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;진도를 나가는 것보다는 내가 충분히 이해하는 것이 중요하다고 생각하기에 중급 1,2편을 더 복습할 생각입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1720759552884&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;김영한의 실전 자바 - 중급 1편 강의 | 김영한 - 인프런&quot; data-og-description=&quot;김영한 | 실무에 필요한 자바의 다양한 중급 기능을 예제 코드로 깊이있게 학습합니다., 국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 실전 자바[사진][임베딩 영상]단순히 자바 문법을&quot; data-og-host=&quot;www.inflearn.com&quot; data-og-source-url=&quot;https://www.inflearn.com/course/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EC%A4%91%EA%B8%89-1/dashboard&quot; data-og-url=&quot;https://www.inflearn.com/course/김영한의-실전-자바-중급-1&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/098T0/hyWzzqxp1c/EWekHyP325Jfod4ht2F7x0/img.png?width=1200&amp;amp;height=781&amp;amp;face=0_0_1200_781,https://scrap.kakaocdn.net/dn/bs5uWB/hyWzDfoUYz/QXfsHntReqjmDDaRSeSaB1/img.png?width=1200&amp;amp;height=781&amp;amp;face=0_0_1200_781,https://scrap.kakaocdn.net/dn/bCIZWt/hyWzE6trO2/5ZK8Vq3Nd6EMNizJzZt7OK/img.jpg?width=1439&amp;amp;height=1441&amp;amp;face=171_677_281_798&quot;&gt;&lt;a href=&quot;https://www.inflearn.com/course/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EC%A4%91%EA%B8%89-1/dashboard&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.inflearn.com/course/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EC%A4%91%EA%B8%89-1/dashboard&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/098T0/hyWzzqxp1c/EWekHyP325Jfod4ht2F7x0/img.png?width=1200&amp;amp;height=781&amp;amp;face=0_0_1200_781,https://scrap.kakaocdn.net/dn/bs5uWB/hyWzDfoUYz/QXfsHntReqjmDDaRSeSaB1/img.png?width=1200&amp;amp;height=781&amp;amp;face=0_0_1200_781,https://scrap.kakaocdn.net/dn/bCIZWt/hyWzE6trO2/5ZK8Vq3Nd6EMNizJzZt7OK/img.jpg?width=1439&amp;amp;height=1441&amp;amp;face=171_677_281_798');&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;김영한의 실전 자바 - 중급 1편 강의 | 김영한 - 인프런&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;김영한 | 실무에 필요한 자바의 다양한 중급 기능을 예제 코드로 깊이있게 학습합니다., 국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 실전 자바[사진][임베딩 영상]단순히 자바 문법을&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.inflearn.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>인강 후기</category>
      <category>IT</category>
      <category>국비</category>
      <category>김영한</category>
      <category>자바</category>
      <category>중급</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/22</guid>
      <comments>https://king-developer.tistory.com/entry/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EC%A4%91%EA%B8%89-1%ED%8E%B8#entry22comment</comments>
      <pubDate>Sun, 7 Jul 2024 18:46:04 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA] 자바 컬렉션 프레임워크 'List', 'Set', 'Map'</title>
      <link>https://king-developer.tistory.com/entry/JAVA-%EC%9E%90%EB%B0%94-%EC%BB%AC%EB%A0%89%EC%85%98-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-List-Set-Map</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;안녕하세요! &lt;br /&gt;코딩테스트를 준비 중에 자바 컬렉션 프레임워크를 활용한 문제가 많이 보였습니다.&lt;br /&gt;그래서 꼭 한번 정리가 필요하다고 생각하여 이렇게 글을 작성합니다.&lt;/blockquote&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;010&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/010.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/010.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. List 인터페이스&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'List' 인터페이스는 순서가 있는 요소의 컬렉션을 나타내며, 중복을 허용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주요 구현 클래스로는 'ArrayList ', 'LinkedList' 등이 있습니다.&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;순서 O: 'List'는 요소들이 삽입된 순서를 유지합니다.&lt;/li&gt;
&lt;li&gt;중복 O: 동일한 요소를 여러 번 추가할 수 있습니다.&lt;/li&gt;
&lt;li&gt;인덱스 접근: 요소에 인덱스로 접근할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ArrayList&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;동적 배열을 사용하여 요소를 관리합니다.&lt;/li&gt;
&lt;li&gt;요소의 삽입과 삭제가 배열 크기를 변경하는 경우 성능이 떨어질 수 있습니다.&lt;/li&gt;
&lt;li&gt;배열 기반 자료구조로, 인덱스를 사용한 임의 접근이 빠릅니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;LinkedList&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이중 연결 리스트를 사용하여 요소를 관리합니다.&lt;/li&gt;
&lt;li&gt;각 요소가 이전 요소와 다음 요소를 직접 가리키는 링크를 가지고 있어, 요소의 삽입과 삭제가 빠릅니다.&lt;/li&gt;
&lt;li&gt;연결 리스트 기반 자료구조로, 특정 인덱스에 접근하려면 처음부터 해당 인덱스까지 순차적으로 노드를 탐색해야 하기 때문에 접근 속도가 느릴 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1719738362882&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;
import java.util.LinkedList;
import java.util.List;

public class ListExample {
    public static void main(String[] args) {
        // ArrayList 예제
        List&amp;lt;String&amp;gt; arrayList = new ArrayList&amp;lt;&amp;gt;();
        arrayList.add(&quot;Apple&quot;);
        arrayList.add(&quot;Banana&quot;);
        arrayList.add(&quot;Cherry&quot;);
        System.out.println(&quot;ArrayList: &quot; + arrayList);

        // LinkedList 예제
        List&amp;lt;String&amp;gt; linkedList = new LinkedList&amp;lt;&amp;gt;();
        linkedList.add(&quot;Dog&quot;);
        linkedList.add(&quot;Elephant&quot;);
        linkedList.add(&quot;Fox&quot;);
        System.out.println(&quot;LinkedList: &quot; + linkedList);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. Map 인터페이스&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'Map' 인터페이스는 키-값 쌍을 저장하는 자료구조를 나타냅니다. 키는 중복을 허용하지 않으며, 각 키는 하나의 값과 매핑됩니다. 주요 구현 클래스로는 'HashMap', 'TreeMap' 등이 있습니다.&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;순서 X: 'Map'은 기본적으로 요소들의 순서를 보장하지 않습니다. (예외: TreeMap, LinkedHashMap)&lt;/li&gt;
&lt;li&gt;키 중복 X: 각 키는 유일해야 하며, 동일한 키를 여러 번 추가할 수 없습니다.&lt;/li&gt;
&lt;li&gt;값 중복 O: 동일한 값을 여러 번 추가할 수 있습니다..&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;HashMap&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;해시 테이블을 이용하여 키-값 쌍을 저장합니다.&lt;/li&gt;
&lt;li&gt;해시 테이블을 사용하여 키의 해시 코드를 계산하고 이를 기반으로 데이터에 접근하기 때문에 키와 값의 삽입, 삭제, 검색이 빠릅니다.&lt;/li&gt;
&lt;li&gt;키의 순서를 유지하지 않습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;TreeMap&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이진 트리를 이용하여 키-값 쌍을 저장합니다.&lt;/li&gt;
&lt;li&gt;이진 트리의 균형을 유지하기 위한 추가적인 관리 작업이 필요하기 때문에 삽입, 삭제, 검색이 비교적 느립니다.&lt;/li&gt;
&lt;li&gt;키에 따라 자동으로 정렬됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1719739238200&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

public class MapExample {
    public static void main(String[] args) {
        // HashMap 예제
        Map&amp;lt;String, Integer&amp;gt; hashMap = new HashMap&amp;lt;&amp;gt;();
        hashMap.put(&quot;Apple&quot;, 1);
        hashMap.put(&quot;Banana&quot;, 2);
        hashMap.put(&quot;Cherry&quot;, 3);
        System.out.println(&quot;HashMap: &quot; + hashMap);
        System.out.println(&quot;HashMap get('Banana'): &quot; + hashMap.get(&quot;Banana&quot;));

        // TreeMap 예제
        Map&amp;lt;String, Integer&amp;gt; treeMap = new TreeMap&amp;lt;&amp;gt;();
        treeMap.put(&quot;Dog&quot;, 4);
        treeMap.put(&quot;Elephant&quot;, 5);
        treeMap.put(&quot;Fox&quot;, 6);
        System.out.println(&quot;TreeMap: &quot; + treeMap);
        System.out.println(&quot;TreeMap get('Elephant'): &quot; + treeMap.get(&quot;Elephant&quot;));
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. Set 인터페이스&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'Set' 인터페이스는 중복을 허용하지 않는 요소의 집합을 나타냅니다. 주요 구현 클래스로는 'HashSet', 'TreeSet' 등이 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;특징&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순서 X: 'Set'은 요소들의 순서를 보장하지 않습니다 (예외: 'TreeSet', 'LinkedHashSet')&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중복 X: 동일한 요소를 여러 번 추가할 수 없습니다.&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;HashSet&lt;/h3&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;해시 테이블을 사용하여 키의 해시 코드를 계산하고 이를 기반으로 데이터에 접근하기 때문에&amp;nbsp; 요소의 삽입, 삭제, 검색이 빠릅니다.&lt;/li&gt;
&lt;li&gt;요소의 순서를 유지하지 않습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;TreeSet&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이진 트리를 이용하여 요소를 저장합니다.&lt;/li&gt;
&lt;li&gt;이진 트리의 균형을 유지하기 위한 추가적인 관리 작업이 필요하기 때문에 삽입, 삭제, 검색이 비교적 느립니다.&lt;/li&gt;
&lt;li&gt;요소를 정렬된 상태로 유지하기 위해 추가적인 관리 작업이 필요하기 때문에 요소가 순서를 유지합니다&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1719739341099&quot; class=&quot;processing&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

public class SetExample {
    public static void main(String[] args) {
        // HashSet 예제
        Set&amp;lt;String&amp;gt; hashSet = new HashSet&amp;lt;&amp;gt;();
        hashSet.add(&quot;Apple&quot;);
        hashSet.add(&quot;Banana&quot;);
        hashSet.add(&quot;Cherry&quot;);
        hashSet.add(&quot;Apple&quot;); // 중복된 요소 추가 시도
        System.out.println(&quot;HashSet: &quot; + hashSet);

        // TreeSet 예제
        Set&amp;lt;String&amp;gt; treeSet = new TreeSet&amp;lt;&amp;gt;();
        treeSet.add(&quot;Dog&quot;);
        treeSet.add(&quot;Elephant&quot;);
        treeSet.add(&quot;Fox&quot;);
        System.out.println(&quot;TreeSet: &quot; + treeSet);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;4. 정리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;List: 순서가 있는 요소의 컬렉션으로, 중복을 허용하여 인덱스로 접근할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Map: 중복을 허용하지 않는 요소의 집합으로, 기본적으로 순서를 유지하지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Set: 중복을 허용하지 않는 요소의 집합으로, 기본적으로 순서를 유지하지 않습니다.&lt;/p&gt;</description>
      <category>개발</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/21</guid>
      <comments>https://king-developer.tistory.com/entry/JAVA-%EC%9E%90%EB%B0%94-%EC%BB%AC%EB%A0%89%EC%85%98-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-List-Set-Map#entry21comment</comments>
      <pubDate>Sun, 30 Jun 2024 18:44:41 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 가장 많이 받은 선물(JAVA)</title>
      <link>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EA%B0%80%EC%9E%A5-%EB%A7%8E%EC%9D%B4-%EB%B0%9B%EC%9D%80-%EC%84%A0%EB%AC%BCJAVA</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;안녕하세요. &lt;br /&gt;알고리즘을 공부하면서 스스로 해결하지 못한 문제들을 정리하려고 합니다. &lt;br /&gt;언어는 JAVA를 사용했습니다.&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;1. 문제&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선물을&amp;nbsp;직접&amp;nbsp;전하기&amp;nbsp;힘들&amp;nbsp;때&amp;nbsp;카카오톡&amp;nbsp;선물하기&amp;nbsp;기능을&amp;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;당신의&amp;nbsp;친구들이&amp;nbsp;이번&amp;nbsp;달까지&amp;nbsp;선물을&amp;nbsp;주고받은&amp;nbsp;기록을&amp;nbsp;바탕으로&amp;nbsp;다음&amp;nbsp;달에&amp;nbsp;누가&amp;nbsp;선물을&amp;nbsp;많이&amp;nbsp;받을지&amp;nbsp;예측하려고&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;두&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;br /&gt;예를&amp;nbsp;들어&amp;nbsp;A가&amp;nbsp;B에게&amp;nbsp;선물을&amp;nbsp;5번&amp;nbsp;줬고,&amp;nbsp;B가&amp;nbsp;A에게&amp;nbsp;선물을&amp;nbsp;3번&amp;nbsp;줬다면&amp;nbsp;다음&amp;nbsp;달엔&amp;nbsp;A가&amp;nbsp;B에게&amp;nbsp;선물을&amp;nbsp;하나&amp;nbsp;받습니다. &lt;br /&gt;두&amp;nbsp;사람이&amp;nbsp;선물을&amp;nbsp;주고받은&amp;nbsp;기록이&amp;nbsp;하나도&amp;nbsp;없거나&amp;nbsp;주고받은&amp;nbsp;수가&amp;nbsp;같다면,&amp;nbsp;선물&amp;nbsp;지수가&amp;nbsp;더&amp;nbsp;큰&amp;nbsp;사람이&amp;nbsp;선물&amp;nbsp;지수가&amp;nbsp;더&amp;nbsp;작은&amp;nbsp;사람에게&amp;nbsp;선물을&amp;nbsp;하나&amp;nbsp;받습니다. &lt;br /&gt;선물&amp;nbsp;지수는&amp;nbsp;이번&amp;nbsp;달까지&amp;nbsp;자신이&amp;nbsp;친구들에게&amp;nbsp;준&amp;nbsp;선물의&amp;nbsp;수에서&amp;nbsp;받은&amp;nbsp;선물의&amp;nbsp;수를&amp;nbsp;뺀&amp;nbsp;값입니다. &lt;br /&gt;예를&amp;nbsp;들어&amp;nbsp;A가&amp;nbsp;친구들에게&amp;nbsp;준&amp;nbsp;선물이&amp;nbsp;3개고&amp;nbsp;받은&amp;nbsp;선물이&amp;nbsp;10개라면&amp;nbsp;A의&amp;nbsp;선물&amp;nbsp;지수는&amp;nbsp;-7입니다.&amp;nbsp;B가&amp;nbsp;친구들에게&amp;nbsp;준&amp;nbsp;선물이&amp;nbsp;3개고&amp;nbsp;받은&amp;nbsp;선물이&amp;nbsp;2개라면&amp;nbsp;B의&amp;nbsp;선물&amp;nbsp;지수는&amp;nbsp;1입니다.&amp;nbsp;만약&amp;nbsp;A와&amp;nbsp;B가&amp;nbsp;선물을&amp;nbsp;주고받은&amp;nbsp;적이&amp;nbsp;없거나&amp;nbsp;정확히&amp;nbsp;같은&amp;nbsp;수로&amp;nbsp;선물을&amp;nbsp;주고받았다면,&amp;nbsp;다음&amp;nbsp;달엔&amp;nbsp;B가&amp;nbsp;A에게&amp;nbsp;선물을&amp;nbsp;하나&amp;nbsp;받습니다. &lt;br /&gt;만약&amp;nbsp;두&amp;nbsp;사람의&amp;nbsp;선물&amp;nbsp;지수도&amp;nbsp;같다면&amp;nbsp;다음&amp;nbsp;달에&amp;nbsp;선물을&amp;nbsp;주고받지&amp;nbsp;않습니다. &lt;br /&gt;위에서&amp;nbsp;설명한&amp;nbsp;규칙대로&amp;nbsp;다음&amp;nbsp;달에&amp;nbsp;선물을&amp;nbsp;주고받을&amp;nbsp;때,&amp;nbsp;당신은&amp;nbsp;선물을&amp;nbsp;가장&amp;nbsp;많이&amp;nbsp;받을&amp;nbsp;친구가&amp;nbsp;받을&amp;nbsp;선물의&amp;nbsp;수를&amp;nbsp;알고&amp;nbsp;싶습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2. 문제 해결 과정에서 발생한 어려움 및 극복한 경험&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제를 읽고 변수를 어떤 기준으로 생성해야 할지 의문이 들었습니다. 코드에 절대적인 정답은 없지만, 더 나은 방법이 있을까 고민하게 되었습니다. 이로 인해 코드 작성에 조심스러워졌습니다. 일단 코드를 완성한 후에 클린 코드를 고려하는 방식이 더 도움이 될 것 같아 다음부터는 먼저 코드를 완성한 후에 클린 코드를 생각하는 습관을 기르고자 합니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;3. 코드&lt;/h3&gt;
&lt;pre id=&quot;code_1719029931342&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.HashMap;
import java.util.Map;

class Solution {
    public int solution(String[] friends, String[] gifts) {
        // 친구의 수를 n에 저장
        int n = friends.length;
        
        // 친구의 이름을 키, 인덱스 값으로 하는 맵 생성
        Map&amp;lt;String, Integer&amp;gt; friendIndex = new HashMap&amp;lt;&amp;gt;();
        
        // 친구 배열을 순회하면서 이름과 인덱스를 맵에 저장
        for (int i = 0; i &amp;lt; n; i++) {
            friendIndex.put(friends[i], i);
        }
        
        // 각 친구가 다른 친구에게 준 선물의 수를 저장할 2차원 배열
        int[][] giftTotal = new int[n][n];
        
        // 각 친구가 준 선물의 총 수(+)와 받은 선물의 총 수(-)를 저장할 배열
        int[] giftRate = new int[n];
        
        // 다음달 받을 선물 수
        int[] giftPref = new int[n];
        
        // 선물 배열을 순회하며 선물 정보를 처리
        for(String gift : gifts) {
        	// 선물 정보를 공백으로 분리
            String[] giftSplit = gift.split(&quot; &quot;); 
            
            // 선물 주는 사람의 인덱스를 얻음
            int giver = friendIndex.get(giftSplit[0]);
            
            // 선물 받는 사람의 인덱스를 얻음
            int receiver = friendIndex.get(giftSplit[1]); 
            
            // 선물 주는 사람과 받는 사람의 관계를 2차원 배열에 기록
            giftTotal[giver][receiver]++;
            
            // 선물 주는 사람의 선물 수 증가
            giftRate[giver]++;
            
            // 선물 받는 사람의 선물 수 감소
            giftRate[receiver]--;
        }
        
        // 각 친구를 비교하여 선호도를 계산
        for (int i = 0; i &amp;lt; n; i++) {  
            for (int j = i + 1; j &amp;lt; n; j++) {
                    if (giftTotal[i][j] &amp;gt; giftTotal[j][i]) {
                    	// i가 j보다 더 많이 선물하면 i의 선물 수 증가
                        giftPref[i]++;
                    } else if (giftTotal[i][j] &amp;lt; giftTotal[j][i]) {
                    	// j가 i보다 더 많이 선물하면 j의 선물 수 증가
                        giftPref[j]++;
                    } else if(giftRate[i] &amp;gt; giftRate[j]) {
                        // 선물의 총 수가 같다면, 더 많이 선물한 i의 선물 수 증가	
                            giftPref[i]++;
                    } else if (giftRate[i] &amp;lt; giftRate[j]) {
                    	// 선물의 총 수가 같다면, 더 많이 선물한 j의 선물 수 증가
                            giftPref[j]++;
                    }
            }
        }
        
        // 최대 선물 수
        int answer = 0;
        for (int i = 0; i &amp;lt; n; i++) {
            answer = Math.max(answer, giftPref[i]);
        }
        return answer;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <category>IT</category>
      <category>Java</category>
      <category>알고리즘</category>
      <category>자바</category>
      <category>코딩테스트</category>
      <category>프로그래머스</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/20</guid>
      <comments>https://king-developer.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EA%B0%80%EC%9E%A5-%EB%A7%8E%EC%9D%B4-%EB%B0%9B%EC%9D%80-%EC%84%A0%EB%AC%BCJAVA#entry20comment</comments>
      <pubDate>Sat, 22 Jun 2024 14:00:08 +0900</pubDate>
    </item>
    <item>
      <title>HTML, CSS, JavaScript 로딩되는 순서</title>
      <link>https://king-developer.tistory.com/entry/%E3%85%8E</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;안녕하세요!&lt;br /&gt;오늘은 HTML, JS, CSS가 로딩되는 순서에 대해 알아 볼려고 합니다.&lt;br /&gt;웹 페이지가 어떻게 렌더링되고 사용자에게 표시되는지를 결정하는 중요한 요소입니다.&lt;/blockquote&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;001&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/001.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/001.gif&quot; width=&quot;150&quot; /&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;1. HTML 로드 및 파싱&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;브라우저는 HTML 문서를 위에서 아래로 순차적으로 로드하고 파싱합니다.&lt;/li&gt;
&lt;li&gt;HTML 요소들이 파싱됨에 따라 DOM(Document Oject Model)을 구축합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. CSS 로드 및 파싱&lt;/h3&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;letter-spacing: 0px;&quot;&gt;HTML 문서에서 '&amp;lt;link&amp;gt;' 태그를 통해 참조된 CSS 파일들은 비동기적으로 로드됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt; CSS 파일이 로드되고 파싱되면, 브라우저는 CSSOM(CSS Object Model)을 구축합니다. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt; CSSOM이 준비되기 전까지는 페이지의 스타일이 적용되지 않으므로, CSS 파일이 로드될 때까지 페이지 렌더링이 일시 중단될 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. CSS 적용&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DOM과 CSSOM이 모두 준비되면, 브라우저는 이를 결합하여 렌더 트리를 생성합니다.&lt;/li&gt;
&lt;li&gt;이 렌더 트리를 기반으로 페이지가 스타일링되어 화면에 렌더링 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. JS 로드 및 실행&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HTML 문서에서 '&amp;lt;script&amp;gt;'&amp;nbsp; 태그를 만나면, 브라우저는 해당 JavaScipt 파일을 로드합니다.&lt;/li&gt;
&lt;li&gt;기본적으로'&amp;lt;script&amp;gt;' 태그는 HTML 파싱을 중단시키고, JavaScript 파일을 동기적으로 로드 및 실행합니다.&lt;/li&gt;
&lt;li&gt;'&amp;lt;script&amp;gt;' 태그에 'async' 속성을 추가하면, JavaScript 파일이 비동기적으로 로드되며, 로드가 완료되는 즉시 실행됩니다.&lt;/li&gt;
&lt;li&gt;'&amp;lt;script&amp;gt;' 태그에 'defer' 속성을 추가하면, HTML 파싱 후에 실행되도록 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1719735456714&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
        &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&amp;gt;
        &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;

        &amp;lt;!-- CSS 로드 --&amp;gt;
        &amp;lt;link rel=&quot;stylesheet&quot; href=&quot;styles.css&quot;&amp;gt;

        &amp;lt;!-- 비동기 JavaScript 로드 --&amp;gt;
        &amp;lt;script src=&quot;script.js&quot; async&amp;gt;&amp;lt;/script&amp;gt;

        &amp;lt;!-- 지연 JavaScript 로드 --&amp;gt;
        &amp;lt;script src=&quot;deferred-script.js&quot; defer&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;h1&amp;gt;뚝딱뚝딱 개발소&amp;lt;/h1&amp;gt;

        &amp;lt;!-- 동기 JavaScript 로드 --&amp;gt;
        &amp;lt;script src=&quot;sync-script.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;정리&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;1. HTML: HTML이 로드되고 파싱되면서 DOM이 구성됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;2. CSS: CSS 파일들이 로드되고 파싱되어 CSSOM이 구축됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;3.JavaScript: '&amp;lt;script&amp;gt;' 태그의 위치와 속성에 따라 JavaSscript 파일이 로드되고 실행됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3-1. 기본적으로 HTML 파싱을 중단시키고 동기적으로 실행됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3-2. defer 속성은 HTML 파싱 후에 실행되도록 합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3-3. async 속성은 비동기적으로 로드되고 즉시 실행됩니다.&lt;/p&gt;</description>
      <category>개발</category>
      <category>CSS</category>
      <category>HTML</category>
      <category>IT</category>
      <category>JavaScript</category>
      <category>개발</category>
      <category>렌더링</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/19</guid>
      <comments>https://king-developer.tistory.com/entry/%E3%85%8E#entry19comment</comments>
      <pubDate>Thu, 2 May 2024 14:30:16 +0900</pubDate>
    </item>
    <item>
      <title>스프링 핵심 원리 - 기본편 후기</title>
      <link>https://king-developer.tistory.com/entry/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8-%EC%9D%B8%EA%B0%95-%ED%9B%84%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;001&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/001.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/001.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;안녕하세요.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;스프링 핵심 원리 - 기본편 인강 후기를 가지고 왔습니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;한줄평&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;강의 전반적으로 실전 기반이지만&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;과거부터 지금까지 코드가 어떻게 변화하였는지&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;설명을 해주는 부분도 있어서 좋았습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;느낀점&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;처음에&amp;nbsp;스프링으로&amp;nbsp;바로&amp;nbsp;강의를&amp;nbsp;시작하지&amp;nbsp;않고 &lt;br /&gt;&lt;br /&gt;먼저&amp;nbsp;자바만&amp;nbsp;사용하여&amp;nbsp;간단하게&amp;nbsp; &lt;br /&gt;&lt;br /&gt;회원&amp;nbsp;&amp;rarr;&amp;nbsp;주문&amp;nbsp;&amp;rarr;&amp;nbsp;할인&amp;nbsp; &lt;br /&gt;&lt;br /&gt;코드를 작성하여 빌드업했습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;자바만&amp;nbsp;사용한&amp;nbsp;코드를&amp;nbsp;스프링&amp;nbsp;방식으로 &lt;br /&gt;&lt;br /&gt;조금씩&amp;nbsp;수정해&amp;nbsp;나가는&amp;nbsp;수업&amp;nbsp;방식입니다. &lt;br /&gt;&lt;br /&gt;스프링&amp;nbsp;방식으로&amp;nbsp;수정해&amp;nbsp;나가다&amp;nbsp;보면&amp;nbsp;코드양도&amp;nbsp;줄어들면서 &lt;br /&gt;&lt;br /&gt;스프링이&amp;nbsp;편리하다는&amp;nbsp;것을&amp;nbsp;느낄&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;하지만&amp;nbsp;편리한&amp;nbsp;만큼&amp;nbsp;스프링이&amp;nbsp;제공하는&amp;nbsp;코드를&amp;nbsp;알기&amp;nbsp;위해 &lt;br /&gt;&lt;br /&gt;공부해야&amp;nbsp;한다고&amp;nbsp;느꼈습니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;퇴근&amp;nbsp;후&amp;nbsp;지옥철을&amp;nbsp;겪고&amp;nbsp;저녁밥&amp;nbsp;후에&amp;nbsp;오는&amp;nbsp;식곤증으로 &lt;br /&gt;&lt;br /&gt;강의를 매일 들을 수는 없다 보니 앞에 내용을 부분적으로 &lt;br /&gt;&lt;br /&gt;기억이&amp;nbsp;나지&amp;nbsp;않는&amp;nbsp;경우도&amp;nbsp;있지만 &lt;br /&gt;&lt;br /&gt;강의에서&amp;nbsp;제공해&amp;nbsp;주는&amp;nbsp;자료를&amp;nbsp;통해&amp;nbsp;극복할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;부분도&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;다른&amp;nbsp;직장인분들도&amp;nbsp;앞에&amp;nbsp;내용이&amp;nbsp;기억나지&amp;nbsp;않는다면 &lt;br /&gt;&lt;br /&gt;자료를&amp;nbsp;통해&amp;nbsp;복습하면&amp;nbsp;좋을&amp;nbsp;것&amp;nbsp;같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1720759682409&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;김영한 | 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고,&amp;nbsp;성장하는 백엔드 개발자가 되어보&quot; data-og-host=&quot;www.inflearn.com&quot; data-og-source-url=&quot;https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard&quot; data-og-url=&quot;https://www.inflearn.com/course/스프링-핵심-원리-기본편&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b7GWuR/hyWzBaPm9w/rQxkQUJpFvtF9d1UMYSnI0/img.png?width=768&amp;amp;height=500&amp;amp;face=0_0_768_500,https://scrap.kakaocdn.net/dn/dmwR9x/hyWzAXjPkY/snNBIEsbrZhIU2byfHTs61/img.png?width=768&amp;amp;height=500&amp;amp;face=0_0_768_500,https://scrap.kakaocdn.net/dn/nS7Rq/hyWzvuT0E0/m4GFyePVLs4l0kp9PCMLa0/img.png?width=1805&amp;amp;height=1044&amp;amp;face=0_0_1805_1044&quot;&gt;&lt;a href=&quot;https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b7GWuR/hyWzBaPm9w/rQxkQUJpFvtF9d1UMYSnI0/img.png?width=768&amp;amp;height=500&amp;amp;face=0_0_768_500,https://scrap.kakaocdn.net/dn/dmwR9x/hyWzAXjPkY/snNBIEsbrZhIU2byfHTs61/img.png?width=768&amp;amp;height=500&amp;amp;face=0_0_768_500,https://scrap.kakaocdn.net/dn/nS7Rq/hyWzvuT0E0/m4GFyePVLs4l0kp9PCMLa0/img.png?width=1805&amp;amp;height=1044&amp;amp;face=0_0_1805_1044');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;스프링 핵심 원리 - 기본편 강의 | 김영한 - 인프런&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;김영한 | 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고,&amp;nbsp;성장하는 백엔드 개발자가 되어보&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.inflearn.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>인강 후기</category>
      <category>국비</category>
      <category>기본</category>
      <category>김영한</category>
      <category>스프링</category>
      <category>인강</category>
      <category>후기</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/11</guid>
      <comments>https://king-developer.tistory.com/entry/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8-%EC%9D%B8%EA%B0%95-%ED%9B%84%EA%B8%B0#entry11comment</comments>
      <pubDate>Thu, 4 Apr 2024 20:11:02 +0900</pubDate>
    </item>
    <item>
      <title>코딩 테스트를 위한 자료구조</title>
      <link>https://king-developer.tistory.com/entry/%EC%BD%94%EB%94%A9-%ED%85%8C%EC%8A%A4%ED%8A%B8%EB%A5%BC-%EC%9C%84%ED%95%9C-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;br /&gt;자료구조를 설명하기 전에&lt;br /&gt;코딩 테스트 준비를 하려는 가장 큰 이유는&lt;br /&gt;뛰어난 사람과 같이 일하고 싶기 때문이다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 코딩 테스트를 잘 하기 위한 공부인 자료구조에 대해 설명하겠습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;자료구조&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;데이터를 효율적으로 구성하고 저장하는 방법을 제공합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이러한 자료구조는 다양한 형태과 기능을 가지고 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;가장 일반적으로 사용자는 자료구조의 종류에 대해서 설명하겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;1. 배열(Array)&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;배열은 동일한 자료형의 데이터를 순차적으로 저장하는 선형 자료구조입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;메모리 상에 연속적인 공간을 할당하고 각 요소에 인덱스를 통해 접근할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;배열의 장점은 인덱스를 이용하여 빠르게 요소에 접근할 수 있다는 것이며,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;단점은 크기가 고정되어 있어 삽입/삭제 연산이 비효율적일 수 있다는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;2. 연결 리스트(Linked List)&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;연결 리스트는 데이터 요소가 노드로 구성되며, 각 노드는 데이터와 다음 노드를 가리키는 포인터로 구성됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;연결 리스트는 메모리 상에 불연속적으로 위치할 수 있으며, 삽입/삭제 연산이 배열보다 유연하고 빠릅니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;3. 스택(Stack)&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;후입선출(LIFO, Lat-In-First-Out)의 원리에 따라 데이터를 저장하는 자료구조입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;데이터는 스택의 맨위에 추가되거나 삭제됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;주요연산은 push(삽입)와 pop(삭제)입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;4. 큐(Queue)&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;선입선출(LIFO, Last-In-First-Out)의 원리에 따라 데이터를 저장하는 자료구조입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;데이터는 한쪽 끝에서 추가되고 다른 한쪽 끝에서 제거됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;주요 연산은 enqueue(삽입)과 dequeue(삭제)입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;5. 트리(Tree)&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;계층적인 구조를 갖는 비선형 자료구조입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;부모-자식 관계로 이루어진 노드를의 집합입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이진트리(Binary Tree), 이진 탐색 트리(Binary Search Tree), AVL트리 등 다양한 종류가 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;6. 그래프(Graph)&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그래프는 노드와 노드를 연결하는 간선들의 집합입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;방향성에 따라 유향 그래프와 무향 그래프로 나뉘며, 간선에 가중치가 있는 경우도 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;네트워크 모델이나 많은 문제를 그래프로 표현할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;7. 해시 테이블(Hash Table)&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;해시 테이블은 키-값(key-value)쌍을 저장하는 자료구조로,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;해시 함수를 사용하여 키를 값에 매핑합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;해시 충돌을 처리하기 위한 다양한 방법이 있으며,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;상수 시간에 데이터를 검색, 삽입, 삭제할 수 있는 효율성을 가지고 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;8. 힙(Heap)&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;힙은 최댓값 또는 최솟값을 빠르게 찾아내기 위해 설계된 완전 이진트리입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;주로 우선순위 큐를 구현하는 데 사용됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;최대 힙과 최소 힙이 있으며,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;힙 조건을 유지하기 위해 힙의 구조를 유지하는 연산이 필요합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그 외에도 많은 자료 구조들이 존재합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이들은 특정한 문제를 해결하기 위해 설계되었거나&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;특정한 상황에서 효율적인 작업을 수해아기 위해 사용됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/10</guid>
      <comments>https://king-developer.tistory.com/entry/%EC%BD%94%EB%94%A9-%ED%85%8C%EC%8A%A4%ED%8A%B8%EB%A5%BC-%EC%9C%84%ED%95%9C-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0#entry10comment</comments>
      <pubDate>Fri, 15 Mar 2024 21:50:09 +0900</pubDate>
    </item>
    <item>
      <title>김영한의 실전 자바 - 기본편 후기</title>
      <link>https://king-developer.tistory.com/entry/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EA%B8%B0%EB%B3%B8%ED%8E%B8</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;안녕하세요&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;006&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/006.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/006.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;br /&gt;새해 인사드린지 엊그제 같은데 벌써 1월 말이네요.&lt;br /&gt;&lt;/span&gt;그 사이에 저는 김영한의 실전 자바 - 기본편을 수강완료했어요.&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;후기&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;강의 시간은 약17 시간이었지만 역시 강사님이 IT 쪽에 오랫동안 있으셔서 그런지 타자 속도도 빠르고 단축키도 아시는 게 많아 정지 재생 반복을 하느라 시간이 더 걸려 약 20시간 정도 강의를 들었어요. 하지만 같이 타이핑하면서 단축키를 많이 배우게 됐어요. 강사님은 Mac을 사용하시지만, 저는 Windows를 사용하고 있어서 단축키가 다르긴 했지만 큰 어려움 없이 강의를 따라갈 수 있었어요. (Window는 자막(?)으로 볼 수 있었습니다.)&amp;nbsp;&lt;br /&gt;&lt;br /&gt;자바 수업을 듣고 다시 들으니 국비 때 수업을 들었던 내용이 뜨문뜨문 기억이 나고 다시 한번 기초를 다질 수 있어서 좋았어요. 그리고 인강을 듣고 자료를 통해 또다시 복습하고 하니 스스로 성장하는 느낌이 들었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;하지만 여기서 만족하지 않고 더 성장해서 후기 남기겠습니다.!!!!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1720759508157&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;김영한의 실전 자바 - 중급 1편&quot; data-og-description=&quot;하하하안녕하세요!벌써 자바 - 중급 1편 후기를 작성하게 되었네요.&amp;nbsp;중급 1편 - 섹션1. Object 클래스2. 불변 객체3. String 클래스4. 래퍼, Class 클래스5. 열거형 - ENUM6. 날짜와 시간7. 중첩 클래스, 내부&quot; data-og-host=&quot;king-developer.tistory.com&quot; data-og-source-url=&quot;https://king-developer.tistory.com/entry/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EC%A4%91%EA%B8%89-1%ED%8E%B8&quot; data-og-url=&quot;https://king-developer.tistory.com/entry/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EC%A4%91%EA%B8%89-1%ED%8E%B8&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/q5hVE/hyWvVhF3Wr/aMADsj2p8KTGqxjzKOMvMK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/fk1rR/hyWzvn9X1N/UGfooiR6reWp1CDVTSRqK0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://king-developer.tistory.com/entry/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EC%A4%91%EA%B8%89-1%ED%8E%B8&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://king-developer.tistory.com/entry/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EC%A4%91%EA%B8%89-1%ED%8E%B8&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/q5hVE/hyWvVhF3Wr/aMADsj2p8KTGqxjzKOMvMK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/fk1rR/hyWzvn9X1N/UGfooiR6reWp1CDVTSRqK0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&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;김영한의 실전 자바 - 중급 1편&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;하하하안녕하세요!벌써 자바 - 중급 1편 후기를 작성하게 되었네요.&amp;nbsp;중급 1편 - 섹션1. Object 클래스2. 불변 객체3. String 클래스4. 래퍼, Class 클래스5. 열거형 - ENUM6. 날짜와 시간7. 중첩 클래스, 내부&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;king-developer.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>인강 후기</category>
      <category>국비</category>
      <category>기본</category>
      <category>김영한</category>
      <category>자바</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/9</guid>
      <comments>https://king-developer.tistory.com/entry/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EA%B8%B0%EB%B3%B8%ED%8E%B8#entry9comment</comments>
      <pubDate>Tue, 30 Jan 2024 15:30:49 +0900</pubDate>
    </item>
    <item>
      <title>김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음 후기</title>
      <link>https://king-developer.tistory.com/entry/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%9E%90%EB%B0%94-%EC%9E%85%EB%AC%B8-%EC%BD%94%EB%93%9C%EB%A1%9C-%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94-%EC%9E%90%EB%B0%94-%EC%B2%AB%EA%B1%B8%EC%9D%8C-%ED%9B%84%EA%B8%B0</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;안녕하세요! &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024년 새해가 밝았네요.&amp;nbsp;새해 복 많이 받으세요.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;국비학원에서 6개월동안 급하게 배우고 취업을 하다보니&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;제가 기초가 제대로 잡혀있는 것인지 의문이 들기 시작하였고&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;그 의문을 풀기 위해 자바 입문 강의를 시작하게 되었습니다.&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;김영한의 자바 입문 강의를 시작한 이유&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;김영한&amp;nbsp;강사님에게는&amp;nbsp;백엔드&amp;nbsp;로드맵이&amp;nbsp;있다는&amp;nbsp;점입니다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;물론,&amp;nbsp;나만의&amp;nbsp;로드맵을&amp;nbsp;만들&amp;nbsp;수는&amp;nbsp;있겠지만 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;b&gt;'내가&amp;nbsp;만든&amp;nbsp;로드맵이&amp;nbsp;제대로&amp;nbsp;만들었는가?'&lt;/b&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;라는 의구심이 자기 자신을 불안하게 만들 것 같아서&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;제가&amp;nbsp;만든&amp;nbsp;로드맵보다는&amp;nbsp;IT에서&amp;nbsp;오랫동안&amp;nbsp;경력을&amp;nbsp;쌓았던&amp;nbsp;분의&amp;nbsp;로드맵을&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;따라가는 것이 적절하다고&amp;nbsp;판단했습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style8&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;기본편부터 시작하지 않고 입문편부터 시작한 이유&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt; 가장 큰 이유는 강사님들이 같은 IT 용어를 사용하더라도 &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;의미를 조금씩 다르게 사용하실 수 있어서&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;강의를 듣는 동안 혼란이 생길 것 같아 &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;처음부터 시작하게 되었습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; 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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;후기&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;b&gt;처음 자바를 시작하는 분이라면 이 강의를 추천합니다. &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt; &lt;span style=&quot;text-align: center;&quot;&gt;왜냐하면 개발 환경 설정까지 친절하게 설명해 주고&amp;nbsp;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;강의 구조가&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt; 학습 &amp;rarr; 예제 &amp;rarr; 문제와 풀기 &amp;rarr; 정리 순으로 되어있어 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;기초부터 응용까지 한번에 가능하고&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt; 강의가 평균적으로 20분으로 강의시간이 길지 않아서 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;직장인이라도 평일에 1~2강씩 시청을 할 수 있습니다. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;이론 중심보다는 실전 위주로 수업을 나가기 때문에&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt; 같이 코딩을 따라 칠 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;입문편은 무료( &lt;span style=&quot;text-align: center;&quot;&gt;2024.01.03 기준&lt;/span&gt;)이기 때문에 &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; 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;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1720759304174&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;김영한의 실전 자바 - 기본편&quot; data-og-description=&quot;안녕하세요 새해 인사드린지 엊그제 같은데 벌써 1월 말이네요. 그 사이에 저는 김영한의 실전 자바 - 기본편을 수강완료했어요. 후기 강의 시간은 약17 시간이었지만 역시 강사님이 IT 쪽에 오랫&quot; data-og-host=&quot;king-developer.tistory.com&quot; data-og-source-url=&quot;https://king-developer.tistory.com/entry/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EA%B8%B0%EB%B3%B8%ED%8E%B8&quot; data-og-url=&quot;https://king-developer.tistory.com/entry/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EA%B8%B0%EB%B3%B8%ED%8E%B8&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bp4Vdi/hyWzEejpkC/58XQ7vGYJ0lN0XC3AOiNY1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bi3man/hyWvIo7HIh/29djmCgDOhIIKzceYQCO81/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://king-developer.tistory.com/entry/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EA%B8%B0%EB%B3%B8%ED%8E%B8&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://king-developer.tistory.com/entry/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EA%B8%B0%EB%B3%B8%ED%8E%B8&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bp4Vdi/hyWzEejpkC/58XQ7vGYJ0lN0XC3AOiNY1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bi3man/hyWvIo7HIh/29djmCgDOhIIKzceYQCO81/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&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;안녕하세요 새해 인사드린지 엊그제 같은데 벌써 1월 말이네요. 그 사이에 저는 김영한의 실전 자바 - 기본편을 수강완료했어요. 후기 강의 시간은 약17 시간이었지만 역시 강사님이 IT 쪽에 오랫&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;king-developer.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>인강 후기</category>
      <category>국비</category>
      <category>김영한</category>
      <category>로드맵</category>
      <category>입문</category>
      <category>자바</category>
      <category>후기</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/8</guid>
      <comments>https://king-developer.tistory.com/entry/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%9E%90%EB%B0%94-%EC%9E%85%EB%AC%B8-%EC%BD%94%EB%93%9C%EB%A1%9C-%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94-%EC%9E%90%EB%B0%94-%EC%B2%AB%EA%B1%B8%EC%9D%8C-%ED%9B%84%EA%B8%B0#entry8comment</comments>
      <pubDate>Tue, 2 Jan 2024 17:58:08 +0900</pubDate>
    </item>
    <item>
      <title>Amazon EC2와 Amazon RDS 공통점&amp;middot;차이점</title>
      <link>https://king-developer.tistory.com/entry/Amazon-EC2%EC%99%80-Amazon-RDS-%EA%B3%B5%ED%86%B5%EC%A0%90%C2%B7%EC%B0%A8%EC%9D%B4%EC%A0%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;br /&gt;&lt;b&gt;공통점&lt;/b&gt;&lt;br /&gt;&lt;br /&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;1. Amazon EC2와 Amazon RDS 모두 Amazon Web Service(AWS)의 일부로 제공됩니다. 클라우드 컴퓨팅 및 데이터베이스 관리를 위한 서비스로서 AWS의 기능과 이점을 사용할 수 있습니다.&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. AWS는 보안,로깅 및 관리 기능을 제공하여 사용자가 애플리케이션 및 데이터베이스를 안전하게 유지하고 관리할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;차이점&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Amazon EC2는 가상 서버를 호스팅하기 위한 서비스로, 다양한 용도로 사용할 수 있지만 Amazon RDS는 관계형 데이터베이스를 호스팅하고 관리하기 위한 서비스입니다.&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. Amazon EC2는 사용자가 가상 서버의 운영체제, 애플리케이션 소프트웨어 및 보안 업데이트를 관리해야 하지만 Amazon RDS는 데이터 베이스 관리를 간소화하고, 백업, 복원, 보안 등을 AWS가 대부분 처리합니다.&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. Amazon EC2에서 데이터베이스를 실행하려면 데이터베이스 소프트웨어의 업그레이트 및 유지 관리를 사용자가 직접 처리해야 합니다. 하지만&amp;nbsp; Amazon RDS를 사용하면 업그레이드 및 유지 보수가 AWS에 의해 관리되므로 관리 부담이 덜합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/6</guid>
      <comments>https://king-developer.tistory.com/entry/Amazon-EC2%EC%99%80-Amazon-RDS-%EA%B3%B5%ED%86%B5%EC%A0%90%C2%B7%EC%B0%A8%EC%9D%B4%EC%A0%90#entry6comment</comments>
      <pubDate>Fri, 3 Nov 2023 15:19:43 +0900</pubDate>
    </item>
    <item>
      <title>Spring Framework 개념, 특징</title>
      <link>https://king-developer.tistory.com/entry/Spring-Framework-%EA%B0%9C%EB%85%90%ED%8A%B9%EC%A7%95-%EC%9A%94%EC%95%BD</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Spring Framework&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JAVA 언어를 기반으로 한 오픈 소스 애플리케이션 프레임워크입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대규모 기업이나 조직에서 사용할 수 있도록 고려되어 프로그램 개발을 단순화하고 향상시키기 위해 만들어졌으며, 다양한 기능을 제공하여 개발자가 애플리케이션을 빠르게 개발하고 유지보수하는 데 도움을 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;br /&gt;&lt;b&gt;1. 의존성 주입(DI: Dependency Injection)&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발자가 직접 객체를 생성하고 관리하는 대신, Spring 프레임워크는 애플리케이션의 설정 파일이나 어노테이션을 통해 객체 간의 의존성을 정의합니다. 그 다음 Spring 컨테이너가 이러한 객체를 생성하고 관리하며 필요한 곳에 주입합니다. 이렇게 하면 개발자는 객체의 생성 및 관리에 대한 부담이 줄어들게 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 제어의 역전(IOC :Inversion of Control)&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본의 제어 흐름은 보통 애플리케이션 코드가 모든 것을 제어하고 결정합니다. 예를 들어, 객체의 생성, 초기화, 메소드 호출, 의존성 관리 등을 애플리케이션 코드가 직접 처리합니다. 이로 인해 애플리케이션 코드가 복잡해지고 유지보수가 어려워 질수 있습니다. 이런 문제를 해결하기 위해서 제어 흐름을 외부 엔진 또는 컨테이너에 위임하는 방식을 도입합니다. 주로 IOC 컨테이너가 제어의 중심 역할을 합니다. 대표적인 IOC 컨테이너로는 Spring Framework가 있으며, Spring은 객체의 생명주기 관리, 의존성 주입 등을 처리하여 IOC원칙을 구현합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 관점 지향 프로그래밍(AOP: Aspect-Oriented Programming)&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로깅, 보안, 트랜잭션 관리를 모듈화하고 분리하는데 사용되는 프로그래밍 패러다임 중 하나입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AOP는 별도의 모듈 또는 관점(Aspect)으로 분리하고, 이러한 관점을 애플리케이션의 여러 부분에 적용할 수 있도록 도와줍니다. AOP를 사용하면 관점(Aspect)과 핵심 비지니스 로직을 분리함으로써 코드의 모듈화, 재사용성, 유지보수성을 향상시킬 수 있습니다.&lt;/p&gt;</description>
      <category>개발</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/5</guid>
      <comments>https://king-developer.tistory.com/entry/Spring-Framework-%EA%B0%9C%EB%85%90%ED%8A%B9%EC%A7%95-%EC%9A%94%EC%95%BD#entry5comment</comments>
      <pubDate>Fri, 28 Jul 2023 10:35:34 +0900</pubDate>
    </item>
    <item>
      <title>MVC 디자인 패턴</title>
      <link>https://king-developer.tistory.com/entry/MVC-%ED%8C%A8%ED%84%B4-%EC%9A%94%EC%95%BD</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;디자인 패턴이란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MVC는 Model, View, Controller의 약자로, 소프트웨어 설계에서 널리 사용되는 아키텍처 패턴이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;M(Model)&lt;/b&gt;: 애플리케이션의 데이터와 비즈니스 로직을 담당합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;V(View)&lt;/b&gt;: 사용자에게 보여지는 UI를 담당합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;C(Controller)&lt;/b&gt;: Model과 View 사이의 상호작용을 조정하는 역할을 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MVC 패턴에서는 사용자가 Controller를 통해 상호작용하면, Controller가 Model에서 필요한 데이터를 가져와 View를 통해 사용자에게 표시합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;모델1 아키텍처&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JSP 기반의 모델1 아키텍처에서는 View와 Controller의 역할이 JSP 파일 내에서 함께 처리됩니다.&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;구조가 단순하여 소규모 프로젝트에 적합하다.&lt;/li&gt;
&lt;li&gt;개발 속도가 빠르다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단점:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로젝트 규모가 커지면 코드가 복잡해져 유지보수가 어려워진다.&lt;/li&gt;
&lt;li&gt;재사용성과 가독성이 떨어질 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;모델2 아키텍처 (MVC)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MVC 패턴을 기반으로 한 모델2 아키텍처는 Model, View, Controller를 분리하여 구현합니다.&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;역할 분담이 명확하여 유지보수가 용이하다.&lt;/li&gt;
&lt;li&gt;재사용성과 확장성이 높다.&lt;/li&gt;
&lt;li&gt;대규모 프로젝트에 적합하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단점:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;초기 설계 단계에서 시간과 비용이 더 소요될 수 있다.&lt;/li&gt;
&lt;li&gt;작은 프로젝트의 경우 오버엔지니어링이 될 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발</category>
      <category>MVC</category>
      <category>디자인 패턴</category>
      <category>모델1</category>
      <category>모델2</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/4</guid>
      <comments>https://king-developer.tistory.com/entry/MVC-%ED%8C%A8%ED%84%B4-%EC%9A%94%EC%95%BD#entry4comment</comments>
      <pubDate>Fri, 7 Jul 2023 21:02:44 +0900</pubDate>
    </item>
    <item>
      <title>hELLO 티스토리 스킨</title>
      <link>https://king-developer.tistory.com/entry/hELLO-%ED%8B%B0%EC%8A%A4%ED%86%A0%EB%A6%AC-%EC%8A%A4%ED%82%A8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발자 블로그를 시작하게 되면서 여러가지 스킨을 찾아보았는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그중에서 내 눈에 쏙 들어온 스킨은 hELLO 스킨입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;hELLO 스킨을 적용한 이유는 깔끔한 디자인과 목차를 한눈에 볼 수 있는 장점이 있기 때문입니다.&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;hELLO 스킨 주소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/pronist/tistory-skin-hELLO&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/pronist/tistory-skin-hELLO&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1688707630603&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - pronist/tistory-skin-hELLO:   당신의 멋진 블로그에 걸맞는 최고의 티스토리 스킨&quot; data-og-description=&quot;  당신의 멋진 블로그에 걸맞는 최고의 티스토리 스킨. Contribute to pronist/tistory-skin-hELLO development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/pronist/tistory-skin-hELLO&quot; data-og-url=&quot;https://github.com/pronist/tistory-skin-hELLO&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cv2aSu/hyTd6UiEPp/Ai8i0NdWZkNqkzWKkNMrdk/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640&quot;&gt;&lt;a href=&quot;https://github.com/pronist/tistory-skin-hELLO&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/pronist/tistory-skin-hELLO&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cv2aSu/hyTd6UiEPp/Ai8i0NdWZkNqkzWKkNMrdk/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640');&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;GitHub - pronist/tistory-skin-hELLO:   당신의 멋진 블로그에 걸맞는 최고의 티스토리 스킨&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;  당신의 멋진 블로그에 걸맞는 최고의 티스토리 스킨. Contribute to pronist/tistory-skin-hELLO development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사합니다.&lt;/p&gt;</description>
      <category>기타</category>
      <category>hello</category>
      <category>개발자</category>
      <category>스킨</category>
      <category>티스토리</category>
      <author>&amp;quot;주인장&amp;quot;</author>
      <guid isPermaLink="true">https://king-developer.tistory.com/2</guid>
      <comments>https://king-developer.tistory.com/entry/hELLO-%ED%8B%B0%EC%8A%A4%ED%86%A0%EB%A6%AC-%EC%8A%A4%ED%82%A8#entry2comment</comments>
      <pubDate>Fri, 7 Jul 2023 14:29:32 +0900</pubDate>
    </item>
  </channel>
</rss>