<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>개발일지</title>
    <link>https://sxxlx.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Fri, 17 Jul 2026 00:55:14 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>이서라다</managingEditor>
    <image>
      <title>개발일지</title>
      <url>https://tistory1.daumcdn.net/tistory/7577862/attach/9377a2a544934b34bbc786c14d918bd4</url>
      <link>https://sxxlx.tistory.com</link>
    </image>
    <item>
      <title>[프로그래머스] 42862번 - 체육복 [Java]</title>
      <link>https://sxxlx.tistory.com/84</link>
      <description>&lt;figure id=&quot;og_1780970842827&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42862?language=java&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/HxaSV/dJMb8UHXfqT/AHk65vyrQkqS1Hpku32m2k/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/cXv0y5/dJMb8ZvJsbX/8mWJgur84krVoSJeIxVTgk/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42862?language=java&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42862?language=java&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/HxaSV/dJMb8UHXfqT/AHk65vyrQkqS1Hpku32m2k/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/cXv0y5/dJMb8ZvJsbX/8mWJgur84krVoSJeIxVTgk/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p 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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-09 오전 11.09.08.png&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;571&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xgrfx/dJMcabEtpFA/ti2KrrTDWxhVOIpMVFcbdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xgrfx/dJMcabEtpFA/ti2KrrTDWxhVOIpMVFcbdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xgrfx/dJMcabEtpFA/ti2KrrTDWxhVOIpMVFcbdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxgrfx%2FdJMcabEtpFA%2Fti2KrrTDWxhVOIpMVFcbdK%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;926&quot; height=&quot;571&quot; data-filename=&quot;스크린샷 2026-06-09 오전 11.09.08.png&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;571&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;제출한 코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1780970923194&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.Arrays;

class Solution {
    public long solution(int n, int[] lost, int[] reserve) {

        int[] student = new int[n+2];
        student[0] = -1; student[n+1] = -1;
        
        Arrays.sort(lost);
        Arrays.sort(reserve);

        // 잃어버린 학생 = 1 / 체육복이 있는 학생 = 0 / 배열의 맨앞뒤 = -1
        for (int i = 0; i &amp;lt; lost.length; i++) {
            student[lost[i]] = 1;
        }

        // 본인이 잃어버린 학생이라면 본인 체육복을 본인에게
        for (int i = 0; i &amp;lt; reserve.length; i++) {
            if (reserve[i] &amp;gt; 0 &amp;amp;&amp;amp; student[reserve[i]] &amp;gt; 0) {
                student[reserve[i]] = 0;
                reserve[i] = -1;
            }
        }
        
        for (int i = 0; i &amp;lt; reserve.length; i++) {
            // 앞사람이 체육복이 없으면
            if (reserve[i] &amp;gt; 0 &amp;amp;&amp;amp; student[reserve[i]-1] &amp;gt; 0) {
                student[reserve[i]-1] = 0;
                reserve[i] = -1;
            }
            
            // 뒷사람이 체육복이 없으면
            if (reserve[i] &amp;gt; 0 &amp;amp;&amp;amp; student[reserve[i]+1] &amp;gt; 0) {
                student[reserve[i]+1] = 0;
                reserve[i] = -1;
            }
        }

        return Arrays.stream(student).filter(x -&amp;gt; x == 0).count();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;먼저 체육복이 있는 학생과 없는 학생을 담기 위한 int 배열을 n + 2 사이즈로 student 라는 이름으로 선언하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맨앞의 인덱스와 맨뒤의 인덱스의 값을 -1로 초기화시켰다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 배열은 체육복이 없는 학생은 1, 체육복이 있는 학생은 0을 담을 예정이다.&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;이후 순차 탐색을 위해 배열 lost와 reserve를 오름차순으로 정렬했다.&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;lost 배열 안의 값은 체육복이 없는 학생을 뜻하기 때문에, 해당 student 인덱스의 값을 1로 변경해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 특히 아래의 조건을 잘 읽어봐야 한다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #263747; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다. 이때 이 학생은 체육복을 하나만 도난당했다고 가정하며, 남은 체육복이 하나이기에 다른 학생에게는 체육복을 빌려줄 수 없습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 본인 체육복을 본인이 사용해야 하는 경우가 있기 때문에, 먼저 for문을 돌려서 이 케이스에 해당하는 인덱스는 0(체육복이 있음)으로 바꾸고, 더 이상 다른 사람에게 빌려줄 수 없으므로 reserve의 해당 인덱스의 값을 -1로 변경해주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 비슷한 맥락으로 앞번호에게 빌려줄 수 있으면, student의 앞 인덱스의 값은 0으로, 해당 reserve의 인덱스 값은 -1로 변경했다.&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;이후 student 배열 안에서 0의 개수를 count하여 반환하도록 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 반환되는 타입은 long 타입이므로, 여기에 맞게 원래 프로그래머스 상에서 int로 반환 타입이 잡혀있던 것을 long 타입으로 변경해주었다.&lt;/p&gt;</description>
      <category>프로그래머스</category>
      <author>이서라다</author>
      <guid isPermaLink="true">https://sxxlx.tistory.com/84</guid>
      <comments>https://sxxlx.tistory.com/84#entry84comment</comments>
      <pubDate>Tue, 9 Jun 2026 11:19:34 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 131128번 - 숫자 짝꿍 [Java]</title>
      <link>https://sxxlx.tistory.com/82</link>
      <description>&lt;figure id=&quot;og_1780883945577&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131128?language=java&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/AuKhm/dJMb85W1dJU/3grM5Rku5u13SnebyZTGs0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/O8pbY/dJMb88e8Al2/mxsolOcjbKk8k6w7ydAyCk/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131128?language=java&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131128?language=java&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/AuKhm/dJMb85W1dJU/3grM5Rku5u13SnebyZTGs0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/O8pbY/dJMb88e8Al2/mxsolOcjbKk8k6w7ydAyCk/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p 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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-08 오전 10.59.56.png&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;617&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dKPGKs/dJMcaftkrde/pWsF3HE11yMqwN8QKONBuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dKPGKs/dJMcaftkrde/pWsF3HE11yMqwN8QKONBuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dKPGKs/dJMcaftkrde/pWsF3HE11yMqwN8QKONBuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdKPGKs%2FdJMcaftkrde%2FpWsF3HE11yMqwN8QKONBuk%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;928&quot; height=&quot;617&quot; data-filename=&quot;스크린샷 2026-06-08 오전 10.59.56.png&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;617&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;제출한 코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1780883971035&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    public String solution(String X, String Y) {
        
        int[] xArr = new int[10];
        for (String x : X.split(&quot;&quot;)) {
            xArr[Integer.parseInt(x)]++;
        }
        
        int[] yArr = new int[10];
        for (String y : Y.split(&quot;&quot;)) {
            yArr[Integer.parseInt(y)]++;
        }
        
        StringBuilder sb = new StringBuilder();
        
        for (int i = 9; i &amp;gt;= 0; i--) {
            while (xArr[i] &amp;gt; 0 &amp;amp;&amp;amp; yArr[i] &amp;gt; 0) {
                sb.append(i);
                xArr[i]--;
                yArr[i]--;
            }
        }
        
        if (sb.length() == 0) return &quot;-1&quot;;
        if (sb.charAt(0) == '0') return &quot;0&quot;;
        
        return sb.toString();
    }
}&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;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;처음에는 이중으로 for문을 사용하여 문제를 풀었으나 일부 테스트 케이스가 시간초과가 돼서 통과를 못했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간복잡도를 O(n) 으로 줄이기 위해 for문을 한 번만 사용하는 방식으로 다시 풀어서 제출했다.&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;먼저 문자열 X에서 한 자리씩 비교하여 해당 숫자의 index 자리에 있는 xArr를 1씩 증가시키도록 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열 Y도 동일한 방식으로 yArr에 해당 자리의 숫자를 1씩 증가했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 큰 정수를 반환해야 하므로 맨뒤에서부터 시작하여, xArr와 yArr 모두 해당 인덱스의 숫자가 0 초과일 때까지, StringBuilder에 해당 숫자를 append 하고, 해당 자리의 숫자를 1 감소시켰고,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 해서 만들어진 sb를 반환하도록 했다.&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;만약 만들어진 StringBuilder의 문자열의 길이가 0이라면 짝꿍이 존재하지 않으므로 &quot;-1&quot;을,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열이 '0' 으로 시작하면 짝꿍이 0으로만 구성되어 있으므로 &quot;0&quot;이 반환된다.&lt;/p&gt;</description>
      <category>프로그래머스</category>
      <author>이서라다</author>
      <guid isPermaLink="true">https://sxxlx.tistory.com/82</guid>
      <comments>https://sxxlx.tistory.com/82#entry82comment</comments>
      <pubDate>Mon, 8 Jun 2026 11:09:51 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 133499번 - 옹알이 (2) [Java]</title>
      <link>https://sxxlx.tistory.com/80</link>
      <description>&lt;figure id=&quot;og_1780629013308&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/133499?language=java&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/kr9WK/dJMb8PGDJB7/ACCoe2A2YhJE0JQhbHZmW0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/QkVTE/dJMb8T97efW/dTpJ5AViK4ClOnZWDdAkh0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/133499?language=java&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/133499?language=java&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/kr9WK/dJMb8PGDJB7/ACCoe2A2YhJE0JQhbHZmW0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/QkVTE/dJMb8T97efW/dTpJ5AViK4ClOnZWDdAkh0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p 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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-05 오후 12.13.11.png&quot; data-origin-width=&quot;935&quot; data-origin-height=&quot;758&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/y8KHx/dJMcajh9TK9/5MOT5J2bHUZxAocOKj1uc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/y8KHx/dJMcajh9TK9/5MOT5J2bHUZxAocOKj1uc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/y8KHx/dJMcajh9TK9/5MOT5J2bHUZxAocOKj1uc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fy8KHx%2FdJMcajh9TK9%2F5MOT5J2bHUZxAocOKj1uc0%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;935&quot; height=&quot;758&quot; data-filename=&quot;스크린샷 2026-06-05 오후 12.13.11.png&quot; data-origin-width=&quot;935&quot; data-origin-height=&quot;758&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;제출한 코드&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 문자 비교&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1780629148198&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.List;
import java.util.ArrayList;

class Solution {
    public int solution(String[] babbling) {
        
        int count = 0;
        
        List&amp;lt;String&amp;gt; list = new ArrayList&amp;lt;&amp;gt;();
        list.add(&quot;aya&quot;); list.add(&quot;ye&quot;); list.add(&quot;woo&quot;); list.add(&quot;ma&quot;);
        
        for (String s : babbling) {
            StringBuilder sb = new StringBuilder();
            String last = &quot;last&quot;;
            
            for (char c : s.toCharArray()) {
                sb.append(c);
                
                if (list.contains(sb.toString())) {
                    if (sb.toString().equals(last)) break;
                    
                    last = sb.toString();
                    sb.delete(0, sb.length());
                }
            }
            
            if (sb.length() == 0) count++;
        }
        
        return count;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 정규식 사용&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1780629040414&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    public int solution(String[] babbling) {
        
        int count = 0;
        
        for (String s : babbling) {
            s = s.replaceAll(&quot;ayaaya|yeye|woowoo|mama&quot;, &quot;1&quot;);
            s = s.replaceAll(&quot;aya|ye|woo|ma&quot;, &quot;&quot;);
            
            if (s.length() == 0) count++;
        }
        
        return count;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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번 코드는 제일 처음에 제출한 코드이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리스트 안에 네 가지 발음을 넣고, for문을 통해 글자 하나씩 비교하면서 StringBuilder에 append 한 후, 만약 StringBuilder에 있는 문자열이 list 안에 존재한다면, StringBuilder 내용을 지우는 방식으로 하여, 마지막에 sb의 길이가 0이라면 count를 1 증가하는 방식으로 구현했었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제출한 후 다른 사람의 코드를 살펴 보았더니 정규식으로 간결하게 해결한 코드가 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;replaceAll()&lt;/b&gt; 를 사용해서 간단하게 풀 수도 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연속된 발음이 s에 있다면 1로 치환한 후,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 발음이 s에 남아 있다면 빈 문자(&quot;&quot;)로 치환하도록 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 s의 길이가 0이라면 발음이 가능한 문자열이므로 count에 1을 증가시켰다.&lt;/p&gt;</description>
      <category>프로그래머스</category>
      <author>이서라다</author>
      <guid isPermaLink="true">https://sxxlx.tistory.com/80</guid>
      <comments>https://sxxlx.tistory.com/80#entry80comment</comments>
      <pubDate>Fri, 5 Jun 2026 12:31:11 +0900</pubDate>
    </item>
    <item>
      <title>[내일배움캠프] 260604 TIL #20</title>
      <link>https://sxxlx.tistory.com/79</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드카타&lt;/b&gt;&lt;/h2&gt;
&lt;figure id=&quot;og_1780539388822&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[프로그래머스] 77484번 - 로또의 최고 순위와 최저 순위 [Java]&quot; data-og-description=&quot;프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제 제출한 코드import java.util.List;import java.util.Arrays;class Solution { public int[] solution&quot; data-og-host=&quot;sxxlx.tistory.com&quot; data-og-source-url=&quot;https://sxxlx.tistory.com/78&quot; data-og-url=&quot;https://sxxlx.tistory.com/78&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/4syw0/dJMb8Z3yRlm/ze9BeheYFfq8K3AbNE3HWk/img.png?width=800&amp;amp;height=617&amp;amp;face=0_0_800_617,https://scrap.kakaocdn.net/dn/bSlkCW/dJMb81fZ4lE/6DhPD5QCe6P04HD9QIRU0k/img.png?width=800&amp;amp;height=617&amp;amp;face=0_0_800_617,https://scrap.kakaocdn.net/dn/i5HAn/dJMb8VNC2R5/gF9N43NOfubf36fSOYsxe1/img.png?width=927&amp;amp;height=715&amp;amp;face=0_0_927_715&quot;&gt;&lt;a href=&quot;https://sxxlx.tistory.com/78&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://sxxlx.tistory.com/78&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/4syw0/dJMb8Z3yRlm/ze9BeheYFfq8K3AbNE3HWk/img.png?width=800&amp;amp;height=617&amp;amp;face=0_0_800_617,https://scrap.kakaocdn.net/dn/bSlkCW/dJMb81fZ4lE/6DhPD5QCe6P04HD9QIRU0k/img.png?width=800&amp;amp;height=617&amp;amp;face=0_0_800_617,https://scrap.kakaocdn.net/dn/i5HAn/dJMb8VNC2R5/gF9N43NOfubf36fSOYsxe1/img.png?width=927&amp;amp;height=715&amp;amp;face=0_0_927_715');&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;[프로그래머스] 77484번 - 로또의 최고 순위와 최저 순위 [Java]&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제 제출한 코드import java.util.List;import java.util.Arrays;class Solution { public int[] solution&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;sxxlx.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Today I Learned!&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;실습 내용은 아래 깃허브에 올려두었다.&lt;/p&gt;
&lt;figure id=&quot;og_1780554525611&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - seola12e/nbc-monitor: 내일배움캠프 [모니터링 시스템 및 시큐어 코딩] 강의 실습&quot; data-og-description=&quot;내일배움캠프 [모니터링 시스템 및 시큐어 코딩] 강의 실습. Contribute to seola12e/nbc-monitor development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/seola12e/nbc-monitor&quot; data-og-url=&quot;https://github.com/seola12e/nbc-monitor&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/IOtKv/dJMb86n43Ab/NUGz0KyS1JvK8bRShI2Lnk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/m53Hb/dJMb82eUsxy/jEdK6KLmbDnUVQziVXJ7w1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/seola12e/nbc-monitor&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/seola12e/nbc-monitor&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/IOtKv/dJMb86n43Ab/NUGz0KyS1JvK8bRShI2Lnk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/m53Hb/dJMb82eUsxy/jEdK6KLmbDnUVQziVXJ7w1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - seola12e/nbc-monitor: 내일배움캠프 [모니터링 시스템 및 시큐어 코딩] 강의 실습&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;내일배움캠프 [모니터링 시스템 및 시큐어 코딩] 강의 실습. Contribute to seola12e/nbc-monitor development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;정리노트&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;CORS&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;(Cross-Origin Resource Sharing)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CORS&lt;/b&gt;란&amp;nbsp;한 출처(도메인, 프로토콜, 포트)에서 실행 중인 웹 애플리케이션이 다른 출처의 리소스에 접근할 수 있도록 브라우저에서 제공하는 보안 기능이다. 웹 애플리케이션은 기본적으로 &lt;b&gt;동일 출처 정책(Same-Origin Policy)&lt;/b&gt;에 따라 동작하며, 이는 보안상의 이유로 다른 출처의 리소스 접근을 제한한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;동일 출처 정책&lt;/b&gt;은 보안 메커니즘으로, 웹 브라우저가 스크립트가 로드된 출처(origin)와 동일한 출처의 리소스만 접근할 수 있도록 제한한다.&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;CORS 동작 방식은 아래와 같다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;브라우저가 Preflight 요청을 보냄&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;서버가 Preflight 요청에 응답&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;브라우저가 응답을 확인&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Preflight &lt;/b&gt;요청은 CORS 요청의 일종으로, 브라우저가 실제 요청을 보내기 전에 서버에 요청할 권한이 있는지 확인하는 과정이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;CSRF&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CSRF&lt;/b&gt;란 웹 애플리케이션의 취약점을 이용해 사용자가 의도하지 않은 요청을 보내도록 하는 공격 기법으로, 공격자는 사용자가 인증된 상태를 악용하여 사용자가 원하지 않는 행동을 수행하게 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Refer 헤더 검증, CSRF 토큰 사용, form 대신 API 사용 등의 방식으로 CSRF를 방지할 수 있다.&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;CSRF 토큰을 사용하여 이를 방지하는 실습해보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;localhost:8080/csrf 에 접속해서 _csrf 필드가 폼 안에 있음을 확인할 수 있었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-04 오후 3.36.54.png&quot; data-origin-width=&quot;868&quot; data-origin-height=&quot;301&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lksxy/dJMcagZ0oGv/ueqDHxGVP1BzAmdZjAEwKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lksxy/dJMcagZ0oGv/ueqDHxGVP1BzAmdZjAEwKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lksxy/dJMcagZ0oGv/ueqDHxGVP1BzAmdZjAEwKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flksxy%2FdJMcagZ0oGv%2FueqDHxGVP1BzAmdZjAEwKk%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;868&quot; height=&quot;301&quot; data-filename=&quot;스크린샷 2026-06-04 오후 3.36.54.png&quot; data-origin-width=&quot;868&quot; data-origin-height=&quot;301&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;폼의 값을 입력 후 제출했더니 로그에 CSRF 값이 노출되는 것을 확인할 수 있었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-04 오후 3.38.08.png&quot; data-origin-width=&quot;948&quot; data-origin-height=&quot;45&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baHjob/dJMcac4otXX/y3jxmlH85yGpypxxUXleQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baHjob/dJMcac4otXX/y3jxmlH85yGpypxxUXleQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baHjob/dJMcac4otXX/y3jxmlH85yGpypxxUXleQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaHjob%2FdJMcac4otXX%2Fy3jxmlH85yGpypxxUXleQ1%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;45&quot; data-filename=&quot;스크린샷 2026-06-04 오후 3.38.08.png&quot; data-origin-width=&quot;948&quot; data-origin-height=&quot;45&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;CSRF 토큰 값을 임의로 변경하고 폼을 제출하게 되면 403 페이지로 이동하게 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-04 오후 3.40.11.png&quot; data-origin-width=&quot;819&quot; data-origin-height=&quot;299&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUePUn/dJMcacJ91tw/ZrMHORJFnwDHKfgRp1uKc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUePUn/dJMcacJ91tw/ZrMHORJFnwDHKfgRp1uKc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUePUn/dJMcacJ91tw/ZrMHORJFnwDHKfgRp1uKc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUePUn%2FdJMcacJ91tw%2FZrMHORJFnwDHKfgRp1uKc1%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;819&quot; height=&quot;299&quot; data-filename=&quot;스크린샷 2026-06-04 오후 3.40.11.png&quot; data-origin-width=&quot;819&quot; data-origin-height=&quot;299&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-04 오후 3.40.21.png&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;299&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Nk9xw/dJMcaa6DpHc/bkgTL6cNkbLucjky4ViS7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Nk9xw/dJMcaa6DpHc/bkgTL6cNkbLucjky4ViS7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Nk9xw/dJMcaa6DpHc/bkgTL6cNkbLucjky4ViS7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNk9xw%2FdJMcaa6DpHc%2FbkgTL6cNkbLucjky4ViS7K%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;628&quot; height=&quot;299&quot; data-filename=&quot;스크린샷 2026-06-04 오후 3.40.21.png&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;299&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;XSS&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;XSS&lt;/b&gt;란 웹 애플리케이션의 취약점을 이용해 악성 스크립트를 다른 사용자의 브라우저에서 실행시키는 공격으로, 이를 통해 공격자는 사용자의 세션을 가로채거나, 악성 코드 실행, 웹사이트 변조 등의 공격을 수행할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;공격 유형&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;반사형 XSS (Reflected XSS)&lt;/li&gt;
&lt;li&gt;저장형 XSS (Stored XSS)&lt;/li&gt;
&lt;li&gt;DOM 기반 XSS (DOM-based XSS)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;XSS 공격의 위험성&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;세션 하이재킹&lt;/b&gt;: 사용자의 세션 쿠키를 탈취하여 공격자가 사용자의 계정으로 로그인할 수 있음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;악성 코드 실행&lt;/b&gt;: 악성 스크립트를 실행하여 사용자의 시스템에 피해를 줄 수 있음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;피싱 공격&lt;/b&gt;: 사용자를 속여 민감한 정보를 입력하도록 유도할 수 있음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;웹사이트 변조&lt;/b&gt;: 웹페이지의 내용을 변경하여 사용자에게 잘못된 정보를 제공할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;XSS 방어 기법&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;입력 검증 및 인코딩&lt;/li&gt;
&lt;li&gt;Content Security Policy (CSP)&lt;/li&gt;
&lt;li&gt;HTTPOnly 쿠키 사용&lt;/li&gt;
&lt;li&gt;JavaScript 안전하게 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;SQL Injection&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;SQL Injection&lt;/span&gt;&lt;/b&gt;이란 공격자가 웹 애플리케이션의 데이터베이스 쿼리에 악의적인 SQL 코드를 삽입하여 데이터베이스를 조작하거나 민감한 정보를 탈취하는 공격으로, 이 취약점은 애플리케이션이 사용자 입력을 제대로 검증하지 않을 때 발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;SQL Injection의 위험성&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;데이터 탈취&lt;/b&gt;: 공격자가 데이터베이스에서 민감한 정보를 탈취할 수 있음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 변조&lt;/b&gt;: 데이터베이스의 데이터를 변경하거나 삭제할 수 있음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;권한 상승&lt;/b&gt;: 공격자가 데이터베이스 관리자 권한을 얻을 수 있음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;전체 시스템 장악&lt;/b&gt;: 심각한 경우 서버 전체를 장악할 수 있음&lt;/li&gt;
&lt;/ul&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;SQL Injection 방어 기법&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Prepared Statements (준비된 문)&lt;/b&gt;: SQL 쿼리를 미리 컴파일하여 파라미터화된 쿼리를 사용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Stored Procedures (저장 프로시저)&lt;/b&gt;: 데이터베이스에서 미리 정의된 저장 프로시저를 호출하여 실행&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ORM (객체 관계 매핑)&lt;/b&gt;: Hibernate 같은 ORM 프레임워크를 사용하여 데이터베이스 접근을 추상화&lt;/li&gt;
&lt;li&gt;&lt;b&gt;입력 검증 및 인코딩&lt;/b&gt;: 사용자 입력을 철저히 검증하고 인코딩하여 SQL 쿼리에 직접 포함시키지 않음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;최소 권한 원칙&lt;/b&gt;: 데이터베이스 사용자에게 최소한의 권한만 부여&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>내일배움캠프/TIL</category>
      <category>til</category>
      <category>내일배움캠프</category>
      <author>이서라다</author>
      <guid isPermaLink="true">https://sxxlx.tistory.com/79</guid>
      <comments>https://sxxlx.tistory.com/79#entry79comment</comments>
      <pubDate>Thu, 4 Jun 2026 15:46:56 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 77484번 - 로또의 최고 순위와 최저 순위 [Java]</title>
      <link>https://sxxlx.tistory.com/78</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1780538642493&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/77484?language=java&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/mPAua/dJMb8UHWFh7/rDsx225vgjTzZ7oRUoqdV1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/50FWW/dJMb8PGDALG/6eRpREniPV71BExIfGE1F0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/77484?language=java&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/77484?language=java&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/mPAua/dJMb8UHWFh7/rDsx225vgjTzZ7oRUoqdV1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/50FWW/dJMb8PGDALG/6eRpREniPV71BExIfGE1F0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p 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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-04 오전 11.05.19.png&quot; data-origin-width=&quot;927&quot; data-origin-height=&quot;715&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdzfCM/dJMcafUoskv/cE6Y8hXMvAz4lo1y56caRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdzfCM/dJMcafUoskv/cE6Y8hXMvAz4lo1y56caRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdzfCM/dJMcafUoskv/cE6Y8hXMvAz4lo1y56caRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdzfCM%2FdJMcafUoskv%2FcE6Y8hXMvAz4lo1y56caRK%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;927&quot; height=&quot;715&quot; data-filename=&quot;스크린샷 2026-06-04 오전 11.05.19.png&quot; data-origin-width=&quot;927&quot; data-origin-height=&quot;715&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-04 오전 11.05.32.png&quot; data-origin-width=&quot;927&quot; data-origin-height=&quot;505&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c6Uu5Z/dJMcadB83Kc/pKkwKM3qIkpwKR5LO3XBkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c6Uu5Z/dJMcadB83Kc/pKkwKM3qIkpwKR5LO3XBkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c6Uu5Z/dJMcadB83Kc/pKkwKM3qIkpwKR5LO3XBkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc6Uu5Z%2FdJMcadB83Kc%2FpKkwKM3qIkpwKR5LO3XBkk%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;927&quot; height=&quot;505&quot; data-filename=&quot;스크린샷 2026-06-04 오전 11.05.32.png&quot; data-origin-width=&quot;927&quot; data-origin-height=&quot;505&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;제출한 코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1780538677621&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.List;
import java.util.Arrays;

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        
        List&amp;lt;Integer&amp;gt; numbers = Arrays.stream(win_nums).boxed().toList();
        
        int match = 0;
        int zeros = 0;
        
        for (int n : lottos) {
            if (n == 0) zeros++;
            else if (numbers.contains(n)) match++;
        }
        
        return new int[] { rank(match + zeros), rank(match) };
    }
    
    private int rank(int num) {
        return switch (num) {
            case 6 -&amp;gt; 1;
            case 5 -&amp;gt; 2;
            case 4 -&amp;gt; 3;
            case 3 -&amp;gt; 4;
            case 2 -&amp;gt; 5;
            default -&amp;gt; 6;
        };
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순서에 관계 없이 &lt;i&gt;wins_num&lt;/i&gt; 배열 안에 있는 숫자와 일치하면&lt;i&gt; match&lt;/i&gt;가 하나씩 증가하도록 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;contains()&lt;/i&gt; 를 사용하기 위해 먼저 &lt;i&gt;wins_num&lt;/i&gt; 배열을 List로 바꿔주었다.&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;i&gt;lottos&lt;/i&gt; 배열 안에 있는 숫자를 하나씩 비교하여,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 해당 숫자가 0이면 &lt;i&gt;zeros&lt;/i&gt;에 1을,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 해당 숫자가 &lt;i&gt;numbers&lt;/i&gt; 안에 포함되어 있다면 &lt;i&gt;match&lt;/i&gt;에 1을 더해주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 &lt;i&gt;rank&lt;/i&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;i&gt;rank&lt;/i&gt; 는 switch 문을 사용해서 작성했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;case문을 ' -&amp;gt; ' 라는 표기식을 사용하면 보다 더 간략하게 switch-case 문을 작성할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래머스</category>
      <author>이서라다</author>
      <guid isPermaLink="true">https://sxxlx.tistory.com/78</guid>
      <comments>https://sxxlx.tistory.com/78#entry78comment</comments>
      <pubDate>Thu, 4 Jun 2026 11:15:53 +0900</pubDate>
    </item>
    <item>
      <title>[내일배움캠프] 260602 TIL #19 모니터링 시스템</title>
      <link>https://sxxlx.tistory.com/77</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드카타&lt;/b&gt;&lt;/h2&gt;
&lt;figure id=&quot;og_1780380519525&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[프로그래머스] 136798번 - 기사단원의 무기 [Java]&quot; data-og-description=&quot;프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제 제출한 코드import java.util.Arrays;class Solution { public int solution(int number, int limit, &quot; data-og-host=&quot;sxxlx.tistory.com&quot; data-og-source-url=&quot;https://sxxlx.tistory.com/76&quot; data-og-url=&quot;https://sxxlx.tistory.com/76&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/IwdKf/dJMb8XSc2IN/xn4hPdG0nGOUlcsKDMJ3S1/img.png?width=800&amp;amp;height=494&amp;amp;face=0_0_800_494,https://scrap.kakaocdn.net/dn/ccjnn2/dJMb88Gcd0S/o67tcqb7ZP3s5M8CuKgk50/img.png?width=800&amp;amp;height=494&amp;amp;face=0_0_800_494,https://scrap.kakaocdn.net/dn/bpTPwQ/dJMb83kAdss/MRdQctYI4LC9hlD25pq8uK/img.png?width=932&amp;amp;height=576&amp;amp;face=0_0_932_576&quot;&gt;&lt;a href=&quot;https://sxxlx.tistory.com/76&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://sxxlx.tistory.com/76&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/IwdKf/dJMb8XSc2IN/xn4hPdG0nGOUlcsKDMJ3S1/img.png?width=800&amp;amp;height=494&amp;amp;face=0_0_800_494,https://scrap.kakaocdn.net/dn/ccjnn2/dJMb88Gcd0S/o67tcqb7ZP3s5M8CuKgk50/img.png?width=800&amp;amp;height=494&amp;amp;face=0_0_800_494,https://scrap.kakaocdn.net/dn/bpTPwQ/dJMb83kAdss/MRdQctYI4LC9hlD25pq8uK/img.png?width=932&amp;amp;height=576&amp;amp;face=0_0_932_576');&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;[프로그래머스] 136798번 - 기사단원의 무기 [Java]&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제 제출한 코드import java.util.Arrays;class Solution { public int solution(int number, int limit,&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;sxxlx.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Today I Learned!&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;실습한 내용은 아래 깃허브에 올려두었다.&lt;/p&gt;
&lt;figure id=&quot;og_1780380698372&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - seola12e/nbc-monitor&quot; data-og-description=&quot;Contribute to seola12e/nbc-monitor development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/seola12e/nbc-monitor&quot; data-og-url=&quot;https://github.com/seola12e/nbc-monitor&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bCWI8y/dJMb9iIN6co/lcrxXeoUnWCSQWa4SisSAK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/eCNHpM/dJMb9jOt5gO/b0keO1E8n6POAO3VZxhrn1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/seola12e/nbc-monitor&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/seola12e/nbc-monitor&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bCWI8y/dJMb9iIN6co/lcrxXeoUnWCSQWa4SisSAK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/eCNHpM/dJMb9jOt5gO/b0keO1E8n6POAO3VZxhrn1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - seola12e/nbc-monitor&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to seola12e/nbc-monitor development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SpringBoot Actuator, Prometheus, Grafana + Slack Alert Setting, Loki 에 대해 학습했다.&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;정리 노트&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;모니터링&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모니터링은 시스템의 성능, 안정성 및 가용성을 실시간으로 관찰하고 측정하는 과정이다. 모니터링 도구를 사용하여 시스템의 상태를 추적하고, 문제를 감지하고, 성능을 최적화하며, 장애 발생 시 빠르게 대응 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Spring Boot Actuator&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Spring Boot&lt;span&gt; Actuator란&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Spring Boot 애플리케이션의 상태와 성능을 모니터링하고 관리할 수 있도록 다양한 엔드포인트를 제공하는 기능으로, Actuator는 헬스 체크, 메트릭스, 환경 정보, 로그 정보 등 여러 가지 중요한 정보를 쉽게 확인할 수 있도록 도와준다.&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;아래의 의존성을 build.gradle에 추가하여 Spring Boot Actuator를 사용할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1780380988129&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;implementation 'org.springframework.boot:spring-boot-starter-actuator'&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;Actuator는 기본적으로 여러 엔드포인트를 제공하는데, 이러한 엔드포인트는 &lt;b&gt;/actuator&lt;/b&gt; 경로 하위에 위치하며, 각각의 엔드포인트는 다양한 정보를 제공한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-02 오후 3.17.17.png&quot; data-origin-width=&quot;719&quot; data-origin-height=&quot;528&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ViecW/dJMcaglo8Dg/zLwyqoyKUUOQykPs6nSqS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ViecW/dJMcaglo8Dg/zLwyqoyKUUOQykPs6nSqS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ViecW/dJMcaglo8Dg/zLwyqoyKUUOQykPs6nSqS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FViecW%2FdJMcaglo8Dg%2FzLwyqoyKUUOQykPs6nSqS1%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;719&quot; height=&quot;528&quot; data-filename=&quot;스크린샷 2026-06-02 오후 3.17.17.png&quot; data-origin-width=&quot;719&quot; data-origin-height=&quot;528&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Prometheus&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Prometheus는 오픈소스 시스템 모니터링 및 경고 도구로, SoundCloud에서 시작되어 현재는 Cloud Native Computing Foundation(CNCF)에서 호스팅하고 있다.&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;Prometheus를 설치한 후 &lt;b&gt;/actuator/prometheus&lt;/b&gt; 경로로 접속하면 프로메테우스 매트릭스를 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-02 오후 3.20.03.png&quot; data-origin-width=&quot;1227&quot; data-origin-height=&quot;914&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dnAwgz/dJMcacwzQlt/qmaowB1v3G28Jf2qz7R3a0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dnAwgz/dJMcacwzQlt/qmaowB1v3G28Jf2qz7R3a0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dnAwgz/dJMcacwzQlt/qmaowB1v3G28Jf2qz7R3a0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdnAwgz%2FdJMcacwzQlt%2FqmaowB1v3G28Jf2qz7R3a0%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;1227&quot; height=&quot;914&quot; data-filename=&quot;스크린샷 2026-06-02 오후 3.20.03.png&quot; data-origin-width=&quot;1227&quot; data-origin-height=&quot;914&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Grafana&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Grafana는 오픈소스 데이터 시각화 및 모니터링 도구로, 다양한 데이터 소스를 지원하여 데이터를 시각화하고 분석할 수 있도록 돕는다. Grafana는 대시보드를 생성하고, 데이터를 그래프나 차트 형태로 표현하며, 알림 기능을 제공하여 모니터링을 강화할 수 있다.&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;아래는 Prometheus 를 연결한 후 어플리케이션을 띄웠을 때의 그라파나 대시보드 화면이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-02 오후 3.22.38.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;851&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bw9vZq/dJMcadPHU0A/KsMx3ytMVlE3UlAEuA90sK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bw9vZq/dJMcadPHU0A/KsMx3ytMVlE3UlAEuA90sK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bw9vZq/dJMcadPHU0A/KsMx3ytMVlE3UlAEuA90sK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbw9vZq%2FdJMcadPHU0A%2FKsMx3ytMVlE3UlAEuA90sK%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;1920&quot; height=&quot;851&quot; data-filename=&quot;스크린샷 2026-06-02 오후 3.22.38.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;851&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;그라파나에서 Slack으로 알림을 보낼 수도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 어플리케이션이 다운됐을 때 Slack으로 알림을 전송받으면 서버를 복구하는 데의 시간을 절약할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-02 오후 3.26.52.png&quot; data-origin-width=&quot;1254&quot; data-origin-height=&quot;752&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lcvO4/dJMcajh7ZGO/A4rtHeW7Feju1HMFgnGB6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lcvO4/dJMcajh7ZGO/A4rtHeW7Feju1HMFgnGB6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lcvO4/dJMcajh7ZGO/A4rtHeW7Feju1HMFgnGB6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlcvO4%2FdJMcajh7ZGO%2FA4rtHeW7Feju1HMFgnGB6K%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;1254&quot; height=&quot;752&quot; data-filename=&quot;스크린샷 2026-06-02 오후 3.26.52.png&quot; data-origin-width=&quot;1254&quot; data-origin-height=&quot;752&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-02 오후 3.27.18.png&quot; data-origin-width=&quot;583&quot; data-origin-height=&quot;228&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vocEw/dJMcah5Kan0/nX4EOwwj1Thpk7UaCCILh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vocEw/dJMcah5Kan0/nX4EOwwj1Thpk7UaCCILh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vocEw/dJMcah5Kan0/nX4EOwwj1Thpk7UaCCILh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvocEw%2FdJMcah5Kan0%2FnX4EOwwj1Thpk7UaCCILh0%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;583&quot; height=&quot;228&quot; data-filename=&quot;스크린샷 2026-06-02 오후 3.27.18.png&quot; data-origin-width=&quot;583&quot; data-origin-height=&quot;228&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;Loki&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Loki는 Grafana Labs에서 개발한 로그 집계 시스템으로, Prometheus의 메트릭 수집 방식과 유사하게 로그 데이터를 수집하고 쿼리할 수 있도록 설계되었다. Loki는 주로 로그 데이터를 저장하고, 이를 Grafana를 통해 시각화하는 데 사용된다. Loki의 주요 특징 중 하나는 라벨 기반의 메타데이터를 사용한다는 것인데, 이 덕분에 로그를 효율적으로 검색할 수 있다.&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;아래의 의존성을 build.gradle에 추가하여 loki를 사용할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1780381722636&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;implementation 'com.github.loki4j:loki-logback-appender:1.5.1'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;/ready&lt;/b&gt; &lt;span&gt;&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;스크린샷 2026-06-02 오후 3.30.19.png&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;122&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IPU4L/dJMcadhW9et/Ae1iRlcEkKW9ntXfMqBSJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IPU4L/dJMcadhW9et/Ae1iRlcEkKW9ntXfMqBSJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IPU4L/dJMcadhW9et/Ae1iRlcEkKW9ntXfMqBSJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIPU4L%2FdJMcadhW9et%2FAe1iRlcEkKW9ntXfMqBSJk%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;368&quot; height=&quot;122&quot; data-filename=&quot;스크린샷 2026-06-02 오후 3.30.19.png&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;122&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;controller와 logback을 간단히 작성한 후, 루트에 접속하면 403 Forbidden 되도록 설정해두었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 번 요청 후 SampleController 에서 발생한 INFO 레벨의 로그만 보도록 설정하면 아래와 같이 해당 로그들만 볼 수 있었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-02 오후 3.33.19.png&quot; data-origin-width=&quot;1605&quot; data-origin-height=&quot;724&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwJOFm/dJMcaiQ3xDW/Kb3zz67VlF9AqtW4iGJrk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwJOFm/dJMcaiQ3xDW/Kb3zz67VlF9AqtW4iGJrk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwJOFm/dJMcaiQ3xDW/Kb3zz67VlF9AqtW4iGJrk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwJOFm%2FdJMcaiQ3xDW%2FKb3zz67VlF9AqtW4iGJrk0%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;1605&quot; height=&quot;724&quot; data-filename=&quot;스크린샷 2026-06-02 오후 3.33.19.png&quot; data-origin-width=&quot;1605&quot; data-origin-height=&quot;724&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-02 오후 3.34.06.png&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;564&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb8IKL/dJMcaf05rf9/Gp8jGAKQtkqDs4gAXK9I3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb8IKL/dJMcaf05rf9/Gp8jGAKQtkqDs4gAXK9I3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb8IKL/dJMcaf05rf9/Gp8jGAKQtkqDs4gAXK9I3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb8IKL%2FdJMcaf05rf9%2FGp8jGAKQtkqDs4gAXK9I3k%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;1206&quot; height=&quot;564&quot; data-filename=&quot;스크린샷 2026-06-02 오후 3.34.06.png&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;564&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>내일배움캠프/TIL</category>
      <category>til</category>
      <category>내일배움캠프</category>
      <author>이서라다</author>
      <guid isPermaLink="true">https://sxxlx.tistory.com/77</guid>
      <comments>https://sxxlx.tistory.com/77#entry77comment</comments>
      <pubDate>Tue, 2 Jun 2026 15:34:15 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 136798번 - 기사단원의 무기 [Java]</title>
      <link>https://sxxlx.tistory.com/76</link>
      <description>&lt;figure id=&quot;og_1780367593239&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/136798?language=java&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cnpJzX/dJMb9hC8mzI/prRV8mpErqwbHzu404XlNk/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/bvUsrq/dJMb9jOt3sG/jEXjUSUVHBsWllN5z78Dr1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/136798?language=java&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/136798?language=java&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cnpJzX/dJMb9hC8mzI/prRV8mpErqwbHzu404XlNk/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/bvUsrq/dJMb9jOt3sG/jEXjUSUVHBsWllN5z78Dr1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p 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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-02 오전 11.34.21.png&quot; data-origin-width=&quot;932&quot; data-origin-height=&quot;576&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/be8Shc/dJMcaffMS7y/2Y7KtV3hZQcP7e67lqgmLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/be8Shc/dJMcaffMS7y/2Y7KtV3hZQcP7e67lqgmLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/be8Shc/dJMcaffMS7y/2Y7KtV3hZQcP7e67lqgmLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbe8Shc%2FdJMcaffMS7y%2F2Y7KtV3hZQcP7e67lqgmLK%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;932&quot; height=&quot;576&quot; data-filename=&quot;스크린샷 2026-06-02 오전 11.34.21.png&quot; data-origin-width=&quot;932&quot; data-origin-height=&quot;576&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;제출한 코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1780367633816&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.Arrays;

class Solution {
    public int solution(int number, int limit, int power) {
        
        int[] counts = new int[number];
        
        for (int i = 1; i &amp;lt;= number; i++) {
            int count = countDivisor(i);
            
            if (count &amp;gt; limit) counts[i-1] = power;
            else counts[i-1] = count;
        }
        
        return Arrays.stream(counts).sum();
    }

    private int countDivisor(int num) {
        double sqrt = Math.sqrt(num);
        int count = 1;
        
        for (int i = 2; i &amp;lt;= sqrt; i++) {
            if (num % i == 0) count++;
        }
        
        return sqrt == Math.floor(sqrt) ? count * 2 - 1 : count * 2;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;약수의 개수를 구하는 알고리즘은 아래의 글에 간단히 적어두었다.&lt;/p&gt;
&lt;figure id=&quot;og_1780367797335&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;약수의 개수 알고리즘&quot; data-og-description=&quot;public int countDivisor(int num) { double sqrt = Math.sqrt(num); int count = 1; for (int i = 2; i 1부터 n까지의 숫자를 i로 나누어 떨어지는 수를 count 에 더하면 시간 복잡도가 O(n)이 나오게 된다.하지만, 약수의 개수&quot; data-og-host=&quot;sxxlx.tistory.com&quot; data-og-source-url=&quot;https://sxxlx.tistory.com/75&quot; data-og-url=&quot;https://sxxlx.tistory.com/75&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dNAp0s/dJMb8Rj9ggK/eke1nUeZuu2vZdc9dtkXT0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bDJNXl/dJMb8XkmDtz/Aomd4FkBOvIAQJ9ivKlDrk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://sxxlx.tistory.com/75&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://sxxlx.tistory.com/75&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dNAp0s/dJMb8Rj9ggK/eke1nUeZuu2vZdc9dtkXT0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bDJNXl/dJMb8XkmDtz/Aomd4FkBOvIAQJ9ivKlDrk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;약수의 개수 알고리즘&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;public int countDivisor(int num) { double sqrt = Math.sqrt(num); int count = 1; for (int i = 2; i 1부터 n까지의 숫자를 i로 나누어 떨어지는 수를 count 에 더하면 시간 복잡도가 O(n)이 나오게 된다.하지만, 약수의 개수&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;sxxlx.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배열에 약수의 개수를 넣어서 마지막에 합을 구하여 return 하도록 작성했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;약수의 개수를 구했을 때, 만약 limit 보다 더 많으면, 지정된 power를 counts 배열에 넣도록 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래머스</category>
      <author>이서라다</author>
      <guid isPermaLink="true">https://sxxlx.tistory.com/76</guid>
      <comments>https://sxxlx.tistory.com/76#entry76comment</comments>
      <pubDate>Tue, 2 Jun 2026 11:37:54 +0900</pubDate>
    </item>
    <item>
      <title>약수의 개수 알고리즘</title>
      <link>https://sxxlx.tistory.com/75</link>
      <description>&lt;pre id=&quot;code_1780365004218&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public int countDivisor(int num) {
    double sqrt = Math.sqrt(num);
    int count = 1;

    for (int i = 2; i &amp;lt;= sqrt; i++) {
        if (num % i == 0) count++;
    }

    return sqrt == Math.floor(sqrt) ? count * 2 - 1 : count * 2;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1부터 n까지의 숫자를 i로 나누어 떨어지는 수를 count 에 더하면 시간 복잡도가 O(n)이 나오게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, 약수의 개수를 구할 때에는 해당 숫자의 제곱근까지만을 구한 후 2배를 해주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;20을 예로 들자면, 20의 제곱근은 4.xxx이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;20을 1부터 4까지 각각 나누어서 나누어 떨어지는 수는 아래와 같다.&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;20 % 1 = 0&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;20 % 2 = 0&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;20 % 3 = 2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;20 % 4 = 0&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 1, 2, 4는 20의 약수가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번엔 1, 2, 4로 20을 나누게 되면 아래와 같다.&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;20 / 1 = 20&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;20 / 2 = 10&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;20 / 4 = 5&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;따라서 5, 10, 20도 20의 약수가 된다.&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;위와 같은 방식으로 약수를 구하게 되면 시간 복잡도도 O(sqrt(n))으로 줄어들게 된다.&lt;/p&gt;</description>
      <category>Algorithm</category>
      <author>이서라다</author>
      <guid isPermaLink="true">https://sxxlx.tistory.com/75</guid>
      <comments>https://sxxlx.tistory.com/75#entry75comment</comments>
      <pubDate>Tue, 2 Jun 2026 11:01:08 +0900</pubDate>
    </item>
    <item>
      <title>소수 찾기 알고리즘</title>
      <link>https://sxxlx.tistory.com/74</link>
      <description>&lt;pre id=&quot;code_1780019345041&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public boolean isPrime(int n) {
    for (int i = 2; i*i &amp;lt;= n; i++) {
        if (n % i == 0) 
        	return false;
    }
    
    return true;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm</category>
      <author>이서라다</author>
      <guid isPermaLink="true">https://sxxlx.tistory.com/74</guid>
      <comments>https://sxxlx.tistory.com/74#entry74comment</comments>
      <pubDate>Fri, 29 May 2026 10:49:15 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 159994번 - 카드 뭉치 [Java]</title>
      <link>https://sxxlx.tistory.com/73</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1779415337813&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/159994?language=java&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/sLcli/dJMb88GaUsi/nJ3HHKtk84e57E7cM9mBsk/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/b5268i/dJMb81G3jXP/qrz9QlOkv8OVFQLH7r96Ck/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/159994?language=java&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/159994?language=java&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/sLcli/dJMb88GaUsi/nJ3HHKtk84e57E7cM9mBsk/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/b5268i/dJMb81G3jXP/qrz9QlOkv8OVFQLH7r96Ck/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p 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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-22 오전 11.03.32.png&quot; data-origin-width=&quot;923&quot; data-origin-height=&quot;799&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/saFua/dJMcahR0ZUS/S7JeAk67A24OyIayavrhw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/saFua/dJMcahR0ZUS/S7JeAk67A24OyIayavrhw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/saFua/dJMcahR0ZUS/S7JeAk67A24OyIayavrhw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsaFua%2FdJMcahR0ZUS%2FS7JeAk67A24OyIayavrhw0%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;923&quot; height=&quot;799&quot; data-filename=&quot;스크린샷 2026-05-22 오전 11.03.32.png&quot; data-origin-width=&quot;923&quot; data-origin-height=&quot;799&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;제출한 코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1779415366205&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;

class Solution {
    public String solution(String[] cards1, String[] cards2, String[] goal) {

        List&amp;lt;String&amp;gt; c1 = new ArrayList&amp;lt;&amp;gt;(List.of(cards1));
        List&amp;lt;String&amp;gt; c2 = new ArrayList&amp;lt;&amp;gt;(List.of(cards2));

        for (int i = 0; i &amp;lt; goal.length; i++) {
            if (c1.indexOf(goal[i]) == 0) c1.remove(0);
            else if (c2.indexOf(goal[i]) == 0) c2.remove(0);
            else return &quot;No&quot;;
        }

        return &quot;Yes&quot;;
    }
}&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;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;먼저 String 배열 cards1, cards2를 List로 변환해주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 goal의 요소를 처음부터 비교해서 각 리스트의 0번째 인덱스에 위치하는지 확인한 후,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 c1의 0번째에 해당 요소가 위치하면 c1의 0번째 요소를 remove 해주고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;c2의 0번째에 해당 요소가 위치하면 c2의 0번째 요소를 remove 해주며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 둘 다 0번째 인덱스에 위치하지 않을 경우 goal의 문자열을 만들어낼 수 없기 때문에 그 즉시 &quot;No&quot;를 반환하도록 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래머스</category>
      <author>이서라다</author>
      <guid isPermaLink="true">https://sxxlx.tistory.com/73</guid>
      <comments>https://sxxlx.tistory.com/73#entry73comment</comments>
      <pubDate>Fri, 22 May 2026 11:08:42 +0900</pubDate>
    </item>
  </channel>
</rss>