<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>leeso</title>
    <link>https://leeso.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Fri, 15 May 2026 18:55:56 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>pinkbear</managingEditor>
    <image>
      <title>leeso</title>
      <url>https://tistory1.daumcdn.net/tistory/5069887/attach/863593c2101e4f31b0b509637892b585</url>
      <link>https://leeso.tistory.com</link>
    </image>
    <item>
      <title>[백준 11047] 동전0 (Java)</title>
      <link>https://leeso.tistory.com/64</link>
      <description>&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/11047&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/11047&lt;/a&gt;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;공부한 부분&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그리디 알고리즘 : &lt;b&gt;각 단계별로 최선의 선택지를 선택하는 것.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그리디 알고리즘은 항상 최적의 해를 도출해내는 것은 아니다.&lt;/b&gt;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Java Code&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1704722448814&quot; class=&quot;java&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class boj11047 {

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

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

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

        int[] coin = new int[N];
        for (int i = 0; i &amp;lt; N; i++) {
            coin[i] = Integer.parseInt(br.readLine());
        }
        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;</description>
      <category>Algorithm/BOJ</category>
      <author>pinkbear</author>
      <guid isPermaLink="true">https://leeso.tistory.com/64</guid>
      <comments>https://leeso.tistory.com/64#entry64comment</comments>
      <pubDate>Mon, 8 Jan 2024 23:02:50 +0900</pubDate>
    </item>
    <item>
      <title>[백준 1699] 제곱수의 합 (Java)</title>
      <link>https://leeso.tistory.com/63</link>
      <description>&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1699&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/1699&lt;/a&gt;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;공부한 부분&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt; dp 관련 문제는 일단 dp[10] 정도까지는 써보면서 규칙을 확인해보면 좋을 것 같다.&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Java Code&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1704201397723&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.IOException;
import java.io.InputStreamReader;

public class boj12865 {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        int[] dp = new int[n + 1];

        dp[1] = 1;
        for (int i = 2; i &amp;lt;= n; i++) {
            dp[i] = 100001;
            for (int j = 1; j &amp;lt;= i / 2; j++) {
                if (j * j == i) {
                    dp[i] = 1;
                    break;
                }
                dp[i] = Math.min(dp[i], dp[j] + dp[i - j]);
            }
        }
        System.out.println(dp[n]);
    }

}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm/BOJ</category>
      <author>pinkbear</author>
      <guid isPermaLink="true">https://leeso.tistory.com/63</guid>
      <comments>https://leeso.tistory.com/63#entry63comment</comments>
      <pubDate>Tue, 2 Jan 2024 22:16:43 +0900</pubDate>
    </item>
    <item>
      <title>[백준 2231] 분해합 (Java)</title>
      <link>https://leeso.tistory.com/62</link>
      <description>&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2231&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/2231&lt;/a&gt;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;공부한 부분&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;숫자가 주어지고 각각 자리수의 합을 구하려고 할 때, %10이랑 /10 활용하면 좋다.&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Java Code&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1704197493149&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class boj2231 {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int M = 0;

        for (int i = 1; i &amp;lt;= N; i++) {
            int tmp = i;
            int sum = i;

            while (tmp &amp;gt; 0) {
                sum = sum + tmp % 10;
                tmp = tmp / 10;
            }
            if(sum == N) {
                M = i;
                break;
            }
        }
        System.out.println(M);
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm/BOJ</category>
      <author>pinkbear</author>
      <guid isPermaLink="true">https://leeso.tistory.com/62</guid>
      <comments>https://leeso.tistory.com/62#entry62comment</comments>
      <pubDate>Tue, 2 Jan 2024 21:11:37 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode 299.] Bulls and Cows (Java)</title>
      <link>https://leeso.tistory.com/54</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/bulls-and-cows/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://leetcode.com/problems/bulls-and-cows/&lt;/a&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bulls : guess의 숫자가 secret의&amp;nbsp; 올바른 위치에 있는 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cows : secret에 있는 숫자이지만 guess에서 잘못된 위치에 있는 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;numsSecret==numsGuess 인 경우 bulls를 ++&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;secret에 있는 숫자인 경우 -- 해주고, guess에 있는 숫자인 경우 ++ 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 이후 배열의 숫자를 확인해서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;numsGuess에 있는게 -인 경우 cows++해주고, numsSecret에 있는게 +인 경우 cows++ 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Java Code&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1676288664149&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    public String getHint(String secret, String guess) {
        int bulls=0;
        int cows=0;
        int[] nums=new int[10];
        for(int i=0;i&amp;lt;secret.length();i++){
            int numsSecret=secret.charAt(i)-'0';
            int numsGuess=guess.charAt(i)-'0';
            if(numsSecret==numsGuess){
                bulls++;
            }else{
                if(nums[numsGuess]&amp;lt;0){
                    cows++;
                }
                if(nums[numsSecret]&amp;gt;0){
                    cows++;
                }
                nums[numsGuess]++;
                nums[numsSecret]--;
            }
            
        }
        return bulls + &quot;A&quot; + cows + &quot;B&quot;;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm/LeetCode</category>
      <author>pinkbear</author>
      <guid isPermaLink="true">https://leeso.tistory.com/54</guid>
      <comments>https://leeso.tistory.com/54#entry54comment</comments>
      <pubDate>Mon, 13 Feb 2023 20:49:23 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode 844.] Backspace String Compare (Java)</title>
      <link>https://leeso.tistory.com/53</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/backspace-string-compare/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://leetcode.com/problems/backspace-string-compare/&lt;/a&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;s문자를 배열로 바꿔서 stack 활용해서 문자 만들어주고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;t문자를 배열로 바꿔서 같은 방법으로 해줘서 결과 비교해서 return 해준다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Java Code&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1676287666232&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.Stack;

class Solution {
    public boolean backspaceCompare(String s, String t) {
        char[] arr = s.toCharArray();
        Stack&amp;lt;Character&amp;gt; stack = new Stack&amp;lt;&amp;gt;();
        for (int i = 0; i &amp;lt; arr.length; i++) {
            if (arr[i] != '#') {
                stack.push(arr[i]);
            } else if(!stack.isEmpty()){
                stack.pop();
            }
        }
        String str1 = stack.toString();
        stack.clear();
        char[] arr1 = t.toCharArray();
        for (int i = 0; i &amp;lt; arr1.length; i++) {
            if (arr1[i] != '#') {
                stack.push(arr1[i]);
            } else if(!stack.isEmpty()){
                stack.pop();
            }
        }
        String str2 = stack.toString();
        if (str1.equals(str2)) {
            return true;
        } else {
            return false;
        }
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm/LeetCode</category>
      <author>pinkbear</author>
      <guid isPermaLink="true">https://leeso.tistory.com/53</guid>
      <comments>https://leeso.tistory.com/53#entry53comment</comments>
      <pubDate>Mon, 13 Feb 2023 20:28:32 +0900</pubDate>
    </item>
    <item>
      <title>[백준 1189] 컴백홈 (Java)</title>
      <link>https://leeso.tistory.com/52</link>
      <description>&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;&lt;a href=&quot;https://www.acmicpc.net/problem/1189&quot;&gt;https://www.acmicpc.net/problem/1189&lt;/a&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dfs탐색으로 모든 경우의 수를 탐색해준다&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Java Code&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1675759544698&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.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class boj1189 {

    static int R, C, K;
    static char[][] map;
    static int[][] visited;
    static int answer;

    static int[] moveR = {1, -1, 0, 0};
    static int[] moveC = {0, 0, 1, -1};

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        R = Integer.parseInt(st.nextToken());
        C = Integer.parseInt(st.nextToken());
        K = Integer.parseInt(st.nextToken());
        map = new char[R][C];
        visited = new int[R][C];

        for (int i = 0; i &amp;lt; R; i++) {
            String s = br.readLine();
            for (int j = 0; j &amp;lt; C; j++) {
                map[i][j] = s.charAt(j);
            }
        }

        visited[R - 1][0] = 1;
        dfs(R - 1, 0, 1);

        System.out.println(answer);

    }

    static void dfs(int r, int c, int moved) {
        if (r == 0 &amp;amp;&amp;amp; c == C - 1) {
            if (moved == K) {
                answer++;
            }
            return;
        }

        for (int i = 0; i &amp;lt; 4; i++) {
            int nextR = r + moveR[i];
            int nextC = c + moveC[i];
            if (nextR &amp;lt; 0 || nextR &amp;gt;= R || nextC &amp;lt; 0 || nextC &amp;gt;= C) {
                continue;
            }
            if (visited[nextR][nextC] == 1 || map[nextR][nextC] == 'T') {
                continue;
            }
            visited[nextR][nextC] = 1;
            dfs(nextR, nextC, moved + 1);
            visited[nextR][nextC] = 0;

        }

    }

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm/BOJ</category>
      <author>pinkbear</author>
      <guid isPermaLink="true">https://leeso.tistory.com/52</guid>
      <comments>https://leeso.tistory.com/52#entry52comment</comments>
      <pubDate>Tue, 7 Feb 2023 17:49:47 +0900</pubDate>
    </item>
    <item>
      <title>[백준 2164] 카드2 (Java)</title>
      <link>https://leeso.tistory.com/51</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2164&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/2164&lt;/a&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;큐를 사용하면 되겠다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Java Code&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1675759473970&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.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());

        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.remove();
            if(queue.isEmpty()) break;
            int top = queue.poll();
            queue.add(top);
        }
        System.out.println(queue.peek());
    }

}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm/BOJ</category>
      <author>pinkbear</author>
      <guid isPermaLink="true">https://leeso.tistory.com/51</guid>
      <comments>https://leeso.tistory.com/51#entry51comment</comments>
      <pubDate>Tue, 7 Feb 2023 17:44:41 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode 438.] Find All Anagrams in a String (Java)</title>
      <link>https://leeso.tistory.com/50</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/find-all-anagrams-in-a-string/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://leetcode.com/problems/find-all-anagrams-in-a-string/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;s문자열이 주어졌을 때, p문자열이 모두 들어있는 모든 첫번째 인덱스를 return해준다.&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. p의 길이가 s의 길이보다 긴 경우, return 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 먼저 알파벳의 크기만큼 s와 p 배열을 만들어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 문자의 길이가 정해져있으니까 왼쪽, 오른쪽 ++ 해주어 숫자를 비교해준다..&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Java Code&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1675687306518&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    public List&amp;lt;Integer&amp;gt; findAnagrams(String s, String p) {
        if (p.length() &amp;gt; s.length()) return new ArrayList&amp;lt;&amp;gt;();

        int[] sHash = new int[26];
        int[] pHash = new int[26];

        for (int i = 0; i &amp;lt; p.length(); i++) {
            pHash[p.charAt(i) - 'a']++;
            sHash[s.charAt(i) - 'a']++;
        }

        int left = 0, right = p.length();
        List&amp;lt;Integer&amp;gt; ans = new ArrayList&amp;lt;&amp;gt;();

        while (right &amp;lt; s.length()) {
            if (Arrays.equals(sHash, pHash)) ans.add(left);

            char acquire = s.charAt(right);
            sHash[acquire - 'a']++;

            char discard = s.charAt(left);
            sHash[discard - 'a']--;

            left++; right++;
        }
        
		//	두 배열이 같은 경우 left값을 정해준다.
        if (Arrays.equals(sHash, pHash)) ans.add(left);

        return ans;
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm/LeetCode</category>
      <author>pinkbear</author>
      <guid isPermaLink="true">https://leeso.tistory.com/50</guid>
      <comments>https://leeso.tistory.com/50#entry50comment</comments>
      <pubDate>Mon, 6 Feb 2023 21:52:36 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode 98.] Validate Binary Search Tree (Java)</title>
      <link>https://leeso.tistory.com/49</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/validate-binary-search-tree/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://leetcode.com/problems/validate-binary-search-tree/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif;&quot;&gt;트리가 주어지는데, 이 트리가 이진트리인지 판단한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_D16FE9305897-1.jpeg&quot; data-origin-width=&quot;617&quot; data-origin-height=&quot;624&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdoqmK/btrYhbjjqlI/GMGFmMMfbq3kriHL5GPzO1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdoqmK/btrYhbjjqlI/GMGFmMMfbq3kriHL5GPzO1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdoqmK/btrYhbjjqlI/GMGFmMMfbq3kriHL5GPzO1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdoqmK%2FbtrYhbjjqlI%2FGMGFmMMfbq3kriHL5GPzO1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;352&quot; height=&quot;356&quot; data-filename=&quot;IMG_D16FE9305897-1.jpeg&quot; data-origin-width=&quot;617&quot; data-origin-height=&quot;624&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 특정 노드를 기준으로, 왼쪽 자식 노드는 (B)는 부모노드(A)보다 값이 작아야하고, 오른쪽자식노드(&lt;/span&gt;C) 보다 커야한다.&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;B의 왼쪽 자식노드(D)는 B보다 작아야하며, 오른쪽 자식노드(E)는 B보다 커야되고, A보다는 작아야한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. root 부터 isValidBST 함수를 실행한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;* 이때 노드의 범위가 정수 범위이므로, Long 값의 최대, 최소값을 세팅해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. isValidBST() 함수에서 node가 null이면, true이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;node의 값이&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; min &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;보다&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;작거나 같다&lt;/b&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;면 false를 반환한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. node의 값이 max 보다&lt;span&gt;&amp;nbsp;&lt;/span&gt;크거나 같다면 false를 반환한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 왼쪽 자식노드가 유효한지 확인한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5-1. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;isValidBST()&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;함수를 재귀 호출한다. 인자로 왼쪽 자식노드&amp;nbsp;&lt;/span&gt;node.left&lt;span style=&quot;color: #000000;&quot;&gt;, 최소값으로 min&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 그리고 최대값으로 현재 노드의 값&amp;nbsp;&lt;/span&gt;node.val&lt;span style=&quot;color: #000000;&quot;&gt;을 전달한다. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(왼쪽 자식노드는 부모 노드보다 작아야 하기 때문에 최대 한계값으로 현재 노드의 값을 전달한다.)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5-2. 왼쪽 자식노드가 유효하지 않다면 false를 반환한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;6. 오른쪽 자식노드가 유효한지 확인한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;6-1.&amp;nbsp;&lt;/span&gt;isValidBST()&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;함수를 재귀 호출한다. 인자로 오른쪽 자식노드&amp;nbsp;&lt;/span&gt;node.right&lt;span style=&quot;color: #000000;&quot;&gt;, 최소값으로 현재 노드의 값 &lt;/span&gt;node.val&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;그리고 최대 한계값&amp;nbsp;&lt;/span&gt;max를&lt;span style=&quot;color: #000000;&quot;&gt; 전달한다. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(오른쪽 자식노드는 부모 노드보다 커야 하기 때문에 최소 한계값으로 현재 노드의 값을 전달한다.)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;6-2. 오른쪽 자식노드가 유효하지 않다면 false를 반환한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;7. 최종적으로 모든 노드가 유효하다면 true를 반환한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Java Code&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1675686556244&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    public boolean isValidBST(TreeNode root) {
        return isBST(root,Long.MIN_VALUE,Long.MAX_VALUE);
    }
    boolean isBST(TreeNode root,long min,long max)
    {
        if(root == null)
            return true;
        
        if(root.val &amp;lt;= min || root.val &amp;gt;= max)
            return false;
        
        boolean left = isBST(root.left,min,root.val);
        boolean right = isBST(root.right,root.val,max);
        return left &amp;amp;&amp;amp; right;
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm/LeetCode</category>
      <author>pinkbear</author>
      <guid isPermaLink="true">https://leeso.tistory.com/49</guid>
      <comments>https://leeso.tistory.com/49#entry49comment</comments>
      <pubDate>Mon, 6 Feb 2023 21:38:22 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode 142.] Linked List Cycle II (Java)</title>
      <link>https://leeso.tistory.com/48</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/linked-list-cycle-ii/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://leetcode.com/problems/linked-list-cycle-ii/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;linked list에 head가 주어진다. 이때 사이클이 시작하는 노드를 return 한다. 없는 경우 null을 return 한다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 사이클인지 판별한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 사이클인 경우 사이클의 진입부분을 찾는다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image.jpeg&quot; data-origin-width=&quot;1117&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dDHdLB/btrXz0bMzRF/LW8Cu93kqEBWpoBoNn90FK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dDHdLB/btrXz0bMzRF/LW8Cu93kqEBWpoBoNn90FK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dDHdLB/btrXz0bMzRF/LW8Cu93kqEBWpoBoNn90FK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdDHdLB%2FbtrXz0bMzRF%2FLW8Cu93kqEBWpoBoNn90FK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;422&quot; height=&quot;227&quot; data-filename=&quot;image.jpeg&quot; data-origin-width=&quot;1117&quot; data-origin-height=&quot;600&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_9AB426BB1DFE-1.jpeg&quot; data-origin-width=&quot;1009&quot; data-origin-height=&quot;861&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kyy2J/btrXCZCEpCB/KUrVvWflOfSi30vWh3DeJ0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kyy2J/btrXCZCEpCB/KUrVvWflOfSi30vWh3DeJ0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kyy2J/btrXCZCEpCB/KUrVvWflOfSi30vWh3DeJ0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fkyy2J%2FbtrXCZCEpCB%2FKUrVvWflOfSi30vWh3DeJ0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;441&quot; height=&quot;376&quot; data-filename=&quot;IMG_9AB426BB1DFE-1.jpeg&quot; data-origin-width=&quot;1009&quot; data-origin-height=&quot;861&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;토끼와 거북이 알고리즘&quot; 을 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 거북이를 시작지점으로 옮긴다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 토끼와 거북이가 만날 때까지 한칸씩 이동한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. 둘이 만나는 지점이 사이클의 시작지점이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;D : 시작점(head)에서 사이클 시작점까지의 거리&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;M : 사이클 시작점에서 둘이 만난 지점까지의 거리&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;R : 둘이 만난 지점부터 다시 사이클 시작점까지의 거리&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;거북이 = D + M&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;토끼 = 2(D + M) = 2D+2M&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;토끼는 거북이의 2배씩 움직이므로, 위의 수식은 쉽게 구할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이때 토끼가 이동한 경로는&amp;nbsp;&lt;b&gt;시작점 -&amp;gt; 사이클 시작점 -&amp;gt; 둘이 만난 곳 -&amp;gt; 사이클 시작점 -&amp;gt; 둘이 만난 곳&lt;/b&gt;이 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이제 토끼가 이동한 경로를 D,M,R을 사용하여 표시를 해보면 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;토끼 = D + M + R + M = D + R + 2M&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이제 토끼가 이동한 거리를 표현한 수식이 2개가 되었다. 이 두 개를 가지고 R과 D의 관계를 계산할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2D + 2M = D+R+2M&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;-&amp;gt; D = R&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;D = R&lt;/b&gt;, 즉,&amp;nbsp;&lt;b&gt;&quot;시작점부터 사이클 시작점 까지의 거리&quot;는 &quot;둘이 만난 곳 부터 다시 사이클 시작점까지 가는 거리&quot;와 같다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 알고리즘이 옳다는 것을 증명했으므로, 이를 사용해 구현하게 되면 어렵지 않게 문제를 해결할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Java Code&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1675080198222&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode detectCycle(ListNode head) {
        if(head==null || head.next==null) return null;
        
        ListNode slow = head;
        ListNode fast = head;
        while(fast!=null &amp;amp;&amp;amp; fast.next!=null){
            slow=slow.next;
            fast=fast.next.next;
            if(slow==fast){
               while(head!=slow){
                   head=head.next;
                   slow=slow.next;
               }
               return slow;
            }
        }
        return null;
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm/LeetCode</category>
      <author>pinkbear</author>
      <guid isPermaLink="true">https://leeso.tistory.com/48</guid>
      <comments>https://leeso.tistory.com/48#entry48comment</comments>
      <pubDate>Mon, 30 Jan 2023 21:03:24 +0900</pubDate>
    </item>
  </channel>
</rss>