<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>hyunmin43240 님의 블로그</title>
    <link>https://hyunmin43240.tistory.com/</link>
    <description>hyunmin43240 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Sun, 10 May 2026 20:46:34 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>hyunmin43240</managingEditor>
    <item>
      <title>Dijkstra: Shortest Reach 2</title>
      <link>https://hyunmin43240.tistory.com/13</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.hackerrank.com/challenges/dijkstrashortreach/problem&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.hackerrank.com/challenges/dijkstrashortreach/problem&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1746432306295&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;Dijkstra: Shortest Reach 2 | HackerRank&quot; data-og-description=&quot;Learn to use Dijkstra's shortest path algorithm !&quot; data-og-host=&quot;www.hackerrank.com&quot; data-og-source-url=&quot;https://www.hackerrank.com/challenges/dijkstrashortreach/problem&quot; data-og-url=&quot;https://www.hackerrank.com/challenges/dijkstrashortreach/problem&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/MjYJp/hyYMP6KKJJ/6hrYZkIcvAtiY62nJOKzeK/img.jpg?width=1200&amp;amp;height=640&amp;amp;face=706_91_833_229&quot;&gt;&lt;a href=&quot;https://www.hackerrank.com/challenges/dijkstrashortreach/problem&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.hackerrank.com/challenges/dijkstrashortreach/problem&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/MjYJp/hyYMP6KKJJ/6hrYZkIcvAtiY62nJOKzeK/img.jpg?width=1200&amp;amp;height=640&amp;amp;face=706_91_833_229');&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;Dijkstra: Shortest Reach 2 | HackerRank&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Learn to use Dijkstra's shortest path algorithm !&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.hackerrank.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1746432339818&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; public static List&amp;lt;Integer&amp;gt; shortestReach(int n, List&amp;lt;List&amp;lt;Integer&amp;gt;&amp;gt; edges, int s) {
    // Write your code here
     List&amp;lt;List&amp;lt;int[]&amp;gt;&amp;gt; graph = new ArrayList&amp;lt;&amp;gt;();
    for (int i = 0; i &amp;lt;= n; i++) {
        graph.add(new ArrayList&amp;lt;&amp;gt;());
    }

    // Build adjacency list (undirected)
    for (List&amp;lt;Integer&amp;gt; edge : edges) {
        int u = edge.get(0);
        int v = edge.get(1);
        int w = edge.get(2);
        graph.get(u).add(new int[]{v, w});
        graph.get(v).add(new int[]{u, w});
    }

    int[] dist = new int[n + 1];
    Arrays.fill(dist, Integer.MAX_VALUE);
    dist[s] = 0;

    PriorityQueue&amp;lt;int[]&amp;gt; pq = new PriorityQueue&amp;lt;&amp;gt;(Comparator.comparingInt(a -&amp;gt; a[1]));
    pq.offer(new int[]{s, 0});

    boolean[] visited = new boolean[n + 1];

    while (!pq.isEmpty()) {
        int[] curr = pq.poll();
        int u = curr[0];
        int d = curr[1];

        if (visited[u]) continue;
        visited[u] = true;

        for (int[] neighbor : graph.get(u)) {
            int v = neighbor[0];
            int weight = neighbor[1];

            if (!visited[v] &amp;amp;&amp;amp; dist[u] + weight &amp;lt; dist[v]) {
                dist[v] = dist[u] + weight;
                pq.offer(new int[]{v, dist[v]});
            }
        }
    }

    List&amp;lt;Integer&amp;gt; result = new ArrayList&amp;lt;&amp;gt;();
    for (int i = 1; i &amp;lt;= n; i++) {
        if (i == s) continue;
        result.add(dist[i] == Integer.MAX_VALUE ? -1 : dist[i]);
    }

    return result;
}
}&lt;/code&gt;&lt;/pre&gt;</description>
      <author>hyunmin43240</author>
      <guid isPermaLink="true">https://hyunmin43240.tistory.com/13</guid>
      <comments>https://hyunmin43240.tistory.com/13#entry13comment</comments>
      <pubDate>Mon, 5 May 2025 17:05:47 +0900</pubDate>
    </item>
    <item>
      <title>Prim's(MST): Special Subtree</title>
      <link>https://hyunmin43240.tistory.com/12</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.hackerrank.com/challenges/primsmstsub/problem?isFullScreen=true&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.hackerrank.com/challenges/primsmstsub/problem?isFullScreen=true&lt;/a&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1746428334821&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public static int prims(int n, List&amp;lt;List&amp;lt;Integer&amp;gt;&amp;gt; edges, int start) {
    // Write your code here
        
        List&amp;lt;List&amp;lt;int[]&amp;gt;&amp;gt; graph = new ArrayList&amp;lt;&amp;gt;();
    for (int i = 0; i &amp;lt;= n; i++) graph.add(new ArrayList&amp;lt;&amp;gt;());
    for (List&amp;lt;Integer&amp;gt; edge : edges) {
        int u = edge.get(0), v = edge.get(1), w = edge.get(2);
        graph.get(u).add(new int[]{v, w});
        graph.get(v).add(new int[]{u, w}); 
    }

    boolean[] visited = new boolean[n + 1];
    PriorityQueue&amp;lt;int[]&amp;gt; pq = new PriorityQueue&amp;lt;&amp;gt;(Comparator.comparingInt(a -&amp;gt; a[1]));
    pq.offer(new int[]{start, 0});
    int totalWeight = 0;

    while (!pq.isEmpty()) {
        int[] curr = pq.poll();
        int node = curr[0], weight = curr[1];
        if (visited[node]) continue;
        visited[node] = true;
        totalWeight += weight;

        for (int[] neighbor : graph.get(node)) {
            int nextNode = neighbor[0], nextWeight = neighbor[1];
            if (!visited[nextNode]) {
                pq.offer(new int[]{nextNode, nextWeight});
            }
        }
    }

    return totalWeight;
        
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>hyunmin43240</author>
      <guid isPermaLink="true">https://hyunmin43240.tistory.com/12</guid>
      <comments>https://hyunmin43240.tistory.com/12#entry12comment</comments>
      <pubDate>Mon, 5 May 2025 15:59:16 +0900</pubDate>
    </item>
    <item>
      <title>Kruskal(MST) : Really Special Subtree</title>
      <link>https://hyunmin43240.tistory.com/11</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.hackerrank.com/challenges/kruskalmstrsub/problem?isFullScreen=true&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.hackerrank.com/challenges/kruskalmstrsub/problem?isFullScreen=true&lt;/a&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1746425770610&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public static int kruskals(int gNodes, List&amp;lt;Integer&amp;gt; gFrom, List&amp;lt;Integer&amp;gt; gTo, List&amp;lt;Integer&amp;gt; gWeight) {
        class Edge implements Comparable&amp;lt;Edge&amp;gt; {
        int u, v, weight;

        Edge(int u, int v, int weight) {
            this.u = Math.min(u, v); 
            this.v = Math.max(u, v);  
            this.weight = weight;
        }

        public int compareTo(Edge other) {
            if (this.weight != other.weight) {
                return this.weight - other.weight;
            } else if (this.u != other.u) {
                return this.u - other.u;
            } else {
                return this.v - other.v;
            }
        }
    }

    class UnionFind {
        int[] parent;

        UnionFind(int n) {
            parent = new int[n + 1]; // 1-based indexing
            for (int i = 1; i &amp;lt;= n; i++) parent[i] = i;
        }

        int find(int x) {
            if (parent[x] != x) parent[x] = find(parent[x]);
            return parent[x];
        }

        boolean union(int a, int b) {
            int rootA = find(a);
            int rootB = find(b);
            if (rootA == rootB) return false;
            parent[rootB] = rootA;
            return true;
        }
    }

    List&amp;lt;Edge&amp;gt; edges = new ArrayList&amp;lt;&amp;gt;();
    for (int i = 0; i &amp;lt; gFrom.size(); i++) {
        edges.add(new Edge(gFrom.get(i), gTo.get(i), gWeight.get(i)));
    }

    Collections.sort(edges);

    UnionFind uf = new UnionFind(gNodes);
    int totalWeight = 0;
    int edgeCount = 0;

    for (Edge edge : edges) {
        if (uf.union(edge.u, edge.v)) {
            totalWeight += edge.weight;
            edgeCount++;
            if (edgeCount == gNodes - 1) break;
        }
    }

    return totalWeight;
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <author>hyunmin43240</author>
      <guid isPermaLink="true">https://hyunmin43240.tistory.com/11</guid>
      <comments>https://hyunmin43240.tistory.com/11#entry11comment</comments>
      <pubDate>Mon, 5 May 2025 15:16:29 +0900</pubDate>
    </item>
    <item>
      <title>BFS</title>
      <link>https://hyunmin43240.tistory.com/10</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666; text-align: left;&quot;&gt;&lt;a href=&quot;https://www.hackerrank.com/challenges/bfsshortreach/problem?isFullScreen=true&quot;&gt;https://www.hackerrank.com/challenges/bfsshortreach/problem?isFullScreen=true&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1746419202770&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//Hackerrank Breadth First Search: Shortest Reach
import java.util.*;
class Result {

    public static List&amp;lt;Integer&amp;gt; bfs(int n, int m, List&amp;lt;List&amp;lt;Integer&amp;gt;&amp;gt; edges, int s) {
        // Write your code here
        List&amp;lt;List&amp;lt;Integer&amp;gt;&amp;gt; graph = new ArrayList&amp;lt;&amp;gt;();
        for (int i = 0; i &amp;lt;= n; i++) {
            graph.add(new ArrayList&amp;lt;&amp;gt;());
        }

        for (List&amp;lt;Integer&amp;gt; edge : edges) {
            int u = edge.get(0);
            int v = edge.get(1);
            graph.get(u).add(v);
            graph.get(v).add(u);
        }

        int[] distances = new int[n+1];
        Arrays.fill(distances, -1);
        Queue&amp;lt;Integer&amp;gt; queue = new LinkedList&amp;lt;&amp;gt;();
        queue.offer(s);
        distances[s] = 0;

        while (!queue.isEmpty()) {
            int curr = queue.poll();
            for (int neighbor : graph.get(curr)) {
                if (distances[neighbor] == -1) {
                    distances[neighbor] = distances[curr] + 6;
                    queue.offer(neighbor);
                }
            }
        }
        List&amp;lt;Integer&amp;gt; result = new ArrayList&amp;lt;&amp;gt;();
        for (int i =1; i &amp;lt;= n; i++) {
            if (i != s) {
                result.add(distances[i]);
            }
        }
        return result;
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <author>hyunmin43240</author>
      <guid isPermaLink="true">https://hyunmin43240.tistory.com/10</guid>
      <comments>https://hyunmin43240.tistory.com/10#entry10comment</comments>
      <pubDate>Mon, 5 May 2025 13:27:20 +0900</pubDate>
    </item>
    <item>
      <title>알고리즘 스터디 6주차</title>
      <link>https://hyunmin43240.tistory.com/9</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Graph Theory - Synchronous Shopping&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1744335698815&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.regex.*;

class Result {

    /*
     * Complete the 'shop' function below.
     *
     * The function is expected to return an INTEGER.
     * The function accepts following parameters:
     *  1. INTEGER n
     *  2. INTEGER k
     *  3. STRING_ARRAY centers
     *  4. 2D_INTEGER_ARRAY roads
     */

    public static int shop(int n, int k, List&amp;lt;String&amp;gt; centers, List&amp;lt;List&amp;lt;Integer&amp;gt;&amp;gt; roads) {
    // Write your code here
    int[] fishAtCenter = new int[n + 1];
    for (int i = 0; i &amp;lt; n; i++) {
        String[] items = centers.get(i).split(&quot; &quot;);
        int fishMask = 0;
        for (int j = 1; j &amp;lt; items.length; j++) {
            int fishType = Integer.parseInt(items[j]);
            fishMask |= (1 &amp;lt;&amp;lt; (fishType - 1)); // 물고기 종류를 비트로 마킹
        }
        fishAtCenter[i + 1] = fishMask;
    }

    // 2. 그래프 만들기 (인접 리스트)
    List&amp;lt;List&amp;lt;int[]&amp;gt;&amp;gt; graph = new ArrayList&amp;lt;&amp;gt;();
    for (int i = 0; i &amp;lt;= n; i++) {
        graph.add(new ArrayList&amp;lt;&amp;gt;());
    }

    for (List&amp;lt;Integer&amp;gt; road : roads) {
        int u = road.get(0);
        int v = road.get(1);
        int time = road.get(2);
        graph.get(u).add(new int[]{v, time});
        graph.get(v).add(new int[]{u, time});
    }

    // 3. 다익스트라 준비 (dist[노드번호][물고기상태] = 시간)
    int[][] dist = new int[n + 1][1 &amp;lt;&amp;lt; k];
    for (int[] row : dist) Arrays.fill(row, Integer.MAX_VALUE);

    PriorityQueue&amp;lt;int[]&amp;gt; pq = new PriorityQueue&amp;lt;&amp;gt;(Comparator.comparingInt(a -&amp;gt; a[0]));
    int startFish = fishAtCenter[1];
    dist[1][startFish] = 0;
    pq.offer(new int[]{0, 1, startFish}); // {시간, 노드번호, 물고기상태}

    // 4. 다익스트라 실행
    while (!pq.isEmpty()) {
        int[] cur = pq.poll();
        int time = cur[0];
        int u = cur[1];
        int fishMask = cur[2];

        if (dist[u][fishMask] &amp;lt; time) continue;

        for (int[] edge : graph.get(u)) {
            int v = edge[0];
            int cost = edge[1];
            int newFishMask = fishMask | fishAtCenter[v];
            int newTime = time + cost;

            if (dist[v][newFishMask] &amp;gt; newTime) {
                dist[v][newFishMask] = newTime;
                pq.offer(new int[]{newTime, v, newFishMask});
            }
        }
    }

    // 5. 최종 목적지(n)에서 가능한 모든 물고기 상태 조합 중 최소값 찾기
    int minTime = Integer.MAX_VALUE;
    int allFish = (1 &amp;lt;&amp;lt; k) - 1;

    for (int i = 0; i &amp;lt; (1 &amp;lt;&amp;lt; k); i++) {
        for (int j = 0; j &amp;lt; (1 &amp;lt;&amp;lt; k); j++) {
            if ((i | j) == allFish) {
                int maxTime = Math.max(dist[n][i], dist[n][j]);
                minTime = Math.min(minTime, maxTime);
            }
        }
    }

    return minTime;
        }

    }

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv(&quot;OUTPUT_PATH&quot;)));

        String[] firstMultipleInput = bufferedReader.readLine().replaceAll(&quot;\\s+$&quot;, &quot;&quot;).split(&quot; &quot;);

        int n = Integer.parseInt(firstMultipleInput[0]);

        int m = Integer.parseInt(firstMultipleInput[1]);

        int k = Integer.parseInt(firstMultipleInput[2]);

        List&amp;lt;String&amp;gt; centers = new ArrayList&amp;lt;&amp;gt;();

        for (int i = 0; i &amp;lt; n; i++) {
            String centersItem = bufferedReader.readLine();
            centers.add(centersItem);
        }

        List&amp;lt;List&amp;lt;Integer&amp;gt;&amp;gt; roads = new ArrayList&amp;lt;&amp;gt;();

        for (int i = 0; i &amp;lt; m; i++) {
            String[] roadsRowTempItems = bufferedReader.readLine().replaceAll(&quot;\\s+$&quot;, &quot;&quot;).split(&quot; &quot;);

            List&amp;lt;Integer&amp;gt; roadsRowItems = new ArrayList&amp;lt;&amp;gt;();

            for (int j = 0; j &amp;lt; 3; j++) {
                int roadsItem = Integer.parseInt(roadsRowTempItems[j]);
                roadsRowItems.add(roadsItem);
            }

            roads.add(roadsRowItems);
        }

        int res = Result.shop(n, k, centers, roads);

        bufferedWriter.write(String.valueOf(res));
        bufferedWriter.newLine();

        bufferedReader.close();
        bufferedWriter.close();
    }
}&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;비트마스킹 개념&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;777&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbvGWo/btsNhJb1ZMM/4jyIX6YyKRv01GQDp5GyF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbvGWo/btsNhJb1ZMM/4jyIX6YyKRv01GQDp5GyF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbvGWo/btsNhJb1ZMM/4jyIX6YyKRv01GQDp5GyF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbvGWo%2FbtsNhJb1ZMM%2F4jyIX6YyKRv01GQDp5GyF0%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;777&quot; height=&quot;40&quot; data-origin-width=&quot;777&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다익스트라 방식&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;675&quot; data-origin-height=&quot;394&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWT1bL/btsNgEQj941/9KUFSzKMBqOSLKeEEDLVi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWT1bL/btsNgEQj941/9KUFSzKMBqOSLKeEEDLVi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWT1bL/btsNgEQj941/9KUFSzKMBqOSLKeEEDLVi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWT1bL%2FbtsNgEQj941%2F9KUFSzKMBqOSLKeEEDLVi1%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;675&quot; height=&quot;394&quot; data-origin-width=&quot;675&quot; data-origin-height=&quot;394&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div style=&quot;background-color: #1d2432; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ff636f;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;[][]&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #63b7fc;&quot;&gt;dist&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff636f;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff636f;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #63b7fc;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;][&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #63b7fc;&quot;&gt;k&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;];&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #ff636f;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff636f;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #63b7fc;&quot;&gt;row&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #63b7fc;&quot;&gt;dist&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #63b7fc;&quot;&gt;Arrays&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #63b7fc;&quot;&gt;fill&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #63b7fc;&quot;&gt;row&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #63b7fc;&quot;&gt;Integer&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #63b7fc;&quot;&gt;MAX_VALUE&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #63b7fc;&quot;&gt;PriorityQueue&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff636f;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;[]&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #63b7fc;&quot;&gt;pq&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff636f;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #63b7fc;&quot;&gt;PriorityQueue&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #63b7fc;&quot;&gt;Comparator&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #63b7fc;&quot;&gt;comparingInt&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #63b7fc;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; -&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #63b7fc;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;]));&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #ff636f;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #63b7fc;&quot;&gt;startFish&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #63b7fc;&quot;&gt;fishAtCenter&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;];&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #63b7fc;&quot;&gt;dist&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;][&lt;/span&gt;&lt;span style=&quot;color: #63b7fc;&quot;&gt;startFish&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #63b7fc;&quot;&gt;pq&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #63b7fc;&quot;&gt;offer&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff636f;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff636f;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;[]{&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #63b7fc;&quot;&gt;startFish&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;});&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;</description>
      <author>hyunmin43240</author>
      <guid isPermaLink="true">https://hyunmin43240.tistory.com/9</guid>
      <comments>https://hyunmin43240.tistory.com/9#entry9comment</comments>
      <pubDate>Fri, 11 Apr 2025 13:01:19 +0900</pubDate>
    </item>
    <item>
      <title>알고리즘 스터디 5주차</title>
      <link>https://hyunmin43240.tistory.com/8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;11286&lt;/p&gt;
&lt;pre id=&quot;code_1743598242230&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.Comparator;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        PriorityQueue&amp;lt;Integer&amp;gt; pq = new PriorityQueue&amp;lt;&amp;gt;(new Comparator&amp;lt;Integer&amp;gt;() {

            @Override
            public int compare(Integer a, Integer b) {
                int absA = Math.abs(a);
                int absB = Math.abs(b);

                if (absA == absB) {
                    return a - b;  // 실제 값 비교
                }
                return absA - absB;  // 절댓값 비교
            }
        });

        int N = scanner.nextInt();

        for (int i = 0; i&amp;lt;N; i++) {
            int z = scanner.nextInt();
            if (z != 0) {
                pq.add(z);
            } else {
                if (pq.isEmpty()) {
                    System.out.println(0);
                } else {
                    System.out.println(pq.poll());
                }
            }
        }
            
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1153&quot; data-origin-height=&quot;82&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUekXJ/btsM5FV6q3F/Zv6bnM06h8Ca8NCzxKoaC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUekXJ/btsM5FV6q3F/Zv6bnM06h8Ca8NCzxKoaC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUekXJ/btsM5FV6q3F/Zv6bnM06h8Ca8NCzxKoaC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUekXJ%2FbtsM5FV6q3F%2FZv6bnM06h8Ca8NCzxKoaC0%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;1153&quot; height=&quot;82&quot; data-origin-width=&quot;1153&quot; data-origin-height=&quot;82&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1966&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1929&lt;/p&gt;
&lt;pre id=&quot;code_1743641160042&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int M = scanner.nextInt();
        int N = scanner.nextInt();

        for (int num = M ; num &amp;lt;= N ; num++) {
            if (isPrime(num)) {
                System.out.println(num);
                }
            }
    }

    public static boolean isPrime(int n) {
        if (n &amp;lt; 2) return false;

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

        return true;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1153&quot; data-origin-height=&quot;87&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cXuwDr/btsM6TldWgP/05KLScBzpBWPT4dPp6lBP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cXuwDr/btsM6TldWgP/05KLScBzpBWPT4dPp6lBP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cXuwDr/btsM6TldWgP/05KLScBzpBWPT4dPp6lBP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcXuwDr%2FbtsM6TldWgP%2F05KLScBzpBWPT4dPp6lBP1%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;1153&quot; height=&quot;87&quot; data-origin-width=&quot;1153&quot; data-origin-height=&quot;87&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1850&lt;/p&gt;
&lt;pre id=&quot;code_1743642610240&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        long num1 = scanner.nextLong();
        long num2 = scanner.nextLong();

        long gcd = getGCD(Math.max(num1, num2), Math.min(num1, num2));

        StringBuilder sb = new StringBuilder();
        for (int i = 1; i &amp;lt;= gcd; i++) sb.append(&quot;1&quot;);

        System.out.println(sb.toString());
    }

    public static long getGCD(long a, long b) {
        while (b &amp;gt; 0) {
            long tmp = a;
            a = b;
            b = tmp % b;
        }
        return a;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1155&quot; data-origin-height=&quot;91&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buZrG9/btsM6Eu3C5T/b25tRIgA3Ndal0woyb56Hk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buZrG9/btsM6Eu3C5T/b25tRIgA3Ndal0woyb56Hk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buZrG9/btsM6Eu3C5T/b25tRIgA3Ndal0woyb56Hk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuZrG9%2FbtsM6Eu3C5T%2Fb25tRIgA3Ndal0woyb56Hk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1155&quot; height=&quot;91&quot; data-origin-width=&quot;1155&quot; data-origin-height=&quot;91&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <author>hyunmin43240</author>
      <guid isPermaLink="true">https://hyunmin43240.tistory.com/8</guid>
      <comments>https://hyunmin43240.tistory.com/8#entry8comment</comments>
      <pubDate>Thu, 3 Apr 2025 10:10:58 +0900</pubDate>
    </item>
    <item>
      <title>알고리즘 스터디 4주차</title>
      <link>https://hyunmin43240.tistory.com/7</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;스택 &amp;amp; 큐 [1874, 2164]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1874&lt;/p&gt;
&lt;pre id=&quot;code_1743247256704&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Stack;
 
public class Main {
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();	// 출력할 결과물 저장
		
		Stack&amp;lt;Integer&amp;gt; stack = new Stack&amp;lt;&amp;gt;();
		
		int N = Integer.parseInt(br.readLine());
		
		int start = 0;
		
		// N 번 반복
		while(N -- &amp;gt; 0) {
			
			int value = Integer.parseInt(br.readLine());
			
			if(value &amp;gt; start) {
				// start + 1부터 입력받은 value 까지 push를 한다.
				for(int i = start + 1; i &amp;lt;= value; i++) {
					stack.push(i);
					sb.append('+').append('\n');	// + 를 저장한다. 
				}
				start = value; 	// 다음 push 할 때의 오름차순을 유지하기 위한 변수 초기화 
			}
			
			// top에 있는 원소가 입력받은 값과 같이 않은 경우  
			else if(stack.peek() != value) {
				System.out.println(&quot;NO&quot;);
				return;		// 또는 System.exit(0); 으로 대체해도 됨. 
			}
			
			stack.pop();
			sb.append('-').append('\n');
			
		}
		
		System.out.println(sb);
	}
}&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;2164&lt;/p&gt;
&lt;pre id=&quot;code_1743248020201&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named &quot;Main&quot;.
class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt(); 
        Queue&amp;lt;Integer&amp;gt; queue = new LinkedList&amp;lt;&amp;gt;();
        
        for (int i = 1; i&amp;lt;=n; i++)
            queue.add(i);


        while(queue.size() &amp;gt; 1) {
        queue.poll();
        int val = queue.peek();
        queue.poll();
        queue.add(val);
        }
        System.out.println(queue.peek());
        
    }
}&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;탐욕 알고리즘 [11047, 1541]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;11047&lt;/p&gt;
&lt;pre id=&quot;code_1743249444340&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named &quot;Main&quot;.
class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt(); 
        int k = sc.nextInt();

        int[] coin = new int[n];

        for(int i=0; i &amp;lt; n; i++) {
            coin[i] = sc.nextInt();
        }

        int count = 0;

        for(int i =n-1; i &amp;gt;= 0; i--) {
            if(coin[i] &amp;lt;= k) {
                count += (k/coin[i]);
                k = k%coin[i];
            }
        }
        System.out.println(count);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1541&lt;/p&gt;
&lt;pre id=&quot;code_1743251216292&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named &quot;Main&quot;.
class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int sum = 0;
        String[] subtraction = sc.nextLine().split(&quot;-&quot;);

        for (int i = 0; i &amp;lt; subtraction.length; i++) {
            int temp = 0; 

            String[] addition = subtraction[i].split(&quot;\\+&quot;);
            for(int j = 0; j &amp;lt; addition.length; j++) {
				temp += Integer.parseInt(addition[j]);
			}

            if ( i== 0) {
                sum += temp;
            } else {
				sum -= temp;
            }
		}
        
		System.out.println(sum);
        }
    }&lt;/code&gt;&lt;/pre&gt;</description>
      <author>hyunmin43240</author>
      <guid isPermaLink="true">https://hyunmin43240.tistory.com/7</guid>
      <comments>https://hyunmin43240.tistory.com/7#entry7comment</comments>
      <pubDate>Sat, 29 Mar 2025 21:27:04 +0900</pubDate>
    </item>
    <item>
      <title>재귀, 자기호출 (recursion)</title>
      <link>https://hyunmin43240.tistory.com/6</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;재귀는 '내 안의 나를 찾는것' -&amp;gt; 성격은 같고 크기만 작은 나를 찾아 큰 나와 작은 나가 연결된 관계를 드러내는 것 즉, 자기 자신을 호출하는 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시) 팩토리얼 계산&lt;/p&gt;
&lt;pre id=&quot;code_1728367745602&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class RecursionExample {
	public static int factorial(int n) {
		if (n==1) {
    		return 1;
    	} else {
    		return n* factorial (n-1);
    	}
	}

	public static void main(String[] args) {
    	int number = 5;
        int result = factorial(number);
        System.out.prntln(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;예시) 피보나치 수열&lt;/p&gt;
&lt;pre id=&quot;code_1728368003789&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class FibonacciRecursion {
	public static int fibonacci(int n) {
    	if (n ==1 || n==2) {
        	return 1;
        } else {
        	return fibonacci(n-1) + fibonacci(n-2);
        }
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시) 하노이 탑&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728368405625&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;move( n, a, b, c):
	if (n &amp;gt; 0 )
    	move(n-1, a,c,b)
        a 에 있는 원반을 b로 옮긴다
        move(n-1, c, b, a)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;move(n, a, b, c) 를 수행하는 과정에서 move(0, ...)이 총 2^n번이나 호출된다. 왜..? 설명해주실 분?&lt;/p&gt;</description>
      <author>hyunmin43240</author>
      <guid isPermaLink="true">https://hyunmin43240.tistory.com/6</guid>
      <comments>https://hyunmin43240.tistory.com/6#entry6comment</comments>
      <pubDate>Tue, 8 Oct 2024 15:21:34 +0900</pubDate>
    </item>
    <item>
      <title>큐 (Queue)</title>
      <link>https://hyunmin43240.tistory.com/5</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;선입선출(First in first out) - 큐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;후입선출(Last in First out) - 스택&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;배열 큐 객체의 구조&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- queue[] - 큐의 원소들이 저장되는 배열&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- numItems - 큐의 총 원소 수 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- front - 큐의 맨 앞 원소의 인덱스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- tail - 큐의 맨 뒤 원소의 인덱스&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;- enqueue(x) - 큐의 끝에 원소 x를 삽입한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- dequeue() - 큐의 맨 앞에 있는 원소를 알려주고 삭제한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- front() - 큐의 맨 앞에 있는 원소를 알려준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- isEmpty() - 큐가 비어 있는지 알려준다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- dequeueALL() - 큐를 깨끗이 청소한다.&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;tail이 할당받은 배열 공간의 맨 끝에 오면 큐가 꽉 찬 상태라 여김 -&amp;gt; 공간의 비효율 생김&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;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;tail &amp;lt;- (tail+1)%queue.length&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;front &amp;lt;-(tail+1)%queue.length&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;연결 리스트 큐의 구조&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- tail&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&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;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;매소드&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- enqueue(x)&lt;span&gt;&amp;nbsp;&lt;/span&gt;- 큐의 끝에 원소 x를 삽입한다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- dequeue()&lt;span&gt;&amp;nbsp;&lt;/span&gt;- 큐의 맨 앞에 있는 원소를 알려주고 삭제한다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- front()&lt;span&gt;&amp;nbsp;&lt;/span&gt;- 큐의 맨 앞에 있는 원소를 알려준다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- isEmpty()&lt;span&gt;&amp;nbsp;&lt;/span&gt;- 큐가 비어 있는지 알려준다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- dequeueALL()&lt;span&gt;&amp;nbsp;&lt;/span&gt;- 큐를 깨끗이 청소한다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;연결 리스트 큐의 구조 또한 원형으로 이루어져 있다 tail 이 가르키는 다음 노드가 front를 가르키고 있다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;원소 삽입의 경우 -&amp;gt; tail 이 newnode를 가르키게 되며 그 노드가 front를 가르키게 된다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;원소 삭제의 경우 -&amp;gt; tail 이 가르키는 노드가 front 노드 다음 노드를 가르키게 한다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;클래스 LinkedList 상속&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;public class InheritedQueue&amp;lt;E&amp;gt; extends LinkedList&amp;lt;E&amp;gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; implements QueueInterface&amp;lt;E&amp;gt; {....&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;public InheritedQueue&amp;lt;&amp;gt; {&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; super();&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;}&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727100048851&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;

public class Main {
    public static void main(String[] args) {
        // LinkedList 선언
        LinkedList&amp;lt;String&amp;gt; list = new LinkedList&amp;lt;&amp;gt;();
        
        // 데이터 추가 (맨 뒤에 추가)
        list.add(&quot;A&quot;);
        list.add(&quot;B&quot;);
        list.add(&quot;C&quot;);
        
        // 리스트 출력
        System.out.println(list);  // 출력: [A, B, C]
        
        // 첫 번째에 데이터 추가
        list.addFirst(&quot;Start&quot;);
        
        // 마지막에 데이터 추가
        list.addLast(&quot;End&quot;);
        
        // 리스트 출력
        System.out.println(list);  // 출력: [Start, A, B, C, End]
        
        // 데이터 삭제
        list.remove(2);  // 인덱스 2의 요소(B) 삭제
        System.out.println(list);  // 출력: [Start, A, C, End]
        
        // 첫 번째 요소 가져오기
        System.out.println(list.getFirst());  // 출력: Start
        
        // 마지막 요소 가져오기
        System.out.println(list.getLast());  // 출력: End
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;큐 응용: 좌우동형 문자열 체크&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1727100513934&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package queue;
import stack.LinkedStack;

public class Palindrom {
	private static boolean isPalindrom(String A) {
    	LinkedStack s = new LinkedStack();
        LinkedQueue q = new LinkedQueue();
        for(int i=0; i &amp;lt; A.length(); i++) {
        	s.push(A.charAt(i));
            q.enqueue(A.charAt(i));
        }
        while(!s.isEmpty() &amp;amp;&amp;amp; s.pop() == q.dequeue()) {
        }
        if(s.isEmpty()) return true;
        else return false;
    }
    
    public static void main(String[] args) {
    	System.out.println(&quot;Palindrom Check!&quot;);
        String str = &quot;lioninoil&quot;;
        boolean t = isPalindrom(str);
        System.out.println(str + &quot; is Palindrom?: &quot; + t);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>hyunmin43240</author>
      <guid isPermaLink="true">https://hyunmin43240.tistory.com/5</guid>
      <comments>https://hyunmin43240.tistory.com/5#entry5comment</comments>
      <pubDate>Mon, 23 Sep 2024 23:09:16 +0900</pubDate>
    </item>
    <item>
      <title>스택(Stack)</title>
      <link>https://hyunmin43240.tistory.com/4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;LIFO(Last-in-first-out) - 후입선출&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;514&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/co2J2C/btsIXlG5n3K/xoFrXVC3oRCB2iuXRY5VG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/co2J2C/btsIXlG5n3K/xoFrXVC3oRCB2iuXRY5VG1/img.png&quot; data-alt=&quot;(스택의 방식)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/co2J2C/btsIXlG5n3K/xoFrXVC3oRCB2iuXRY5VG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fco2J2C%2FbtsIXlG5n3K%2FxoFrXVC3oRCB2iuXRY5VG1%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;289&quot; height=&quot;514&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;514&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FIFO(First-in-first-out) - 선입선출&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;825&quot; data-origin-height=&quot;763&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bi0MZB/btsIYemX2Gx/ayW87nHpnOup9RvTNo04Fk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bi0MZB/btsIYemX2Gx/ayW87nHpnOup9RvTNo04Fk/img.png&quot; data-alt=&quot;(큐의 방식)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bi0MZB/btsIYemX2Gx/ayW87nHpnOup9RvTNo04Fk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbi0MZB%2FbtsIYemX2Gx%2FayW87nHpnOup9RvTNo04Fk%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;264&quot; height=&quot;244&quot; data-origin-width=&quot;825&quot; data-origin-height=&quot;763&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;&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;- push&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- pop&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- top&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;배열을 이용한 스택 객체 구조&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- stack[] -&amp;gt; 스택의 원소들이 저장되는 배열&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- topIndex -&amp;gt; 스택 탑 원소 자리의 인덱스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- push() -&amp;gt; 스택의 맨 위에 원소 x를 삽입한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- pop() -&amp;gt; 스택의 맨 위에 있는 원소를 알려주고 삭제한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt; top() -&amp;gt; 스택의 맨 위에 있는 원소를 알려준다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt; isEmpty() -&amp;gt; 스택이 비었는지 알려준다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt; &lt;/span&gt;&lt;/span&gt;popAll() -&amp;gt; 스택을 깨끗이 청소한다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1723087660109&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package stack;

public interface StackInterface&amp;lt;E&amp;gt; {
	public void push(E newItem);
    public E pop();
    public E top();
    public boolean isEmpty();
    public void popAll();
}

public class ArrayStack&amp;lt;E&amp;gt; implements StackInterface&amp;lt;E&amp;gt; {
	private E stack[];
    private int topIndex; // 스택의 탑 인덱스
    private static final int DEFAULT_CAPACITY = 64;
    private final E ERROR = null; //임의의 에러 값
    
    public ArrayStack() {
    	stack =(E[]) new Object[DEFAULT_CAPACITY];
        topIndex = -1;
    } //생성자 1
    
    public ArrayStack(int n) {
    stack = (E[]) new Object[n];
    topIndex = -1;
    } // 생성자 2 
    
    // 스텍에 원소 x 삽입하기
    public void push(E newItem) {
    	stack[++topIndex] = newItem;
    }
    
    //스택에서 원소 삭제하기
    public E pop() {
    	if (isEmpty()) return ERROR;
        else return stack[topIndex--];
    }
    
    //스택 탑 원소 알려주기
    public E top() {
    if (isEmpty()) return ERROR;
    else return stack[topIndex];
    }
   
    // 스택이 꽉 찼는지 확인하기
    public boolean isEmpty() {
    	return(topIndex&amp;lt;0);
    }
    
    // 스택이 비었는지 확인하기
    public boolean isFull() {
    	return (topIndex == stack.length-1);
    }
    
    // 스택 비우기
    public void popAll() {
    	stack = (E[]) new Object[stack.length];
        topIndex = -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;&lt;b&gt;연결리스트 스택 객체 구조&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- topNode -&amp;gt; 스택 탑 원소를 가리키는 래퍼런스&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- push() -&amp;gt; 스택의 맨 위에 원소 x를 삽입한다&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- pop() -&amp;gt; 스택의 맨 위에 있는 원소를 알려주고 삭제한다&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;top() -&amp;gt; 스택의 맨 위에 있는 원소를 알려준다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;isEmpty() -&amp;gt; 스택이 비었는지 알려준다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;popAll() -&amp;gt; 스택을 깨끗이 청소한다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배열을 이용한 스택 구조와 다른점: 배열 스택에서는 삽입 시 스택이 꽉 차 있으면 삽입을 못 했는데 연결 리스트 스택에서는 노드를 만들어 붙이므로 삽입을 못 하는 경우는 없다. 새로 만든 노드를 newNode 라고 함.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;push(x):&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; newNode.item &amp;lt;- x&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; newNode.next &amp;lt;- topNode&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; topNode &amp;lt;- newNode&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스택에서 삽입할때는 항상 맨 앞에서 일어나기에 topNode 로 래퍼런스가 되어있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1723089809891&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package stack;
import list.Node;

public class LinkedStack&amp;lt;E&amp;gt; implements StackInterface&amp;lt;E&amp;gt; {
	private Node&amp;lt;E&amp;gt; topNode;
    private Final E ERROR = null;
    public LinkedStack() {
    	topNode = null;
    }
    
//스택에 원소 x 삽입하기
public void push(E newItem) {
	topNode = new Node&amp;lt;&amp;gt;(newItem, topNode);
}

//스택에서 원소 삭제하기
public E pop() {
	Node&amp;lt;E&amp;gt; temp = topNode;
    topNode = topNode.next;
    return temp.item;
}

//스택 탑 원소 알려주기
public E top() {
	return topNode.item;
}

//스택이 비었는지 확인하기
public boolean isEmpty() {
	return (topNode ==null);
}

//스택 비우기
public void popAll() {
	topNode = null;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스 '연결 리스트' 상속&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5장에서 만들어 놓은 클래스 LinkedList&amp;lt;E&amp;gt;를 상속받아 재사용한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;public class inheritedStack&amp;lt;E&amp;gt; extends LinkedList&amp;lt;E&amp;gt; implements StackInterface&amp;lt;E&amp;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;1. 문자열 뒤집기&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;pre id=&quot;code_1723091161559&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package stack; 

public class ReverseString {

	public static void main(String[]args) {
    	String input = &quot;Test seq 12345&quot;;
        String t = reverse(input);
        System.out.println(&quot;input string: &quot; + input);
        System.out.println(&quot;Reversed string; &quot; + t);
    }
    
    private static String reverse(String s) {
    	ArrayStack&amp;lt;Character&amp;gt; st = new ArrayStack&amp;lt;&amp;gt;(s.length());
        for(int i = 0; i&amp;lt; s.length(); i++)
        	st.push(s.charAt(i)); // s의 i번 문자. 번호는 0부터 시작
        String output = &quot;&quot;;
        while(!st.isEmpty())
        	output = output + st.pop();
        return output;
    }
}&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;Postfix 계산&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;47* = 4*7&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;472+* = 4*(7+2)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;47*20-=(4*7)-20&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;347*2/+ = 3+((4*7) /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;1. 문자가 숫자 -&amp;gt; push()통해 스택에 삽입&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 문자가 연산자 -&amp;gt; 스택의 맨 위에 있는 수 2개 pop 계산 후 스택에 push&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 공백이면 무시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1723096386503&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package stack;

public class PostfixEval {
	public static void main(String[] args) {
    	String postfix = &quot;700 3 47 + 6*-4/&quot;;
        System.out.println(&quot;input string: &quot; + postfix);
        int answer = evaluate(postfix);
        System.out.println(&quot;Answer: &quot; + answer);
    }
    
    private static int evaluate(String postfix) {
    	int A, B;
        LinkedStack&amp;lt;integer&amp;gt; s = new LinkedStack&amp;lt;&amp;gt;();
        boolean digitPreviously = false;
        for (int = 0; i &amp;lt; postfix.length(); i++) {
        	char ch = postfix.charAt(i);
            if (Character.isDigit(ch)) {
            	if (digitPreviously == true) {
                	int tmp= s.pop();
                    tmp = 10*tmp + (ch-'0');
                    s.push(tmp);
                    } else s.push(ch-'0');
                    digitPreviously = true;
                    } else if (isPperator(ch)) {
                    A = s.pop();
                    B = s.pop();
                    int val = operation (A, B, ch);
                    s.push(val);
                    digitPreviously = false;
                  } else digitPreviously = false;
              }
              return s.pop();
          }
          
          private static int operation (int a, int b, char ch) {
          	int val = 0;
            switch (ch) {
            case'*':
            	val = b*a;
                break; 
            case '/':
            	val = b/a;
                break;
             case '+':
             	val = b + a;
                break;
             case '-':
             	val = b-a;
                break;
                
             }
             return val;
         }
         
         private static boolean isOperator(char ch) {
         	return ch == '+' || ch == '-' || ch == '*' || ch== '/';
         }
 }&lt;/code&gt;&lt;/pre&gt;</description>
      <author>hyunmin43240</author>
      <guid isPermaLink="true">https://hyunmin43240.tistory.com/4</guid>
      <comments>https://hyunmin43240.tistory.com/4#entry4comment</comments>
      <pubDate>Thu, 8 Aug 2024 14:57:53 +0900</pubDate>
    </item>
  </channel>
</rss>