<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Cozy coding</title>
    <link>https://validming99.tistory.com/</link>
    <description>안녕하세요! valid_ming 입니다 :D
저의 성장기록을 담고 있습니다.
</description>
    <language>ko</language>
    <pubDate>Sat, 23 May 2026 22:13:30 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>valid_ming</managingEditor>
    <image>
      <title>Cozy coding</title>
      <url>https://tistory1.daumcdn.net/tistory/3544520/attach/85cd4f657f434fb6b1f61aaf169d1180</url>
      <link>https://validming99.tistory.com</link>
    </image>
    <item>
      <title>[JAVA] 백준 16638 괄호 추가하기 2</title>
      <link>https://validming99.tistory.com/197</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/16638&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/16638&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1637062992678&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;16638번: 괄호 추가하기 2&quot; data-og-description=&quot;첫째 줄에 수식의 길이 N(1 &amp;le; N &amp;le; 19)가 주어진다. 둘째 줄에는 수식이 주어진다. 수식에 포함된 정수는 모두 0보다 크거나 같고, 9보다 작거나 같다. 문자열은 정수로 시작하고, 연산자와 정수가 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/16638&quot; data-og-url=&quot;https://www.acmicpc.net/problem/16638&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/sHNha/hyMnfXdKui/7rZsDPNrOmhsH2AlKtFqcK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/16638&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/16638&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/sHNha/hyMnfXdKui/7rZsDPNrOmhsH2AlKtFqcK/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;16638번: 괄호 추가하기 2&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 수식의 길이 N(1 &amp;le; N &amp;le; 19)가 주어진다. 둘째 줄에는 수식이 주어진다. 수식에 포함된 정수는 모두 0보다 크거나 같고, 9보다 작거나 같다. 문자열은 정수로 시작하고, 연산자와 정수가&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;948&quot; data-origin-height=&quot;612&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9OmZw/btrlbDrhHWk/sV5cJCPzsg32TCurF4vQU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9OmZw/btrlbDrhHWk/sV5cJCPzsg32TCurF4vQU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9OmZw/btrlbDrhHWk/sV5cJCPzsg32TCurF4vQU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9OmZw%2FbtrlbDrhHWk%2FsV5cJCPzsg32TCurF4vQU1%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;948&quot; height=&quot;612&quot; data-origin-width=&quot;948&quot; data-origin-height=&quot;612&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1095&quot; data-origin-height=&quot;623&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boChQ9/btrk6N2jUBF/06UJbjlmHA6WJHxueE9ftk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boChQ9/btrk6N2jUBF/06UJbjlmHA6WJHxueE9ftk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boChQ9/btrk6N2jUBF/06UJbjlmHA6WJHxueE9ftk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboChQ9%2Fbtrk6N2jUBF%2F06UJbjlmHA6WJHxueE9ftk%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;1095&quot; height=&quot;623&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1095&quot; data-origin-height=&quot;623&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;괄호 추가하기 문제와 다른 것은 연산자들의 우선순위가 생겼다는 점!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 문제에서는 바로바로 값을 구해서 넘겨주었지만,&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;주어지는 식에 괄호를 추가하는 식의 String 연산을 진행하기 때문에 StringBuilder를 이용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;살짝 후위표기법으로 변환하는 코드가 마음에 안 들긴 하지만.. 구현 문제이니 그냥 놔뒀다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비트를 이용해서 풀이하는 코드도 봤는데 아직까지 비트 관련 연산자가 어렵다 ㅠ&lt;/p&gt;
&lt;pre id=&quot;code_1637063318261&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        N = Integer.parseInt(sc.nextLine());
        exp = sc.nextLine().toCharArray();
        op = N/2;

        if(N==1) System.out.println(exp[0]);
        else{
            solve(0, &quot;&quot;);
            System.out.println(ans);
        }
    }

    static int N, op, ans = Integer.MIN_VALUE;
    static char[] exp;

    public static void solve(int n, String str){
        if(n&amp;gt;=op){
            char c = str.charAt(str.length()-1);
            if(c!=')') str += exp[N-1];

            int val = calc(str.toCharArray());
            if(ans &amp;lt; val) ans = val;

            return;
        }

        //선택 안한 경우
        StringBuilder tmp1 = new StringBuilder(str);
        tmp1.append(exp[2*n]).append(exp[2*n+1]);
        solve(n+1, tmp1.toString());

        //선택한 경우
        StringBuilder tmp2 = new StringBuilder(str);
        tmp2.append('(');
        tmp2.append(exp[2*n]).append(exp[2*n+1]).append(exp[2*n+2]);
        tmp2.append(')');
        if(n+1&amp;lt;op) tmp2.append(exp[2*n+3]);
        solve(n+2, tmp2.toString());
    }

    public static int calc(char[] str){
        Stack&amp;lt;Character&amp;gt; op = new Stack&amp;lt;&amp;gt;();
        Stack&amp;lt;Integer&amp;gt; num = new Stack&amp;lt;&amp;gt;();

        loop : for(int i=0;i&amp;lt;str.length;i++){

            if('0'&amp;lt;= str[i] &amp;amp;&amp;amp; str[i]&amp;lt;='9'){
                num.push(str[i]-'0');
            }
            else {
                if(str[i]=='(') op.push(str[i]);
                else if(str[i]==')'){
                    while(op.peek()!='('){
                        int n1 = num.pop();
                        int n2 = num.pop();
                        num.push(calc(n2, n1, op.pop()));
                    }
                    op.pop();
                } else {
                    boolean in = false;

                    while (!in) {
                        if(op.size()==0){
                            op.push(str[i]);
                            continue loop;
                        }
                        char c = op.peek();
                        if (c == '(' || (c != '*' &amp;amp;&amp;amp; str[i] == '*')){
                            op.push(str[i]);
                            in = true;
                        }
                        else {
                            int n1 = num.pop();
                            int n2 = num.pop();
                            num.push(calc(n2, n1, op.pop()));
                        }
                    }
                }
            }
        }

        while(op.size()&amp;gt;0){
            int n1 = num.pop();
            int n2 = num.pop();
            num.push(calc(n2, n1, op.pop()));
        }

        return num.pop();
    }

    public static int calc(int n1, int n2, char op){
        switch(op){
            case '+':
                return n1+n2;
            case '-':
                return n1-n2;
            case '*':
                return n1*n2;
            default: return 0;
        }
    }

}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>구현</category>
      <category>백준 16638 괄호 추가하기 2</category>
      <category>자바</category>
      <author>valid_ming</author>
      <guid isPermaLink="true">https://validming99.tistory.com/197</guid>
      <comments>https://validming99.tistory.com/197#entry197comment</comments>
      <pubDate>Tue, 16 Nov 2021 20:48:53 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA] 백준 3020 개똥벌레</title>
      <link>https://validming99.tistory.com/196</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/3020&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/3020&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1636864669811&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;3020번: 개똥벌레&quot; data-og-description=&quot;개똥벌레 한 마리가 장애물(석순과 종유석)로 가득찬 동굴에 들어갔다. 동굴의 길이는 N미터이고, 높이는 H미터이다. (N은 짝수) 첫 번째 장애물은 항상 석순이고, 그 다음에는 종유석과 석순이 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/3020&quot; data-og-url=&quot;https://www.acmicpc.net/problem/3020&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cDlx9L/hyMlgHxnUj/hH3q77hMcpP1lFC3Qz8Ed0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/3020&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/3020&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cDlx9L/hyMlgHxnUj/hH3q77hMcpP1lFC3Qz8Ed0/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;3020번: 개똥벌레&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;개똥벌레 한 마리가 장애물(석순과 종유석)로 가득찬 동굴에 들어갔다. 동굴의 길이는 N미터이고, 높이는 H미터이다. (N은 짝수) 첫 번째 장애물은 항상 석순이고, 그 다음에는 종유석과 석순이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;949&quot; data-origin-height=&quot;887&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRQb7W/btrkOkxZo72/MNsYcbfavUStixEWSKC8EK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRQb7W/btrkOkxZo72/MNsYcbfavUStixEWSKC8EK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRQb7W/btrkOkxZo72/MNsYcbfavUStixEWSKC8EK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcRQb7W%2FbtrkOkxZo72%2FMNsYcbfavUStixEWSKC8EK%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;949&quot; height=&quot;887&quot; data-origin-width=&quot;949&quot; data-origin-height=&quot;887&quot;/&gt;&lt;/span&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;처음에는 단순히 이중 포문을 생각했고, 시간초과가 날 것 같아서 어떻게 풀어야 할까 고민을 했다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;누적합&lt;/b&gt;을 이용해야 하는 문제임을 알았음에도! (문제 유형 훔쳐봄) 어떻게 이용해야 할지 감이 오지 않았다...&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국,, &lt;a href=&quot;https://machine-geon.tistory.com/155&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;블로그 참고&lt;/a&gt; (요즘 혼자 해결하는 문제가 많이 적어진 것 같다 흑흑)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 처음 생각한 이중 포문은 높이 크기의 배열을 만들어서 높이가 h인 장애물이 들어온다 =&amp;gt; 1~h 까지 반복문을 돌며 해당하는 배열의 값을 1씩 증가 시킨다. 하여 h에 해당하는 값을 찾는다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;누적합을 이용하게 되면, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;높이가 h인 장애물에 대한 접근을 전체 장애물수에서 h-1 이하의 장애물의 개수를 빼어서 풀이!! (석순과 종유석의 배열을 다르게 한다)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 &lt;u&gt;&lt;b&gt;h 이하의 장애물에 수&lt;/b&gt;&lt;/u&gt;에 대한 정보가 필요함!&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bot_sum[i]: i이하의 &lt;b&gt;석순&lt;/b&gt;의 수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bot_sum[h]: h이하의 &lt;b&gt;석순&lt;/b&gt;의 수 == 전체 &lt;b&gt;석순&lt;/b&gt;의 개수&lt;/p&gt;
&lt;pre id=&quot;code_1636865157147&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;crush = bot_sum[H] - bot_sum[h-1] //h로 지나갔을 때 충돌하게 될 석순의 수&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 bot_sum[i]는 어떻게 구할까? &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;이때 누적합을 이용!&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;i-1 길이 이하의 석순의 수에서 i 길이의 석순을 합하면 i 이하의 석순의 수가 나온다&lt;/p&gt;
&lt;pre id=&quot;code_1636865309752&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;bot_sum[i] = bot_sum[i-1] + bot[i];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반대의 종유석은 전체 개수에서 H-i 이하의 종유석의 수를 빼주면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1636865465585&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;crush += bot_sum[H] - top_sum[H-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;&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_1636865390894&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.io.*;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        H = Integer.parseInt(st.nextToken());
        bot = new int[H+1];
        top = new int[H+1];
        min = N; cnt = 0;

        for(int i=0;i&amp;lt;N/2;i++){
            bot[Integer.parseInt(br.readLine())]++;
            top[Integer.parseInt(br.readLine())]++;
        }

        process();

        System.out.println(min+&quot; &quot;+cnt);

    }

    static int N, H;
    static int[] bot, top;
    static int min, cnt;

    public static void process(){
        int[] bot_sum = new int[H+1]; // 높이가 h 이하인 석순의 수
        int[] top_sum = new int[H+1];

        for(int i=1;i&amp;lt;=H;i++){
            bot_sum[i] = bot_sum[i-1] + bot[i];
            top_sum[i] = top_sum[i-1] + top[i];
        }

        for(int i=1;i&amp;lt;H+1;i++){
            int crush = 0;

            crush += bot_sum[H] - bot_sum[i-1];
            crush += bot_sum[H] - top_sum[H-i];

            if(min&amp;gt;crush){
                cnt = 1;
                min = crush;
            } else if(min==crush){
                cnt++;
            }
        }
    }

}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘 공부/문제 풀이</category>
      <category>누적합</category>
      <category>백준 3020 개똥벌레</category>
      <category>자바</category>
      <author>valid_ming</author>
      <guid isPermaLink="true">https://validming99.tistory.com/196</guid>
      <comments>https://validming99.tistory.com/196#entry196comment</comments>
      <pubDate>Sun, 14 Nov 2021 13:51:10 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA] 백준 1941 소문난 칠공주</title>
      <link>https://validming99.tistory.com/195</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1941&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/1941&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1636723652692&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;1941번: 소문난 칠공주&quot; data-og-description=&quot;총 25명의 여학생들로 이루어진 여학생반은 5&amp;times;5의 정사각형 격자 형태로 자리가 배치되었고, 얼마 지나지 않아 이다솜과 임도연이라는 두 학생이 두각을 나타내며 다른 학생들을 휘어잡기 시작&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1941&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1941&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fjznC/hyMksBLIHx/62BHvZBxiNC0D3skIbpXc0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1941&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1941&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fjznC/hyMksBLIHx/62BHvZBxiNC0D3skIbpXc0/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;1941번: 소문난 칠공주&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;총 25명의 여학생들로 이루어진 여학생반은 5&amp;times;5의 정사각형 격자 형태로 자리가 배치되었고, 얼마 지나지 않아 이다솜과 임도연이라는 두 학생이 두각을 나타내며 다른 학생들을 휘어잡기 시작&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;941&quot; data-origin-height=&quot;649&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vrmCo/btrkINGYjs2/KLmr2EExDZIx2sHe6VhK61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vrmCo/btrkINGYjs2/KLmr2EExDZIx2sHe6VhK61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vrmCo/btrkINGYjs2/KLmr2EExDZIx2sHe6VhK61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvrmCo%2FbtrkINGYjs2%2FKLmr2EExDZIx2sHe6VhK61%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;941&quot; height=&quot;649&quot; data-origin-width=&quot;941&quot; data-origin-height=&quot;649&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cf12hm/btrkHEqd1m0/Zdkgl1KAxKVawYXaQSoap1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cf12hm/btrkHEqd1m0/Zdkgl1KAxKVawYXaQSoap1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cf12hm/btrkHEqd1m0/Zdkgl1KAxKVawYXaQSoap1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcf12hm%2FbtrkHEqd1m0%2FZdkgl1KAxKVawYXaQSoap1%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; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>알고리즘 공부/문제 풀이</category>
      <category>BFS</category>
      <category>백준 1941 소문난 칠공주</category>
      <category>자바</category>
      <author>valid_ming</author>
      <guid isPermaLink="true">https://validming99.tistory.com/195</guid>
      <comments>https://validming99.tistory.com/195#entry195comment</comments>
      <pubDate>Fri, 12 Nov 2021 22:29:50 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA] 백준 2213 트리의 독립집합</title>
      <link>https://validming99.tistory.com/194</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2213&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/2213&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1636460442361&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;2213번: 트리의 독립집합&quot; data-og-description=&quot;첫째 줄에 트리의 정점의 수 n이 주어진다. n은 10,000이하인 양의 정수이다. 1부터 n사이의 정수가 트리의 정점이라고 가정한다. 둘째 줄에는 n개의 정수 w1, w2, ..., wn이 주어지는데, wi는 정점 i의 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2213&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2213&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cEgZ6J/hyMiizmzV7/13Xo06Zx14vQJKwnV5Daxk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2213&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2213&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cEgZ6J/hyMiizmzV7/13Xo06Zx14vQJKwnV5Daxk/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;2213번: 트리의 독립집합&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 트리의 정점의 수 n이 주어진다. n은 10,000이하인 양의 정수이다. 1부터 n사이의 정수가 트리의 정점이라고 가정한다. 둘째 줄에는 n개의 정수 w1, w2, ..., wn이 주어지는데, wi는 정점 i의&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;782&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dvvgBH/btrkolj5akN/8HmR2Apqw252EwQxridDK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dvvgBH/btrkolj5akN/8HmR2Apqw252EwQxridDK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dvvgBH/btrkolj5akN/8HmR2Apqw252EwQxridDK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdvvgBH%2Fbtrkolj5akN%2F8HmR2Apqw252EwQxridDK1%2Fimg.png&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;782&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1090&quot; data-origin-height=&quot;635&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cYIFQI/btrkqH7vOgO/kgK3LBAaCRIUMqxramckBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cYIFQI/btrkqH7vOgO/kgK3LBAaCRIUMqxramckBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cYIFQI/btrkqH7vOgO/kgK3LBAaCRIUMqxramckBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcYIFQI%2FbtrkqH7vOgO%2FkgK3LBAaCRIUMqxramckBK%2Fimg.png&quot; data-origin-width=&quot;1090&quot; data-origin-height=&quot;635&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 어려웠다.. 결국 &lt;a href=&quot;https://loosie.tistory.com/223&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;블로그의 도움&lt;/a&gt;을 받아 해결하였다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 트리의 구조 -&amp;gt; 어느 정점이든 루트가 될 수 있다 -&amp;gt; 편의상 1번 정점을 루트로 생각하고 1번 노드부터 dfs 탐색을 진행한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 현재 접근한 노드를 포함할 때/포함하지 않을 때의 최대 독립 집합의 가중치를 구해본다 =&amp;gt; &lt;span style=&quot;background-color: #dddddd;&quot;&gt;memo[N][2]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 현재 노드를 집합에 포함한다면, 인접한 다음 노드는 포함되지 않아야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 현재 노드를 집합에 포함하지 않는다면, 인접한 다음 노드를 포함되도 되고, 포함하지 않아도 된다 =&amp;gt; 둘 중 더 큰 값을 선택한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이렇게 dfs를 통해 memo 배열을 모두 채우고, memo[1][0]과 memo[1][1] 중의 큰값을 선택한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이제 다시 루트 노드에서 최대 독립 집합을 구성하는 노드들을 찾을 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;trace 메서드&lt;/span&gt;를 호출한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;background-color: #dddddd;&quot;&gt;trace(int cur, int inc)&lt;/span&gt;: 현재 접근한 노드 cur, 접근한 노드를 포함하는지(1), 포함하지 않는지(0)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 포함한다면 정답 배열에 넣고, 인접한 노드들은 포함하지 않는 버전으로 호출 =&amp;gt; trace(next, 0)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 포함하지 않는다면, &lt;b&gt;이전에 구했던 memo&lt;/b&gt;를 이용하여 더 큰 값을 가진 경우로 호출 =&amp;gt; trace(next, ?)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1636461144511&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.io.*;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());
        W = new int[N+1];
        visit = new boolean[N+1];
        memo = new int[N+1][2]; //i 번째 노드를 선택한 경우와 선택하지 않은 경우
        tree = new ArrayList[N+1];

        StringTokenizer st = new StringTokenizer(br.readLine());
        for(int i=1;i&amp;lt;=N;i++){
            tree[i] = new ArrayList&amp;lt;&amp;gt;();
            W[i] = Integer.parseInt(st.nextToken());
        }

        for(int i=1;i&amp;lt;N;i++){
            st = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            tree[a].add(b);
            tree[b].add(a);
        }

        dfs(1);

        visit = new boolean[N+1];
        if(memo[1][0] &amp;gt; memo[1][1]){
            System.out.println(memo[1][0]);
            trace(1, 0);
        } else{
            System.out.println(memo[1][1]);
            trace(1, 1);
        }

        Collections.sort(res);
        for(int num : res ) {
            System.out.print(num+&quot; &quot;);
        }

    }

    static int N;
    static int[] W;
    static boolean[] visit;
    static int[][] memo;
    static ArrayList&amp;lt;Integer&amp;gt;[] tree;
    static ArrayList&amp;lt;Integer&amp;gt; res = new ArrayList&amp;lt;&amp;gt;();

    public static void dfs(int cur){
        int child_size = tree[cur].size();

        memo[cur][0] = 0;
        memo[cur][1] = W[cur];
        visit[cur] = true;

        for(int i=0;i&amp;lt;child_size;i++){
            int next = tree[cur].get(i);
            if(!visit[next]){
                dfs(next);

                memo[cur][0] += Math.max(memo[next][0], memo[next][1]);
                memo[cur][1] += memo[next][0];
            }
        }
    }

    public static void trace(int cur, int inc){
        visit[cur] = true;

        if(inc==1){
            res.add(cur);
            for(int next:tree[cur]){
                if(!visit[next]) trace(next, 0);
            }
        } else {
            for(int next:tree[cur]){
                if(!visit[next]){
                    if(memo[next][1] &amp;gt; memo[next][0]){
                        trace(next, 1);
                    } else trace(next, 0);
                }
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘 공부/문제 풀이</category>
      <category>dfs</category>
      <category>메모아이제이션</category>
      <category>백준 2213 트리의 독립집합</category>
      <category>자바</category>
      <author>valid_ming</author>
      <guid isPermaLink="true">https://validming99.tistory.com/194</guid>
      <comments>https://validming99.tistory.com/194#entry194comment</comments>
      <pubDate>Tue, 9 Nov 2021 21:32:29 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA] 백준 16637 괄호 추가하기</title>
      <link>https://validming99.tistory.com/193</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/16637&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/16637&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1636122533412&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;16637번: 괄호 추가하기&quot; data-og-description=&quot;길이가 N인 수식이 있다. 수식은 0보다 크거나 같고, 9보다 작거나 같은 정수와 연산자(+, -,&amp;nbsp;&amp;times;)로 이루어져 있다. 연산자 우선순위는 모두 동일하기 때문에, 수식을 계산할 때는 왼쪽에서부터 순&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/16637&quot; data-og-url=&quot;https://www.acmicpc.net/problem/16637&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bXQxYV/hyMfk4H4dl/bg6MRr8cfV7cW5HMs8wkQK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/16637&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/16637&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bXQxYV/hyMfk4H4dl/bg6MRr8cfV7cW5HMs8wkQK/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;16637번: 괄호 추가하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;길이가 N인 수식이 있다. 수식은 0보다 크거나 같고, 9보다 작거나 같은 정수와 연산자(+, -,&amp;nbsp;&amp;times;)로 이루어져 있다. 연산자 우선순위는 모두 동일하기 때문에, 수식을 계산할 때는 왼쪽에서부터 순&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;586&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YOztW/btrj2hbQxc0/YKjCu8uoockN7ANXP1MNTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YOztW/btrj2hbQxc0/YKjCu8uoockN7ANXP1MNTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YOztW/btrj2hbQxc0/YKjCu8uoockN7ANXP1MNTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYOztW%2Fbtrj2hbQxc0%2FYKjCu8uoockN7ANXP1MNTK%2Fimg.png&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;586&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1098&quot; data-origin-height=&quot;1158&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSreI0/btrj4mJMw1f/aDmk4Oh9Vm9WCVj4ndPUQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSreI0/btrj4mJMw1f/aDmk4Oh9Vm9WCVj4ndPUQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSreI0/btrj4mJMw1f/aDmk4Oh9Vm9WCVj4ndPUQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSreI0%2Fbtrj4mJMw1f%2FaDmk4Oh9Vm9WCVj4ndPUQK%2Fimg.png&quot; data-origin-width=&quot;1098&quot; data-origin-height=&quot;1158&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1636122710769&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        N = Integer.parseInt(sc.nextLine());
        str = sc.nextLine().toCharArray();
        op = N/2;

        choice(0, str[0]-'0');
        System.out.println(ans);
    }

    static int N, op;
    static char[] str;
    static int ans = Integer.MIN_VALUE;

    public static void choice(int idx, int val){
//        System.out.println(idx+&quot; &quot;+val);
        boolean leftOne = false;
        if(idx&amp;gt;=N-1){
            if(val &amp;gt; ans) ans = val;
            return;
        }
        if(idx&amp;gt;=N-3) leftOne = true;

        //선택안한경우
        int res1 = calc(val, str[idx+2]-'0', str[idx+1]);
        choice(idx+2, res1);
        //선택한 경우
        if(!leftOne){
            int temp = calc(str[idx+2]-'0', str[idx+4]-'0', str[idx+3]);
            int res2 = calc(val, temp, str[idx+1]);
            choice(idx+2*2, res2);
        }
    }

    public static int calc(int n1, int n2, char op){
        switch(op){
            case '+':
                return n1+n2;
            case '-':
                return n1-n2;
            case '*':
                return n1*n2;
            default: return 0;
        }
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘 공부/문제 풀이</category>
      <category>백준 16637 괄호 추가하기</category>
      <category>완전탐색</category>
      <category>자바</category>
      <author>valid_ming</author>
      <guid isPermaLink="true">https://validming99.tistory.com/193</guid>
      <comments>https://validming99.tistory.com/193#entry193comment</comments>
      <pubDate>Fri, 5 Nov 2021 23:34:37 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA] 백준 2473 세 용액</title>
      <link>https://validming99.tistory.com/192</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2473&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/2473&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1636032718904&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;2473번: 세 용액&quot; data-og-description=&quot;첫째 줄에는 전체 용액의 수 N이 입력된다. N은 3 이상 5,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2473&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2473&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cBVpc8/hyMe9BqmIA/8lqgNUpbKEGKbJEfohXTlK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2473&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2473&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cBVpc8/hyMe9BqmIA/8lqgNUpbKEGKbJEfohXTlK/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;2473번: 세 용액&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에는 전체 용액의 수 N이 입력된다. N은 3 이상 5,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;869&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ouaic/btrjWnWJKpw/YFsnHQWBi5sSx2p2SddYd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ouaic/btrjWnWJKpw/YFsnHQWBi5sSx2p2SddYd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ouaic/btrjWnWJKpw/YFsnHQWBi5sSx2p2SddYd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fouaic%2FbtrjWnWJKpw%2FYFsnHQWBi5sSx2p2SddYd1%2Fimg.png&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;869&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1093&quot; data-origin-height=&quot;590&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNPeDp/btrjWnoUygX/7NrBtffsaFMRA3x9k9OIrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNPeDp/btrjWnoUygX/7NrBtffsaFMRA3x9k9OIrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNPeDp/btrjWnoUygX/7NrBtffsaFMRA3x9k9OIrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNPeDp%2FbtrjWnoUygX%2F7NrBtffsaFMRA3x9k9OIrk%2Fimg.png&quot; data-origin-width=&quot;1093&quot; data-origin-height=&quot;590&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 처음에는 조합이나 백트래킹을 떠올렸는데 5000이라는 범위가 시간초과가 날 것 같았다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 투포인터는 O(N)으로 두 가지를 고를 수 있다는 것을 알고, 한가지 용액과 나머지 두 용액을 고르는 것으로 문제를 해결하였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 처음에는 투 포인터를 전체 범위에 대해 진행하였지만, i+1 ~ N-1에 대해서만 두 용액을 찾으면 된다는 것을 뒤늦게 깨달았다. 왜냐하면 이미 한 용액을 고르는 순간에 그 한 용액을 포함한 모든 조합을 살펴본 것이고, 이후에는 그 한 용액을 제외하고 조합해도 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 입력 범위는 int 범위이기 때문에 int로 값을 받아왔는데, 세 값을 더해주는 연산에서 int 범위가 벗어나 계속 틀렸습니다가 나는 것 같아 입력 배열 타입을 long으로 바꿔서 풀이했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 투 포인터를 연습하기에 좋은 문제였다.&lt;/p&gt;
&lt;pre id=&quot;code_1636033015796&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = Integer.parseInt(sc.nextLine());
        long[] arr = new long[N];
        StringTokenizer st = new StringTokenizer(sc.nextLine());
        for(int i=0;i&amp;lt;N;i++){
            arr[i] = Long.valueOf(st.nextToken());
        }

        Arrays.sort(arr);
        long abs = 3000000000L;
        long[] ans = new long[3];
        for(int i=0;i&amp;lt;N;i++){
            long ch = arr[i];
            int left = i+1;
            int right = N-1;

            while(left&amp;lt;right){
                long val = arr[left] + arr[right] + ch;
                if(Math.abs(val) &amp;lt; abs){
                    abs = Math.abs(val);
                    ans[0] = ch;
                    ans[1] = arr[left];
                    ans[2] = arr[right];
                }
                if(val &amp;gt; 0) right--;
                else if(val&amp;lt;=0) left++;
            }
        }

        System.out.println(ans[0]+&quot; &quot;+ans[1]+&quot; &quot;+ans[2]);
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘 공부/문제 풀이</category>
      <category>백준 2473 세 용액</category>
      <category>자바</category>
      <category>투포인터</category>
      <author>valid_ming</author>
      <guid isPermaLink="true">https://validming99.tistory.com/192</guid>
      <comments>https://validming99.tistory.com/192#entry192comment</comments>
      <pubDate>Thu, 4 Nov 2021 22:40:00 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA] 백준 16168 퍼레이드</title>
      <link>https://validming99.tistory.com/191</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/16168&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/16168&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1635815216327&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;16168번: 퍼레이드&quot; data-og-description=&quot;첫 번째 줄에 지점의 개수 V, 연결 구간의 개수 E가&amp;nbsp;주어진다. (1 &amp;le;&amp;nbsp;V &amp;le;&amp;nbsp;E &amp;le;&amp;nbsp;3000) 이후 E개의 줄에 걸쳐 각 연결 구간이 연결하는 두 지점의 번호 Va, Vb가 공백을 사이에 두고 주어진다. (1 &amp;le;&amp;nbsp;Va,&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/16168&quot; data-og-url=&quot;https://www.acmicpc.net/problem/16168&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/boOLry/hyMaY9KnNN/VSr0HYGf8Arg0jKOldiztk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/16168&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/16168&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/boOLry/hyMaY9KnNN/VSr0HYGf8Arg0jKOldiztk/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;16168번: 퍼레이드&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫 번째 줄에 지점의 개수 V, 연결 구간의 개수 E가&amp;nbsp;주어진다. (1 &amp;le;&amp;nbsp;V &amp;le;&amp;nbsp;E &amp;le;&amp;nbsp;3000) 이후 E개의 줄에 걸쳐 각 연결 구간이 연결하는 두 지점의 번호 Va, Vb가 공백을 사이에 두고 주어진다. (1 &amp;le;&amp;nbsp;Va,&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;942&quot; data-origin-height=&quot;530&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kNzhS/btrjAd83XQc/RTvTbTwnfJfLE1mnGxzDQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kNzhS/btrjAd83XQc/RTvTbTwnfJfLE1mnGxzDQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kNzhS/btrjAd83XQc/RTvTbTwnfJfLE1mnGxzDQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkNzhS%2FbtrjAd83XQc%2FRTvTbTwnfJfLE1mnGxzDQ0%2Fimg.png&quot; data-origin-width=&quot;942&quot; data-origin-height=&quot;530&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1096&quot; data-origin-height=&quot;1215&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dtrZiH/btrjDfY8jpw/jxYKOpUng2KYfywQzsQ7VK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dtrZiH/btrjDfY8jpw/jxYKOpUng2KYfywQzsQ7VK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dtrZiH/btrjDfY8jpw/jxYKOpUng2KYfywQzsQ7VK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdtrZiH%2FbtrjDfY8jpw%2FjxYKOpUng2KYfywQzsQ7VK%2Fimg.png&quot; data-origin-width=&quot;1096&quot; data-origin-height=&quot;1215&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1635815269575&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.io.*;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        V = Integer.parseInt(st.nextToken());
        E = Integer.parseInt(st.nextToken());
        graph = new ArrayList[V+1];
        visit = new boolean[V+1];

        for(int i=1;i&amp;lt;=V;i++){
            graph[i] = new ArrayList&amp;lt;&amp;gt;();
        }

        int[] degrees = new int[V+1];
        for(int i=0;i&amp;lt;E;i++){
            st = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            graph[a].add(b);
            graph[b].add(a);
            degrees[a]++;
            degrees[b]++;
        }

        int cnt = 0;
        for(int i=1;i&amp;lt;=V;i++){
            if(!visit[i]){
                dfs(i);
                cnt ++;
            }
        }

        if(cnt!=1) System.out.println(&quot;NO&quot;);
        else {
            int odd = 0;
            for(int i=1;i&amp;lt;=V;i++){
                if(degrees[i]%2==1) odd++;
            }

            if(odd==0 || odd==2) System.out.println(&quot;YES&quot;);
            else System.out.println(&quot;NO&quot;);
        }
    }

    static ArrayList&amp;lt;Integer&amp;gt;[] graph;
    static boolean[] visit;
    static int V, E;

    public static void dfs(int i){
        if(visit[i]) return;
        visit[i] = true;

        for(int j: graph[i]){
            dfs(j);
        }
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘 공부/문제 풀이</category>
      <category>dfs</category>
      <category>백준 16168 퍼레이드</category>
      <category>오일러 경로</category>
      <category>오일러 회로</category>
      <category>자바</category>
      <author>valid_ming</author>
      <guid isPermaLink="true">https://validming99.tistory.com/191</guid>
      <comments>https://validming99.tistory.com/191#entry191comment</comments>
      <pubDate>Tue, 2 Nov 2021 10:08:02 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA] 백준 1944 복제 로봇</title>
      <link>https://validming99.tistory.com/190</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1944&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/1944&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1635654188947&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;1944번: 복제 로봇&quot; data-og-description=&quot;첫째 줄에 미로의 크기 N(4 &amp;le; N &amp;le; 50)과 열쇠의 개수 M(1 &amp;le; M &amp;le; 250) 이 공백을 사이에 두고 주어진다. 그리고 둘째 줄부터 N+1째 줄까지 미로의 정보가 주어진다. 미로는 1과 0, 그리고 S와 K로 주어&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1944&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1944&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cQOJbc/hyL9PdJgX8/4IuZwZk7AU2r5TUC5FkNuK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1944&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1944&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cQOJbc/hyL9PdJgX8/4IuZwZk7AU2r5TUC5FkNuK/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;1944번: 복제 로봇&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 미로의 크기 N(4 &amp;le; N &amp;le; 50)과 열쇠의 개수 M(1 &amp;le; M &amp;le; 250) 이 공백을 사이에 두고 주어진다. 그리고 둘째 줄부터 N+1째 줄까지 미로의 정보가 주어진다. 미로는 1과 0, 그리고 S와 K로 주어&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;944&quot; data-origin-height=&quot;649&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/raFwZ/btrjlQMUmAU/b5OaSJrrjEIkjzcrlbaGS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/raFwZ/btrjlQMUmAU/b5OaSJrrjEIkjzcrlbaGS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/raFwZ/btrjlQMUmAU/b5OaSJrrjEIkjzcrlbaGS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FraFwZ%2FbtrjlQMUmAU%2Fb5OaSJrrjEIkjzcrlbaGS1%2Fimg.png&quot; data-origin-width=&quot;944&quot; data-origin-height=&quot;649&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1098&quot; data-origin-height=&quot;927&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGZPwb/btrjueyKlBo/gb0ezxdoPz4M1lCmAPNyO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGZPwb/btrjueyKlBo/gb0ezxdoPz4M1lCmAPNyO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGZPwb/btrjueyKlBo/gb0ezxdoPz4M1lCmAPNyO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGZPwb%2FbtrjueyKlBo%2Fgb0ezxdoPz4M1lCmAPNyO0%2Fimg.png&quot; data-origin-width=&quot;1098&quot; data-origin-height=&quot;927&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1635654237056&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.io.*;

public class Main {

    public static class Node implements Comparable&amp;lt;Node&amp;gt;{
        int row, col;
        int dist;

        public Node(int r, int c, int d){
            row = r; col = c;
            dist = d;
        }

        public int compareTo(Node o){
            return dist - o.dist;
        }
    }

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());
        map = new char[N][N];
        include = new boolean[N][N];
        int row = 0, col = 0;
        left = M;

        for(int i=0;i&amp;lt;N;i++){
            String str = br.readLine();
            for(int j=0;j&amp;lt;N;j++){
                char c = str.charAt(j);
                map[i][j] = c;
                if(c=='S'){
                    row = i;
                    col = j;
                }
            }
        }

        boolean find = true;
        int sum = 0;
        while(left&amp;gt;0){
            if(find) findDist(row, col);
            Node node = pq.poll();
            row = node.row;
            col = node.col;

            if(include[row][col]){
                find = false;
                continue;
            }
            include[row][col] = true;
            left--;
            sum += node.dist;
            find = true;
        }

        System.out.println(sum);
    }

    static PriorityQueue&amp;lt;Node&amp;gt; pq = new PriorityQueue&amp;lt;&amp;gt;();
    static int N, M, left;
    static char[][] map;
    static boolean[][] include;
    static int[][] d = {{-1, 1, 0, 0}, {0, 0, -1, 1}};

    public static void findDist(int r, int c){
        Queue&amp;lt;Node&amp;gt; q = new LinkedList&amp;lt;&amp;gt;();
        boolean[][] visit = new boolean[N][N];
        q.add(new Node(r, c, 0));
        visit[r][c] = true;
        int cnt = 0;

        while(!q.isEmpty()){
            Node cur = q.poll();

            for(int i=0;i&amp;lt;4;i++){
                int nr = cur.row + d[0][i];
                int nc = cur.col + d[1][i];

                if(!visit[nr][nc]){
                    if(map[nr][nc]!='1'){
                        q.add(new Node(nr, nc, cur.dist+1));
                        visit[nr][nc] = true;
                    }
                    if(map[nr][nc]=='K' &amp;amp;&amp;amp; !include[nr][nc]){
                        pq.add(new Node(nr, nc, cur.dist+1));
                        cnt++;
                        if(cnt==left) return;
                    }
                }
            }
        }

        if(cnt&amp;lt;left){
            System.out.println(-1);
            System.exit(0);
        }
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘 공부/문제 풀이</category>
      <category>BFS</category>
      <category>백준 1944 복제 로봇</category>
      <category>자바</category>
      <category>최소 스패닝 트리</category>
      <author>valid_ming</author>
      <guid isPermaLink="true">https://validming99.tistory.com/190</guid>
      <comments>https://validming99.tistory.com/190#entry190comment</comments>
      <pubDate>Sun, 31 Oct 2021 13:24:14 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA] 백준 15684 사다리 조작</title>
      <link>https://validming99.tistory.com/189</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/15684&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/15684&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1635304015618&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;15684번: 사다리 조작&quot; data-og-description=&quot;사다리 게임은 N개의 세로선과 M개의 가로선으로 이루어져 있다. 인접한 세로선 사이에는 가로선을 놓을 수 있는데, 각각의 세로선마다 가로선을 놓을 수 있는 위치의 개수는 H이고, 모든 세로선&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/15684&quot; data-og-url=&quot;https://www.acmicpc.net/problem/15684&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cNH6FH/hyL7eKK2K1/QgNXVP7IUDMNanXwlPiy40/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/15684&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/15684&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cNH6FH/hyL7eKK2K1/QgNXVP7IUDMNanXwlPiy40/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;15684번: 사다리 조작&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;사다리 게임은 N개의 세로선과 M개의 가로선으로 이루어져 있다. 인접한 세로선 사이에는 가로선을 놓을 수 있는데, 각각의 세로선마다 가로선을 놓을 수 있는 위치의 개수는 H이고, 모든 세로선&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;947&quot; data-origin-height=&quot;1020&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8mVLy/btriUFywmmM/Dy4WAGAhtfjsLcoU1REQkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8mVLy/btriUFywmmM/Dy4WAGAhtfjsLcoU1REQkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8mVLy/btriUFywmmM/Dy4WAGAhtfjsLcoU1REQkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8mVLy%2FbtriUFywmmM%2FDy4WAGAhtfjsLcoU1REQkk%2Fimg.png&quot; data-origin-width=&quot;947&quot; data-origin-height=&quot;1020&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;958&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJ5XA0/btriYIubnmJ/9BAGiXdJOwHkiAqsUii3OK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJ5XA0/btriYIubnmJ/9BAGiXdJOwHkiAqsUii3OK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJ5XA0/btriYIubnmJ/9BAGiXdJOwHkiAqsUii3OK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJ5XA0%2FbtriYIubnmJ%2F9BAGiXdJOwHkiAqsUii3OK%2Fimg.png&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;958&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1094&quot; data-origin-height=&quot;896&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfNVR8/btri0bbAeju/TX6IpogKqb7eKoJdrdDSy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfNVR8/btri0bbAeju/TX6IpogKqb7eKoJdrdDSy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfNVR8/btri0bbAeju/TX6IpogKqb7eKoJdrdDSy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfNVR8%2Fbtri0bbAeju%2FTX6IpogKqb7eKoJdrdDSy1%2Fimg.png&quot; data-origin-width=&quot;1094&quot; data-origin-height=&quot;896&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;풀이 후기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 인덱스 처리가 힘들었다. 원래는 사다리 크기에 딱 맞는 배열을 생성하여 범위 체크해가며 풀이했는데 코드가 복잡해져서 좌우로 마진을 한칸씩 주고, 범위 체크 없이 좌우에 사다리가 있는지 없는지를 확인했다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 나는 boolean 배열로 해당 칸에 사다리가 있다 없다를 체크했는데, 다른 코드를 보니 오른쪽으로 뻗은 사다리는 1로 왼쪽으로 뻗은 사다리는 -1로 한 코드가 많았다. 더 직관적일 것 같다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 사다리를 2차원 배열로 생각하는게 힘들었다..&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1635304227382&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.io.*;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());
        H = Integer.parseInt(st.nextToken());
        map = new boolean[H+1][N+1];
        while(M--&amp;gt;0){
            st = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            map[a][b] = true;
        }

        for(int i=0;i&amp;lt;=3;i++){
            comb(0, 0, i);
        }

        System.out.println(-1);
    }

    static int N,M,H;
    static boolean[][] map;

    public static void comb(int idx, int cnt, int n){
        if(cnt==n){
            if(start()){
                System.out.println(n);
                System.exit(0);
            }
            return;
        }

        for (int i = idx; i &amp;lt; (N - 1) * H; i++) {
            int r = i/(N-1)+1;
            int c = i%(N-1)+1;
            if(!map[r][c] &amp;amp;&amp;amp; !map[r][c+1] &amp;amp;&amp;amp; !map[r][c-1]){
                map[r][c] = true;
                comb(i+1, cnt+1, n);
                map[r][c] = false;
            }
        }
    }

    public static boolean start(){
        for(int i=1;i&amp;lt;=N;i++){
            int line = i;
            for(int j=1;j&amp;lt;=H;j++){
                boolean move = false;
                if(line&amp;lt;N &amp;amp;&amp;amp; map[j][line]){
                    line++;
                    move = true;
                }
                if(!move &amp;amp;&amp;amp; 0&amp;lt;=line-1 &amp;amp;&amp;amp; map[j][line-1]) line--;
            }
            if(line!=i) return false;
        }
        return true;
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘 공부/문제 풀이</category>
      <category>구현</category>
      <category>백준 15684 사다리 조작</category>
      <category>자바</category>
      <author>valid_ming</author>
      <guid isPermaLink="true">https://validming99.tistory.com/189</guid>
      <comments>https://validming99.tistory.com/189#entry189comment</comments>
      <pubDate>Wed, 27 Oct 2021 12:10:31 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA] 백준 21610 마법사 상어와 비바라기</title>
      <link>https://validming99.tistory.com/188</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/21610&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/21610&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1635246986519&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;21610번: 마법사 상어와 비바라기&quot; data-og-description=&quot;마법사 상어는&amp;nbsp;파이어볼,&amp;nbsp;토네이도, 파이어스톰, 물복사버그&amp;nbsp;마법을 할 수 있다. 오늘 새로 배운 마법은 비바라기이다. 비바라기를 시전하면 하늘에 비구름을 만들 수 있다. 오늘은 비바라기&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/21610&quot; data-og-url=&quot;https://www.acmicpc.net/problem/21610&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/lnvJA/hyL7hmtD3S/X23UwHkPgRF2ivHDDsKI0k/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/21610&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/21610&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/lnvJA/hyL7hmtD3S/X23UwHkPgRF2ivHDDsKI0k/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;21610번: 마법사 상어와 비바라기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;마법사 상어는&amp;nbsp;파이어볼,&amp;nbsp;토네이도, 파이어스톰, 물복사버그&amp;nbsp;마법을 할 수 있다. 오늘 새로 배운 마법은 비바라기이다. 비바라기를 시전하면 하늘에 비구름을 만들 수 있다. 오늘은 비바라기&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;1015&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/efMWyc/btriUEMLF2T/hmTea7wmH9GalTOyPcASok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/efMWyc/btriUEMLF2T/hmTea7wmH9GalTOyPcASok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/efMWyc/btriUEMLF2T/hmTea7wmH9GalTOyPcASok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FefMWyc%2FbtriUEMLF2T%2FhmTea7wmH9GalTOyPcASok%2Fimg.png&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;1015&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1098&quot; data-origin-height=&quot;852&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lKhfN/btri0a4urlB/VNOHpw0zK1GAwkYxaKVVd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lKhfN/btri0a4urlB/VNOHpw0zK1GAwkYxaKVVd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lKhfN/btri0a4urlB/VNOHpw0zK1GAwkYxaKVVd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlKhfN%2Fbtri0a4urlB%2FVNOHpw0zK1GAwkYxaKVVd0%2Fimg.png&quot; data-origin-width=&quot;1098&quot; data-origin-height=&quot;852&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1635247086187&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.io.*;

public class Main {

    public static class Pos{
        int row, col;
        public Pos(int r, int c){
            row = r; col = c;
        }
    }

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        map = new int[N][N];

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

        q.add(new Pos(N-1,0));
        q.add(new Pos(N-1,1));
        q.add(new Pos(N-2,0));
        q.add(new Pos(N-2,1));


        while(M--&amp;gt;0){
            st = new StringTokenizer(br.readLine());
            int d = Integer.parseInt(st.nextToken())-1;
            int s = Integer.parseInt(st.nextToken())%N;
            int size = q.size();

            for(int i=0;i&amp;lt;size;i++){
                Pos pos = q.poll();
                move(pos, d, s);
            }

            boolean[][] check = new boolean[N][N];
            while(!q.isEmpty()){
                Pos pos = q.poll();
                check[pos.row][pos.col] = true;
                copy(pos);
            }

            for(int i=0;i&amp;lt;N;i++){
                for(int j=0;j&amp;lt;N;j++){
                    if(map[i][j] &amp;gt;=2 &amp;amp;&amp;amp; !check[i][j]){
                        map[i][j] -= 2;
                        q.add(new Pos(i, j));
                    }
                }
            }
        }

        int sum = 0;
        for(int i=0;i&amp;lt;N;i++){
            for(int j=0;j &amp;lt;N;j++){
                sum += map[i][j];
            }
        }

        System.out.println(sum);
    }

    static int N;
    static int[][] map;
    static Queue&amp;lt;Pos&amp;gt; q = new LinkedList&amp;lt;&amp;gt;();
    static int[][] dir = {{0, -1, -1, -1, 0, 1, 1, 1}, {-1, -1, 0, 1, 1, 1, 0 ,-1}};

    public static void move(Pos pos, int d, int s){
        int row = ((pos.row + N) + dir[0][d]*s)%N;
        int col = ((pos.col + N) + dir[1][d]*s)%N;
        map[row][col]++;
        q.add(new Pos(row,col));
    }

    public static void copy(Pos pos){
        int cnt = 0;

        for(int i=1; i&amp;lt;8; i+=2){
            int r = pos.row + dir[0][i];
            int c = pos.col + dir[1][i];

            if(0&amp;lt;=r &amp;amp;&amp;amp; r&amp;lt;N &amp;amp;&amp;amp; 0&amp;lt;=c &amp;amp;&amp;amp; c&amp;lt;N &amp;amp;&amp;amp; map[r][c]&amp;gt;0) cnt++;
        }

        map[pos.row][pos.col] += cnt;
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘 공부/문제 풀이</category>
      <category>구현</category>
      <category>백준 21610 마법사 상어와 비바라기</category>
      <category>자바</category>
      <author>valid_ming</author>
      <guid isPermaLink="true">https://validming99.tistory.com/188</guid>
      <comments>https://validming99.tistory.com/188#entry188comment</comments>
      <pubDate>Tue, 26 Oct 2021 20:19:55 +0900</pubDate>
    </item>
  </channel>
</rss>