<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>NA의 개발냥발</title>
    <link>https://yemi-devlog.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Mon, 13 Apr 2026 18:58:10 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>nyrimmm</managingEditor>
    <item>
      <title>[프로그래머스] 예상 대진표 (JAVA/자바)</title>
      <link>https://yemi-devlog.tistory.com/111</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;[문제 링크]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12985&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/12985&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #fcfcfc; border: 1px solid #A6A6A6; padding: 15px;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;&quot;&gt;N명의 참가자가 각각 1~N번을 배정받아서 토너먼트 형식의 게임에 참가한다. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;&quot;&gt;1번&amp;harr;2번, 3번&lt;span style=&quot;background-color: #fcfcfc; color: #333333; text-align: start;&quot;&gt;&amp;harr;4번,... N-1번&lt;span style=&quot;background-color: #fcfcfc; color: #333333; text-align: start;&quot;&gt;&amp;harr;&lt;/span&gt;N번 끼리 게임을 진행하고, 다음 라운드에 진출한 참가자들은 다시 1번부터 (N/2)번을 배정받아서 게임을 진행한다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;&quot;&gt;이 때, 처음 라운드에서 A번을 가진 참가자가 B번 참가자와 만나게 되는 라운드 번호를 구한다.&lt;br /&gt;A번 참가자와 B번 참가자는 서로 만날 때까지 항상 이긴다고 가정한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 풀이&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;알고리즘 분류&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이진탐색&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;최종 라운드에서 시작해서 아래로 내려가면서 a와 b가 만나는 라운드를 구한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;N = 2^x 일 때, N명의 참가자가 토너먼트 게임을 진행하면 총 x번의 라운드가 진행된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;answer의 초기값을 최대 라운드 수인 x로 설정하고, 전체 대진표를 반으로 나눠서 중간값을 mid라고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(두 구역이 범위는 각각 1~mid, (mid+1)~N)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;mid를 기준으로 a와 b가 어느 구역에 속해 있는지 확인한다.&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;a와 b가 서로 &lt;b&gt;다른&lt;/b&gt; 구역에 있을 경우, &lt;b&gt;answer 번의 라운드에서 a와 b가 만난다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;a와 b가 서로&lt;b&gt; 같은&lt;/b&gt; 구역에 있을 경우, answer번의 라운드보다 &lt;b&gt;더 낮은 라운드&lt;/b&gt;에서 만난다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr; answer을 -1 하고, a와 b가 있는 구역으로 범위를 변경한다.&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;위의 과정을 계속 반복하면서 a와 b가 서로 다른 구역에 있는 경우를 구한다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;전체코드(나의 풀이)&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1724081004469&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    public int solution(int n, int a, int b) {
        int answer = 0;
        int start = 1, end = n;
        
        //총 라운드 횟수 구하기
        int x = 1;
        for(int i = 1; i &amp;lt;= 20; i++) {
            x *= 2;
            if(x == n) {
                answer = i;
                break;
            }
        }
        
        while(answer &amp;gt; 0) {
            int mid = (start + end) / 2;
            if((a &amp;lt;= mid &amp;amp;&amp;amp; b &amp;gt; mid) || (a &amp;gt; mid &amp;amp;&amp;amp; b &amp;lt;= mid)) {
                break;
            } else {
                if(a &amp;gt; mid &amp;amp;&amp;amp; b &amp;gt; mid) {
                    start = mid + 1;
                } else if(a &amp;lt;= mid &amp;amp;&amp;amp; b &amp;lt;= mid) {
                    end = mid;
                }
                answer--;
            }
        }
        return answer;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;전체코드(다른 풀이)&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;1라운드부터 시작해서 위로 올라가면서 a와 b가 만나는 라운드르 구한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;A와 B는 서로 만나기 전까지 항상 이긴다고 가정하기 때문에, 매 라운드마다 번호가 바뀐다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;만약 현재 x번 참가자일 경우, 다음 라운드에서 부여받는 번호는 &lt;b&gt;(x+1)/2 번&lt;/b&gt;이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;ex) 현재 라운드 3번일 경우, 다음 라운드에는 (3+1)/2=2번&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 현재 라운드 6번일 경우, 다음 라운드에는 (6+1)/2=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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;while문을 돌면서 매 라운드마다 a와 b의 번호를 갱신하면서 두 참가자의 번호가 같아지는 시점을 찾는다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;두 참가자의 번호가 같아지는 시점이 두 참가자가 만나게 되는 라운드이다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1770717852582&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    public int solution(int n, int a, int b) {
        int answer = 1;
        
        while((a + 1) / 2 != (b + 1) / 2) {
            answer++;
            a = (a + 1) / 2;
            b = (b + 1) / 2;
        }
        return answer;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>PS/프로그래머스</category>
      <category>이진탐색</category>
      <category>프로그래머스</category>
      <author>nyrimmm</author>
      <guid isPermaLink="true">https://yemi-devlog.tistory.com/111</guid>
      <comments>https://yemi-devlog.tistory.com/111#entry111comment</comments>
      <pubDate>Tue, 10 Feb 2026 20:47:42 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 주차 요금 계산 (JAVA/자바)</title>
      <link>https://yemi-devlog.tistory.com/110</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;[문제 링크]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/92341&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/92341&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #fcfcfc; border: 1px solid #A6A6A6; padding: 15px;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;주차장의 요금표와 차량들의 입차, 출차 기록이 주어질 때, 차량별로 주차 요금을 계산해서 차량번호가 작은 자동차부터 순서대로 주차요금을 출력한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 누적 주차 시간 &amp;lt;= 기본 시간 : 기본 요금&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 누적 주차 시간 &amp;gt; 기본시간 : 기본요금 + (초과시간에 대해 단위시간당 요금 청구)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;-&amp;nbsp; 초과시간이 단위 시간으로 나누어떨어지지 않으면 올림해서 계산&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 어떤 차량이 입차된 후에 출차된 내역이 없다면 23:59에 출차된 것으로 간주하고 계산&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 풀이&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;알고리즘 분류&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;구현&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;HashMap&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;&quot;&gt;문제는 이해했는데 구현을 하는데 시간이 오래걸렸다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;&quot;&gt;처음에는 먼저 차량번호와 시각 기준 오름차순 정렬한 후에, 차량번호가 작은 순서부터 차례로 순회하면서 차량별 총 주차 시간을 구하려 했다. 근데 생각해보니 하나의 차량번호에 여러 개의 입출차 내역이 있는데, 굳이 이 많은 내역을 처음부터 정렬할 필요 없이 &lt;/span&gt;&lt;span style=&quot;&quot;&gt;차량별 총 주차시간을 모두 구한 후에 정렬해도 된다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;&quot;&gt;하나의 문자열로 되어있는 입출차내역을 시간, 분, 차량번호, 입출차내역으로 나눈다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1770623739261&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;String[] record = s.split(&quot; &quot;);
String[] time = record[0].split(&quot;:&quot;);

int hour = Integer.parseInt(time[0]);   //시간
int minute = Integer.parseInt(time[1]); //분
String number = record[1];  //차량번호
String state = record[2];   //입출차 내역&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;입출차내역이 &quot;IN&quot;이면 map에 삽입, &quot;OUT&quot;이면 map에서 같은 차량번호의 정보를 꺼내서 주차 시간을 계산한다. &amp;rarr; &lt;span style=&quot;background-color: #9feec3;&quot;&gt;calculate() 함수 사용&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1770623866771&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if(state.equals(&quot;IN&quot;)) {
    map.put(number, new int[]{hour, minute});
} else {
    int[] t = map.get(number);
    calculate(number, t[0], t[1], hour, minute);
}&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;한 번 순회가 끝나고 map에 남아있는 차량들은 입차내역은 있지만 출차내역이 없는 차량이다. &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;이 경우 23:59에 출차한 것으로 간주하고 주차 시간을 계산한다. &lt;b&gt;&amp;rarr;&amp;nbsp;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;calculate() 함수 사용&lt;/span&gt;&lt;/b&gt; &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1770624292477&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if(map.size() != 0) {
    ArrayList&amp;lt;String&amp;gt; list = new ArrayList&amp;lt;&amp;gt;(map.keySet());
    for(String key : list) {
        int[] t = map.get(key);
        calculate(key, t[0], t[1], 23, 59);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;차량별 총 주차 시간이 담겨 있는 sumMap을 사용해서 차량별 총 주차 요금을 계산한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;이 때, sumMap의 key들을 오름차순 정렬해서 차량번호가 작은 자동차부터 순서대로 계산할 수 있게 한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1770624447037&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ArrayList&amp;lt;String&amp;gt; keys = new ArrayList&amp;lt;&amp;gt;(sumMap.keySet());
Collections.sort(keys);

int[] answer = new int[sumMap.size()];
int idx = 0;
for(String key : keys) {
    int time = sumMap.get(key);

    int extraFee = 0;
    if(time &amp;gt; fees[0]) {
        double extraTime = Math.ceil((double)(time - fees[0]) / (double)fees[2]);
        extraFee = (int)extraTime * fees[3];
    }
    answer[idx] = fees[1] + extraFee;
    idx++;
}&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;전체코드&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1724081004469&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 {
    
    HashMap&amp;lt;String, Integer&amp;gt; sumMap = new HashMap&amp;lt;&amp;gt;();	//차랑번호별 총 주차 시간을 담는다.
    HashMap&amp;lt;String, int[]&amp;gt; map = new HashMap&amp;lt;&amp;gt;();	//차량번호별 입차 시각을 담는다.
    
    public int[] solution(int[] fees, String[] records) {
        //시간, 분, 차량번호, 내역별로 나누기
        for(String s : records) {
            String[] record = s.split(&quot; &quot;);
            String[] time = record[0].split(&quot;:&quot;);
            
            int hour = Integer.parseInt(time[0]);   //시간
            int minute = Integer.parseInt(time[1]); //분
            String number = record[1];  //차량번호
            String state = record[2];   //입출차 여부
            
            //&quot;IN&quot;이면 map에 삽입, &quot;OUT&quot;이면 map에서 같은 차량번호의 정보를 꺼내서 시간 계산
            if(state.equals(&quot;IN&quot;)) {
                map.put(number, new int[]{hour, minute});
            } else {
                int[] t = map.get(number);
                calculate(number, t[0], t[1], hour, minute);
            }
        }
        
        //출차 안된 차량들의 주차 시간 계산
        if(map.size() != 0) {
            ArrayList&amp;lt;String&amp;gt; list = new ArrayList&amp;lt;&amp;gt;(map.keySet());
            for(String key : list) {
                int[] t = map.get(key);
                calculate(key, t[0], t[1], 23, 59);
            }
        }
        
        //차량번호 기준 오름차순 정렬
        ArrayList&amp;lt;String&amp;gt; keys = new ArrayList&amp;lt;&amp;gt;(sumMap.keySet());
        Collections.sort(keys);
        
        //차량별 총 주차 요금 계산
        int[] answer = new int[sumMap.size()];
        int idx = 0;
        for(String key : keys) {
            int time = sumMap.get(key);
            
            int extraFee = 0;
            if(time &amp;gt; fees[0]) {
                double extraTime = Math.ceil((double)(time - fees[0]) / (double)fees[2]);
                extraFee = (int)extraTime * fees[3];
            }
            answer[idx] = fees[1] + extraFee;
            idx++;
        }
        
        return answer;
    }
    
    //차량별 총 주차 시간 계산
    public void calculate(String num, int inH, int intM, int outH, int outM) {          
        int tmp_h = outH - inH;
        int tmp_m = 0;
        if(outM &amp;lt; intM) {
            tmp_m = (60 + outM) - intM;
            tmp_h -= 1;
        } else {
            tmp_m = outM - intM;
        }

        int total = tmp_h * 60 + tmp_m;
        sumMap.put(num, sumMap.getOrDefault(num, 0) + total);
        map.remove(num); //map에서 같은 차량번호 정보 삭제
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>PS/프로그래머스</category>
      <category>HashMap</category>
      <category>구현</category>
      <category>프로그래머스</category>
      <author>nyrimmm</author>
      <guid isPermaLink="true">https://yemi-devlog.tistory.com/110</guid>
      <comments>https://yemi-devlog.tistory.com/110#entry110comment</comments>
      <pubDate>Mon, 9 Feb 2026 17:11:01 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 7490번 : 0 만들기 (JAVA/자바)</title>
      <link>https://yemi-devlog.tistory.com/109</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;[문제 링크]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/7490&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/7490&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #fcfcfc; border: 1px solid #A6A6A6; padding: 15px;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1 ~ N까지 오름차순으로 된 수열의 숫자들 사이에 '+', '-', ' '(공백) 를 적절하게 삽입한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이렇게 해서 만들어진 수식을 계산한 결과가 0이 되는 모든 수식을 찾는다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 풀이&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;알고리즘 분류&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문자열&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;완전탐색&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;깊이 우선 탐색(DFS)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;수식의 결과가 0이 되는 모든 수식을 찾아야 하기 때문에 완전탐색으로 모든 경우의 수를 탐색한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. 재귀함수를 사용해서 숫자들 사이에 +, - &quot; &quot;(공백) 중 하나를 선택해서 만들 수 있는 수식을 문자열 형태로 생성한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1770102792571&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dfs(num + 1, str + &quot; &quot; + (num+1));
dfs(num + 1, str + &quot;+&quot; + (num+1));
dfs(num + 1, str + &quot;-&quot; + (num+1));&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;하나의 수식이 완성되면 calculate() 함수로 수식의 결과값이 0 이 되는 경우를 찾는다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문자열로 된 수식을 숫자와 연산자(+, -)로 나눈 후 수식을 계산한다.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. 숫자와 숫자 사이가 &quot; &quot;(공백)인 경우, 공백을 제거한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &amp;nbsp; &quot;1 2-3&quot;인 경우, 공백을 제거하면 &quot;12-3&quot;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1770103189057&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;String express = str.replace(&quot; &quot;, &quot;&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2. +, - 의 앞뒤로 공백 한 칸씩을 추가한다.(여기서 추가한 &quot; &quot;(공백)을 기준으로 숫자와 연산자를 나누기 위해)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &amp;nbsp;&quot;1+2-3&quot; &amp;rarr; &quot;1 + 2 - 3&quot;&amp;rarr;&amp;nbsp; {&quot;1&quot;, &quot;+&quot;, &quot;2&quot;, &quot;-&quot;, &quot;3&quot;}&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1770105510153&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;String express1 = express.replace(&quot;+&quot;,  &quot; + &quot;).replace(&quot;-&quot;, &quot; - &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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3. 위의 express1 배열을 공백을 기준으로 나눠서 새로운 배열 strings를 생성한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1770105920197&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;String[] strings = express1.split(&quot; &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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;4. strings 배열을 처음부터 탐색하면서 +, -를 찾아서 계산한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1770101528751&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for(int i = 1; i &amp;lt; strings.length; i += 2) {
    if(strings[i].equals(&quot;+&quot;)) {
        sum += Integer.parseInt(strings[i + 1]);
    } else if (strings[i].equals(&quot;-&quot;)) {
        sum -= Integer.parseInt(strings[i + 1]);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;전체코드&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1724081004469&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.*;

public class Main {

    static int n;
    static StringBuilder sb = new StringBuilder();

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

        while(t &amp;gt; 0) {
            n = Integer.parseInt(br.readLine());
            dfs(1, &quot;1&quot;);
            sb.append(&quot;\n&quot;);
            t--;
        }
        System.out.println(sb);
    }

    public static void dfs(int num, String str) {
        if(num == n) {
            if(calculate(str) == 0) {   //수식을 계산에서 값이 0이면 sb에 추가
                sb.append(str + &quot; \n&quot;);
            }
            return;
        }

        dfs(num + 1, str + &quot; &quot; + (num+1));
        dfs(num + 1, str + &quot;+&quot; + (num+1));
        dfs(num + 1, str + &quot;-&quot; + (num+1));
    }

    public static int calculate(String str) {
        String express = str.replace(&quot; &quot;, &quot;&quot;);  //숫자와 숫자 사이 공백 제거

        /* +. - 앞뒤로 공백 한 칸씩을 추가한 후, &quot; &quot;(공백)을 기준으로 문자열을 쪼갠다.
          1+2-3 -&amp;gt; 1 + 2 - 3 -&amp;gt; {&quot;1&quot;, &quot;+&quot;, &quot;2&quot;, &quot;-&quot;, &quot;3&quot;}
        */
        String express1 = express.replace(&quot;+&quot;,  &quot; + &quot;).replace(&quot;-&quot;, &quot; - &quot;);
        String[] strings = express1.split(&quot; &quot;);

        int sum = Integer.parseInt(strings[0]);
        for(int i = 1; i &amp;lt; strings.length; i += 2) {
            if(strings[i].equals(&quot;+&quot;)) {
                sum += Integer.parseInt(strings[i + 1]);
            } else if (strings[i].equals(&quot;-&quot;)) {
                sum -= Integer.parseInt(strings[i + 1]);
            }
        }
        return sum;
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>PS/백준</category>
      <author>nyrimmm</author>
      <guid isPermaLink="true">https://yemi-devlog.tistory.com/109</guid>
      <comments>https://yemi-devlog.tistory.com/109#entry109comment</comments>
      <pubDate>Tue, 3 Feb 2026 17:09:09 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 야근지수 (JAVA/자바)</title>
      <link>https://yemi-devlog.tistory.com/108</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;[문제 링크]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12927&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/12927&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1770095806006&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/12927&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/djmkJd/dJMb9frAE8Z/KtF1wptYv5dQDppiH5pyN0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/eBjNX/dJMb8XkaBPl/wBQ9Uw4U9RJRHPtfZ8uQr1/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/12927&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12927&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/djmkJd/dJMb9frAE8Z/KtF1wptYv5dQDppiH5pyN0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/eBjNX/dJMb8XkaBPl/wBQ9Uw4U9RJRHPtfZ8uQr1/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;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #fcfcfc; border: 1px solid #A6A6A6; padding: 15px;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;야근피로도 = (N시간 동안 야근 후 남은 일의 각 작업량^2) 을 모두 더한 값&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;N시간동안 works 배열에 담긴 각 일의 작업량을 적절하게 처리했을 때, 야근 피로도의 최소값을 구한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1시간동안 작업량 1을 처리할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 풀이&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;알고리즘 분류&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;우선순위 큐(PriorityQueue)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;야근 피로도의 최소값을 구하려면 작업량이 가장 많은 일부터 처리해서 제곱근의 크기를 작게 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;PriorityQueue에 현재 남은 작업량을 담고, ollections.reverseOrder()로 내림차순 정렬한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;n번만큼 반복하면서 작업량이 가장 많은 일부터 -1 한다.&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작업량이 0인 경우에는 큐에 다시 넣지 않는다.&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;전체코드&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1724081004469&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 long solution(int n, int[] works) {
        long answer = 0;

        PriorityQueue&amp;lt;Integer&amp;gt; pq = new PriorityQueue&amp;lt;&amp;gt;(Collections.reverseOrder());
        
        for(int w : works) {
            pq.add(w);
        }
        
        while(n &amp;gt; 0 &amp;amp;&amp;amp; !pq.isEmpty()) {
            int poll = pq.poll();
            if((poll - 1) &amp;gt; 0) {
                pq.add(poll - 1);
            }
            n--;
        }
        
        while(!pq.isEmpty()) {
            int work = pq.poll();
            answer += work * work;
        }
        return answer;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>PS/프로그래머스</category>
      <category>PriorityQueue</category>
      <category>우선순위큐</category>
      <category>프로그래머스</category>
      <author>nyrimmm</author>
      <guid isPermaLink="true">https://yemi-devlog.tistory.com/108</guid>
      <comments>https://yemi-devlog.tistory.com/108#entry108comment</comments>
      <pubDate>Tue, 3 Feb 2026 15:26:07 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 1713번 : 후보 추천하기 (JAVA/자바)</title>
      <link>https://yemi-devlog.tistory.com/107</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;[문제 링크]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1713&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/1713&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #fcfcfc; border: 1px solid #A6A6A6; padding: 15px;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;N개의 사진틀에 추천받은 학생회장 후보 사진을 아래 규칙을 따라 게시할 때, 최종 후보들의 번호를 출력한다.&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. 추천받은 순서대로 사진을 사진틀에 게시한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2. N개의 사진틀 중&amp;nbsp;비어있는 사진틀이 없는 경우&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &amp;nbsp;2-1. 새롭게 추천받은 학생이 현재 게시된 학생에 포함된 경우, 해당 학생의 추천 횟수 + 1&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &amp;nbsp;2-2. 새롭게 추천받은 학생이 현재 게시된 학생에 포함되지 않은 경우, &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 현재까지 추천 받은 횟수가 가장 적은 학생 삭제 + 삭제한 자리에 새로운 학생 게시&lt;/span&gt;&lt;/p&gt;
&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 추천 받은 횟수가 가장 적은 학생이 2명 이상일 경우, 가장 오래된 학생 삭제&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 풀이&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;알고리즘 분류&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;구현&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;HashMap(LinkedHashMap)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문제를 읽고 이전에 풀었던 &lt;a href=&quot;https://yemi-devlog.tistory.com/102&quot;&gt;완주하지 못한 선수&lt;/a&gt;가 떠올랐다. HashMap의 getOrDefault() 함수를 사용해서 key값의 개수를 센다.&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;하지만 이 문제에서는 추천받은 &lt;b&gt;&quot;순서&quot;&lt;/b&gt;가 중요하기 때문에 요소가 삽입된 순서대로 저장되는&lt;b&gt;&amp;nbsp;&lt;span style=&quot;color: #8a3db6;&quot;&gt;LinkedHashMap&lt;/span&gt;&lt;/b&gt;을 사용해서 문제를 풀었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(학생 번호, 추천 횟수)쌍으로 값을 저장하고, getOrDefault() 함수를 사용해서 해당 key 값이 존재하면 value + 1, 존재하지 않으면 새로운 쌍을 생성해서 hashmap에 추가한다.&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;비어있는 사진틀이 없는 경우, 먼저 &lt;u&gt;새롭게 추천 받은 학생(new 학생)&lt;/u&gt;이 현재 게시되어 있는지 확인한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;게시되어 있지 않으면 현재 게시된 학생들 중에서 추천횟수가 가장 적은 한 명을 찾아서 삭제하고 &lt;u&gt;new 학생&lt;/u&gt;을 게시한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이미 게시되어 있으면 해당 학생의 추천 횟수 + 1&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1769501821572&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if(hm.size() == n &amp;amp;&amp;amp; !hm.containsKey(students[i])) {
    int minKey = 0;
    int minValue = 1001;
    //현재까지 추천횟수가 가장 적은 학생 탐색
    for(Integer key : hm.keySet()) {
        if (minValue &amp;gt; hm.get(key)) {
            minValue = hm.get(key);
            minKey = key;
        }
    }
    hm.remove(minKey);  //추천횟수가 가장 적은 학생 삭제
}&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;전체코드&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1724081004469&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        LinkedHashMap&amp;lt;Integer, Integer&amp;gt; hm = new LinkedHashMap&amp;lt;&amp;gt;();

        int n = Integer.parseInt(br.readLine());    //사진틀의 개수
        int m = Integer.parseInt(br.readLine());    //전체 학생 추천 횟수

        int[] students = Arrays.stream(br.readLine().split(&quot; &quot;)).mapToInt(Integer::parseInt).toArray();

        for(int i = 0; i &amp;lt; students.length; i++) {
            if(hm.size() == n &amp;amp;&amp;amp; !hm.containsKey(students[i])) {
                int minKey = 0;
                int minValue = 1001;
                //현재까지 추천횟수가 가장 적은 학생 탐색
                for(Integer key : hm.keySet()) {
                    if (minValue &amp;gt; hm.get(key)) {
                        minValue = hm.get(key);
                        minKey = key;
                    }
                }
                hm.remove(minKey);  //추천횟수가 가장 적은 학생 삭제
            }

            hm.put(students[i], hm.getOrDefault(students[i], 0) + 1);
        }

        Object[] array = hm.keySet().toArray();
        Arrays.sort(array);

        for (Object o : array) {
            System.out.print(o + &quot; &quot;);
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>PS/백준</category>
      <category>HashMap</category>
      <category>백준</category>
      <author>nyrimmm</author>
      <guid isPermaLink="true">https://yemi-devlog.tistory.com/107</guid>
      <comments>https://yemi-devlog.tistory.com/107#entry107comment</comments>
      <pubDate>Wed, 28 Jan 2026 12:01:57 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 2467번 : 용액 (JAVA/자바)</title>
      <link>https://yemi-devlog.tistory.com/106</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;[문제 링크]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2467&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/2467&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #fcfcfc; border: 1px solid #A6A6A6; padding: 15px;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;주어진 용액들 중에서 서로 다른 2개의 용액을 혼합해서 나온 값이 0에 가장 가까운 용액을 만들어 내는 두 용액을 구한다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 풀이&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;알고리즘 분류&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;투포인터&lt;/span&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;용액이 오름차순 정렬되어 있는 상태이므로 &lt;b&gt;가장 첫 번째 값 인덱스(left)와&lt;/b&gt;&amp;nbsp;&lt;b&gt;가장 마지막 값 인덱스(right)&lt;/b&gt;를 포인터로 지정한 후, 배열이 안쪽 방향으로 두 포인터를 움직이면서 0에 가까운 두 수를 구한다.&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. 0과 n-1 를 투 포인터 left, right로 지정한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2. left와 right 인덱스가 가리키는 두 값을 더한 값(sum)을 구한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3. &lt;span style=&quot;color: #8a3db6;&quot;&gt;Math.abs(sum) &amp;lt; minValue&lt;/span&gt;&amp;nbsp; sum 절대값이 현재 저장된 값보다 작을 경우 현재 저장된 값 업데이트&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;4-1.&lt;span style=&quot;color: #8a3db6;&quot;&gt; sum &amp;gt;= 0&lt;/span&gt;&amp;nbsp; 0보다 크거나 같을 경우 오른쪽 포인터 이동&lt;b&gt;(right 감소)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;4-2.&lt;span style=&quot;color: #8a3db6;&quot;&gt; sum &amp;lt; 0&lt;/span&gt;&amp;nbsp; 0보다 작을 경우 왼쪽 포인터 이동&lt;b&gt;(left 증가)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;전체코드&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1724081004469&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.*;
import java.util.*;

public class Main {

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

        int n = Integer.parseInt(br.readLine());    //전체 용액의 수

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

        int left = 0;
        int right = n - 1;

        int mixL = 0;
        int mixR = 0;
        long minValue = Long.MIN_VALUE;

        while(left &amp;lt; right) {
            long sum = array[left] + array[right];
            if(Math.abs(sum) &amp;lt; minValue) {
                mixL = left;
                mixR = right;
                minValue = Math.abs(sum);
            }

            if(sum &amp;gt;= 0) {
                //둘 다 양수이거나
                //|array[left]| &amp;lt; |array[right]|(양수의 절댓값이 더 큰 경우)
                right--;
            } else {
                //둘 다 음수이거나
                //|array[left]| &amp;gt; |array[right]|(음수의 절댓값이 더 큰 경우
                left++;
            }
        }
        System.out.println(array[mixL] + &quot; &quot; + array[mixR]);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>PS/백준</category>
      <category>백준</category>
      <category>투포인터</category>
      <author>nyrimmm</author>
      <guid isPermaLink="true">https://yemi-devlog.tistory.com/106</guid>
      <comments>https://yemi-devlog.tistory.com/106#entry106comment</comments>
      <pubDate>Wed, 14 Jan 2026 14:58:38 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 1092번 : 배 (JAVA/자바)</title>
      <link>https://yemi-devlog.tistory.com/105</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;[문제 링크]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt; &lt;b&gt;&lt;/b&gt;&lt;b&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1092&quot;&gt;https://www.acmicpc.net/problem/1092&lt;/a&gt;&lt;/b&gt; &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #fcfcfc; border: 1px solid #A6A6A6; padding: 15px;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;크레인 N대를 사용해서 박스 M개를 모두 옮기는 데 드는 시간의 최솟값을 구한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1분에 박스를 하나씩 옮길 수 있고, 모든 크레인은 동시에 움직인다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;각 크레인의 무게 제한보다 무거운 박스는 옮길 수 없다.&lt;/span&gt;&lt;/p&gt;
&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;모든 박스를 옮길 수 없는 경우 -1&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 풀이&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;알고리즘 분류&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그리디 알고리즘&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;정렬&lt;/span&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;크레인과 박스를 각각 내림차순 정렬한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;boxes.get(0) &amp;gt; crane.get(0)&lt;/span&gt;&amp;nbsp; 박스 무게의 최대값이 크레인 무게제한의 최대값보다 클 경우 모든 박스를 옮길 수 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333; text-align: start;&quot;&gt;1. 가장 무거운 박스부터 차례대로 탐색하면서 각 크레인이 해당 박스를 옮길 수 있는지 확인한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;&quot;&gt;2. 해당 박스를 옮길 수 있으면 크레인 사용 처리, 리스트에서 박스 제거&lt;/span&gt;&lt;span style=&quot;&quot;&gt;3. 모든 크레인이 한 번씩 사용되면 시간 증가&lt;/span&gt;&lt;span style=&quot;&quot;&gt;위의 과정을 모든 박스가 옮겨질 때까지 반복한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;전체코드&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1724081004469&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.*;
import java.util.*;

public class Main {

    static int n, m, cnt = 0;
    static ArrayList&amp;lt;Integer&amp;gt; crane = new ArrayList&amp;lt;&amp;gt;();
    static ArrayList&amp;lt;Integer&amp;gt; boxes = new ArrayList&amp;lt;&amp;gt;();

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

        n = Integer.parseInt(br.readLine());    //크레인 수

        st = new StringTokenizer(br.readLine());
        for (int i = 0; i &amp;lt; n; i++) {
            crane.add(Integer.parseInt(st.nextToken()));
        }

        m = Integer.parseInt(br.readLine());    //박스 수
        st = new StringTokenizer(br.readLine());
        for (int i = 0; i &amp;lt; m; i++) {
            boxes.add(Integer.parseInt(st.nextToken()));
        }

        Collections.sort(crane, Collections.reverseOrder());    //크레인 내림차순 정렬
        Collections.sort(boxes, Collections.reverseOrder());    //박스 내림차순 정렬

        //모든 박스를 배로 옮길 수 없는 경우
        if (boxes.get(0) &amp;gt; crane.get(0)) {
            System.out.println(-1);
            return;
        }

        while (!boxes.isEmpty()) {
            int craneIdx = 0;
            int boxIdx = 0;

            //박스를 모두 돌면서 1회차에 크레인으로 옮길 수 있는 박스 탐색
            while(boxIdx &amp;lt; boxes.size()) {
                if(craneIdx &amp;gt;= n) break;
                if(boxes.get(boxIdx) &amp;lt;= crane.get(craneIdx)) {  //크레인으로 박스를 옮길 수 있는 경우
                    boxes.remove(boxIdx);   //박스 제거
                    craneIdx++;
                } else {
                    boxIdx++;
                }
            }
            cnt++;
        }

        System.out.println(cnt);
        return;
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>PS/백준</category>
      <author>nyrimmm</author>
      <guid isPermaLink="true">https://yemi-devlog.tistory.com/105</guid>
      <comments>https://yemi-devlog.tistory.com/105#entry105comment</comments>
      <pubDate>Sun, 11 Jan 2026 02:52:48 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 14503번 : 로봇청소기 (JAVA/자바)</title>
      <link>https://yemi-devlog.tistory.com/104</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;[문제 링크]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/14503&quot;&gt;https://www.acmicpc.net/problem/14503&lt;/a&gt;&lt;/b&gt; &lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #fcfcfc; border: 1px solid #A6A6A6; padding: 15px;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #fcfcfc;&quot;&gt; 0-청소X,&amp;nbsp;1-벽&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;청소기가 작동하는 순서는 아래와 같다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #fcfcfc;&quot;&gt;1. 현재 칸이 아직 청소되지 않은 경우, 현재 칸 청소&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #fcfcfc;&quot;&gt;2. 현재 칸 주변 4칸 중 청소되지 않은 빈 칸이 없는 경우(4칸이 모두 청소된 경우)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #fcfcfc;&quot;&gt;&amp;nbsp; &amp;nbsp; 2-1. 바라보는 방향 기준 한 칸 후진할&amp;nbsp; 수 있다면, 후진 후 1으로 돌아감&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #fcfcfc;&quot;&gt;&amp;nbsp; &amp;nbsp; 2-2. 후진할 수 없는 경우(벽인 경우) stop&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #fcfcfc;&quot;&gt;3. 현재 칸 주변 4칸 중 청소되지 않은 빈 칸이 있는 경우&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #fcfcfc;&quot;&gt;&amp;nbsp; &amp;nbsp; 3-1. 청소기 반시계방향으로 90도 회전&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #fcfcfc;&quot;&gt;&amp;nbsp; &amp;nbsp; 3-2. 바라보는 방향 기준 앞쪽 칸이 청소되지 않은 경우, 한 칸 전진&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #fcfcfc;&quot;&gt;&amp;nbsp; &amp;nbsp; 3-3. 1으로 돌아감&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 풀이&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;알고리즘 분류&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;구현&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시뮬레이션&lt;/span&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문제에 주어진 청소기 작동 순서대로 현재 칸을 기준으로 상하좌우 칸을 탐색하면서 청소가 된 칸인지 되지 않은 칸인지 확인한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;청소가 되지 않은 칸은&lt;b&gt; 0&lt;/b&gt;, 청소가 된 칸은 &lt;b&gt;-1&lt;/b&gt;, 벽인 칸은 &lt;b&gt;1&lt;/b&gt; 로 구분한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;처음에는 청소가 된 칸과 벽인 칸을 둘 다 &lt;b&gt;&quot;로봇청소기가 갈 수 없는 공간&quot;&lt;/b&gt;으로 생각해서 똑같이 1로 처리했었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;하지만 이렇게 하면 &lt;u&gt;4칸 중 청소되지 않은 빈칸이 없는 경우&lt;/u&gt; 한 칸 후진을 해야하는데, 후진을 할 수 있는지 없는지 알 수 없다.(후진할 칸이 청소가 된 칸이면 후진 가능, 벽이면 후진 불가능)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그래서 청소가 된 칸은 -1, 벽인 칸은 1로 구분해서 풀이했다.&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;전체코드&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1762309425706&quot; class=&quot;java&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.*;
import java.util.*;

public class Main {

    static int n, m, r, c, d, count = 0;
    static int[][] rooms;
    static int[] dr = {-1, 0, 1, 0}; //북, 동, 남, 서
    static int[] dc = {0, 1, 0, -1};

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

        st = new StringTokenizer(br.readLine());
        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());

        st = new StringTokenizer(br.readLine());
        r = Integer.parseInt(st.nextToken());
        c = Integer.parseInt(st.nextToken());
        d = Integer.parseInt(st.nextToken()); //방향

        rooms = new int[n][m];
        for (int i = 0; i &amp;lt; n; i++) {
            st = new StringTokenizer(br.readLine());
            for (int j = 0; j &amp;lt; m; j++) {
                rooms[i][j] = Integer.parseInt(st.nextToken());
            }
        }
        clean();
        System.out.println(count);
    }

    public static void clean() {
        while(true) {
            //현재 칸이 청소되지 않은 경우 현재 칸 청소
            if (rooms[r][c] == 0) {
                rooms[r][c] = -1;   //청소완료 상태로 변경
                count++;    //청소횟수 증가
            }

            int cleanCnt = 0;   //이미 청소된 칸 or 벽의 개수
            
            //현재 칸의 주변 4칸 중 청소되지 않은 빈 칸이 있는지 탐색
            for (int i = 0; i &amp;lt; 4; i++) {
                d = (d == 0) ? 3 : d - 1; //반시계방향으로 90도 회전

                int nr = r + dr[d];
                int nc = c + dc[d];

                //방의 범위를 벗어나는 경우
                if(nr &amp;lt; 0 || nc &amp;lt; 0 || nr &amp;gt;= n || nc &amp;gt;= m)  continue;

                //이미 청소된 칸이거나 벽일 경우
                if (rooms[nr][nc] == 1 || rooms[nr][nc] == -1)  cleanCnt++;

                //청소되지 않은 빈 칸이 있는 경우 한 칸 전진
                if(rooms[nr][nc] == 0) {
                    r = nr;
                    c = nc;
                    break;
                }
            }

            //주변 4칸 중 청소되지 않은 빈 칸이 없는 경우
            if(cleanCnt == 4) {
                int nr = r - dr[d];
                int nc = c - dc[d];

                //범위를 벗어나거나 뒤쪽이 벽이라 후진할 수 없는 경우
                if(nr &amp;lt; 0 || nc &amp;lt; 0 || nr &amp;gt;= n || nc &amp;gt;= m || rooms[nr][nc] == 1) {
                    return;
                }
                //한 칸 후진
                r = nr;
                c = nc;
            }
        }

    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>PS/백준</category>
      <author>nyrimmm</author>
      <guid isPermaLink="true">https://yemi-devlog.tistory.com/104</guid>
      <comments>https://yemi-devlog.tistory.com/104#entry104comment</comments>
      <pubDate>Sat, 8 Nov 2025 15:37:35 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 17298번 : 오큰수 (JAVA/자바)</title>
      <link>https://yemi-devlog.tistory.com/103</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;[문제 링크]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/17298&quot;&gt;https://www.acmicpc.net/problem/17298&lt;/a&gt;&lt;/b&gt; &lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #fcfcfc; border: 1px solid #A6A6A6; padding: 15px;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;오큰수(NGE) : 현재 원소 Ai보다 오른쪽에 있으면서 Ai보다 큰 수 중에서 가장 왼쪽에 있는 수, 존재하지 않으면 -1&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;ex) &lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;A = {9, 5, 4, 8}인 경우 NGE(1) = -1, NGE(2) = 8, NGE(3) = 8, NGE(4) = -1&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 풀이&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;알고리즘 분류&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;스택&lt;/span&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문제에서 수열의 크기 N이&lt;b&gt; 최대 1,000,000(10^6)&lt;/b&gt; 이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그래서 단순하게 현재 원소를 기준으로 오른쪽에 있는 모든 원소를 다 비교해가며 오큰수를 찾으면 O(n^2)로 시간 초과가 나온다.&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;따라서 &lt;span style=&quot;background-color: #99cefa;&quot;&gt;Stack&lt;/span&gt; 을 사용하면 이 문제를 풀 수 있다.(다른 풀이를 참고했다.)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;스택에는 &lt;u&gt;&lt;b&gt;아직 오큰수를 찾지 못한 원소의 인덱스&lt;/b&gt;&lt;/u&gt; 를 담는다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;for문으로 수열을 돌면서 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;현재 수&lt;/b&gt;&lt;/span&gt;와 &lt;span style=&quot;color: #0593d3;&quot;&gt;&lt;b&gt;stack의 top을 인덱스로 하는 수&lt;/b&gt;&lt;/span&gt;를 비교한다.&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;현재 수&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&amp;nbsp;&amp;gt;&lt;span style=&quot;color: #0593d3;&quot;&gt; stack의 top을 인덱스로 하는 수&lt;/span&gt;&lt;/b&gt;이면 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;현재 수&lt;/b&gt;&lt;/span&gt;&lt;b&gt;가 &lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;stack의 top을 인덱스로 하는 수&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;의 오큰수이다.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;오큰수를 찾으면 &lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;stack의 top&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;을 stack에서&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; pop&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이 과정을 &lt;b&gt; &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;현재 수&lt;/b&gt; &lt;/span&gt;&lt;/b&gt;&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;stack의 top을 인덱스로 하는 수&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 를 만족하지 않을 때까지 반복한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이후 &lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;현재 수&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;의 인덱스를 stack에&lt;/span&gt;&lt;b&gt;&amp;nbsp;push&lt;/b&gt; &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;예시 1)&amp;nbsp;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;A = {9, 5, 4, 8}&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;1) 현재 수 9, stack{}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;stack이 비어있기 때문에 stack에 9의 인덱스 &lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;0&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&lt;b&gt;push&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&amp;rarr;&amp;nbsp;result : stack{&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;0&lt;/b&gt;&lt;/span&gt;} nge={0, 0, 0, 0}&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;2) 현재 수 5, stack{0}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;현재수(5)&lt;b&gt; &amp;lt;&lt;/b&gt;&amp;nbsp;stack.peek()의 수(9) 이므로 &lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;stack에 5의 인덱스 &lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;1 &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;b&gt;push&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&amp;rarr;&amp;nbsp;&lt;span style=&quot;color: #555555; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;result : stack{0, &lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;1&lt;/b&gt;&lt;/span&gt;} nge={0, 0, 0, 0}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;3) 현재 수 4, stack{0, 1}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;현재수(4)&lt;b&gt;&amp;nbsp;&amp;lt;&lt;/b&gt;&amp;nbsp;stack.peek()의 수(5) 이므로 &lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;stack에 4의 인덱스 &lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;2&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;b&gt;push&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&amp;rarr;&amp;nbsp;&lt;span style=&quot;color: #555555; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;result : stack{0, 1, &lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;2&lt;/b&gt;&lt;/span&gt;} nge={0, 0, 0, 0}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;2-1) 현재 수 8, stack{0, 1, 2}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;u&gt;현재수(8)&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; &amp;gt;&lt;/b&gt;&lt;/span&gt;&amp;nbsp;stack.peek()의 수(4)&lt;/u&gt; 이므로&lt;b&gt; 4의 오큰수=8&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;nge[&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;2&lt;/b&gt;&lt;/span&gt;]=8, stack에서 &lt;b&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;2&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;b&gt;pop&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&amp;rarr;&amp;nbsp;&lt;span style=&quot;color: #555555; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;result : stack{0, 1} nge={0, 0, 8, 0}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;2-2) &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;현재 수 8, stack{0, 1}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;u&gt;현재수(8)&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/b&gt;&amp;nbsp;stack.peek()의 수(5)&lt;/u&gt; 이므로&lt;b&gt; 5의 오큰수=8&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;nge[&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;1&lt;/b&gt;&lt;/span&gt;]=8, stack에서&lt;b&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt; 1&amp;nbsp;&lt;/span&gt;pop&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&amp;rarr;&amp;nbsp;&lt;span style=&quot;color: #555555; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;result : stack{0} nge={0, 8, 8, 0}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;2-3)&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;현재 수 8, stack{0}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;현재수(8) &amp;lt;&amp;nbsp;stack.peek()의 수(9)&amp;nbsp;이므로&lt;b&gt;&amp;nbsp;반복 끝, &lt;/b&gt;stack에 8의 인덱스 &lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;3&lt;/b&gt;&lt;/span&gt;&lt;b&gt; push&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&amp;rarr;&amp;nbsp;&lt;span style=&quot;color: #555555; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;result : stack{0, &lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;3&lt;/b&gt;&lt;/span&gt;} nge={0, 8, 8, 0}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;더 이상 탐색할 원소가 없고, stack에 남아있는 0, 3을 인덱스로 가지는 수 &lt;b&gt;9와 8의 오큰수=-1이 된다.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;따라서 &lt;u&gt;&lt;b&gt;nge={-1, 8, 8, -1}&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;예시 2)&amp;nbsp;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;A = {3, 5, 2, 7}&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;1) 현재 수 3, stack{}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;stack이 비어있기 때문에 stack에 3의 인덱스 &lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;0&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&lt;b&gt;push&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&amp;rarr;&amp;nbsp;result : stack{&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;0&lt;/b&gt;&lt;/span&gt;} nge={0, 0, 0, 0}&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;2) 현재 수 5, stack{0}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;u&gt;현재수(5)&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/span&gt;&amp;nbsp;stack.peek()의 수(3)&lt;/u&gt; 이므로&lt;b&gt;&amp;nbsp;3의 오큰수=5&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;nge[&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;0&lt;/b&gt;&lt;/span&gt;]=5, stack에서 &lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;0&lt;/b&gt;&lt;/span&gt; &lt;b&gt;pop&lt;/b&gt;이고 stack이 비어있기 때문에&lt;b&gt; 반복 끝, &lt;/b&gt;stack에 5의 인덱스 &lt;b&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;1&lt;/span&gt; push&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&amp;rarr; &lt;span style=&quot;color: #555555; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;result : stack{&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;1&lt;/b&gt;&lt;/span&gt;} nge={5, 0, 0, 0}&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;3) 현재 수 2, stack{1}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;현재수(2)&lt;b&gt;&amp;nbsp;&amp;lt;&lt;/b&gt;&amp;nbsp;stack.peek()의 수(5) 이므로 &lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;stack에 2의 인덱스 &lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;2&lt;/b&gt; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;b&gt;push&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&amp;rarr;&amp;nbsp;&lt;span style=&quot;color: #555555; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;result : stack{1, &lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;2&lt;/b&gt;&lt;/span&gt;} nge={5, 0, 0, 0}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;4-1) 현재 수 7, stack{1, 2}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;u&gt;현재수(7) &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/span&gt; stack의 peek()&lt;/u&gt;의 수(2) 이므로 2의 &lt;b&gt;오큰수=7&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;nge[&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;2&lt;/b&gt;&lt;/span&gt;]=7, stack에서 &lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;2&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&lt;b&gt;pop&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&amp;rarr;&amp;nbsp;&lt;span style=&quot;color: #555555; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;result : stack{1} nge={5, 0, 7, 0}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;4-2) 현재 수 7, stack{1}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;u&gt;현재수(7)&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/span&gt;&amp;nbsp;stack의 peek()&lt;/u&gt;의 수(5) 이므로 5의&amp;nbsp;&lt;b&gt;오큰수=7&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;nge[&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;1&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;]=7, stack에서&lt;/span&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;&amp;nbsp;1&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;pop&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&amp;rarr;&amp;nbsp;&lt;span style=&quot;color: #555555; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;result : stack{} nge={5, 7, 7, 0}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;4-3) 현재 수 7, stack{}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;stack이 비어있기 때문에 stack에 7의 인덱스 &lt;/span&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;3&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;push&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&amp;rarr;&amp;nbsp;&lt;span style=&quot;color: #555555; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;result : stack{3} nge={5, 7, 7, 0}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;더 이상 탐색할 원소가 없고, stack에 남아있는 3을 인덱스로 가지는 수 7&lt;b&gt;의 오큰수=-1이 된다.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;따라서&amp;nbsp;&lt;u&gt;&lt;b&gt;nge={5, 7, 7, -1}&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;전체코드&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1724081004469&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.*;
import java.util.*;

public class Main {

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

        int n = Integer.parseInt(br.readLine());

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

        Stack&amp;lt;Integer&amp;gt; stack = new Stack&amp;lt;&amp;gt;();
        for (int i = 0; i &amp;lt; n; i++) {
            //현재 수(numbers[i])와 스택의 최상단 수(numbers[stack.peek()]) 비교
            //현재 수가 오큰수인 경우
            while (!stack.isEmpty() &amp;amp;&amp;amp; numbers[stack.peek()] &amp;lt; numbers[i]) {
                nge[stack.peek()] = numbers[i];	//오큰수 저장
                stack.pop();	//stack에서 빼기
            }
            //stack에 현재 수의 인덱스 넣기
            stack.push(i);
        }

        //스택에 여전히 남아있는 수 -&amp;gt; 오큰수가 없는 경우이므로 -1
        while (!stack.isEmpty()) {
            nge[stack.pop()] = -1;
        }

        StringBuilder sb = new StringBuilder();
        for(int s : nge) {
            sb.append(s + &quot; &quot;);
        }

        System.out.println(sb);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000; background-color: #ffc1c8;&quot;&gt;&lt;b&gt;오답 코드&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;처음에 풀었던 방식(시간초과)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;for문으로 수열의 처음부터 끝까지 돌면서 현재 원소의 오른쪽에 있는 수들과 비교해서 현재 원소보다 큰 수가 나오면 break, 큰 수가 없다면 -1(오큰수가 존재하지 않음)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;하지만 이렇게 하면 최악의 경우 각 원소의 오큰수를 구할 때마다 오른쪽에 있는 모든 원소와 비교해야해서 시간복잡도가 O(n^2)로 시간초과가 발생한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;예를 들어 수열 A = {9, 8, 7, 6} 일 경우, NGE={-1, -1, -1, -1}인데 각 원소가 오른쪽에 있는 모든 원소와 비교하게 된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1761036828874&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.*;
import java.util.*;

public class Main {

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

        int n = Integer.parseInt(br.readLine());

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

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i &amp;lt; n - 1; i++) {
            int j = i + 1;
            boolean flag = false;   //오른쪽에 더 큰 수가 있는지 없는지 확인하는 플래그
            while(j &amp;lt; n) {
                if(numbers[i] &amp;lt; numbers[j]) {
                    sb.append(numbers[j] + &quot; &quot;);
                    flag = true;
                    break;
                }
                j++;
            }
            if(!flag)   sb.append(-1 + &quot; &quot;);
        }

        sb.append(-1);

        System.out.println(sb);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;[참고]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a href=&quot;https://st-lab.tistory.com/196&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://st-lab.tistory.com/196&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>PS/백준</category>
      <author>nyrimmm</author>
      <guid isPermaLink="true">https://yemi-devlog.tistory.com/103</guid>
      <comments>https://yemi-devlog.tistory.com/103#entry103comment</comments>
      <pubDate>Thu, 23 Oct 2025 01:43:31 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스]완주하지 못한 선수 (JAVA/자바)</title>
      <link>https://yemi-devlog.tistory.com/102</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;[문제 링크]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42576&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/42576&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1761112907134&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/42576&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fE4sO/hyZLWRfjPW/xef8mzSAFgnFlRkj7K9ej1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/cmEv2n/hyZL3v1gcR/buX3cyvj2o3Exp9D8PBtKk/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/42576&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42576&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fE4sO/hyZLWRfjPW/xef8mzSAFgnFlRkj7K9ej1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/cmEv2n/hyZL3v1gcR/buX3cyvj2o3Exp9D8PBtKk/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;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #fcfcfc; border: 1px solid #A6A6A6; padding: 15px;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;마라톤 참여자 배열 participant 와 완주자 배열 completion이 있을 때, 완주하지 못한 한 명을 구한다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 풀이&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;알고리즘 분류&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HashMap&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;1. 배열 사용(내가 푼 방식)&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1761113826739&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[] participant, String[] completion) {
        String answer = &quot;&quot;;
      
        //참가자, 완주자 알파벳 순으로 정렬
        Arrays.sort(participant);
        Arrays.sort(completion);

        for(int i = 0; i &amp;lt; participant.length - 1; i++) { 
            if(!participant[i].equals(completion[i])) {
                return participant[i];
            }
        }
        return participant[participant.length - 1];
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;참가자, 완주자 배열을 각각 알파벳 오름차순으로 정렬하고, 앞에서부터 하나씩 비교한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;동일하지 않으면 participant 배열의 선수가 완주하지 못한 선수이므로 출력하고, &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;비교 후에도 다른게 없다면 participant 배열의 마지막 선수가 완주하지 못한 선수이다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;2. HashMap 사용&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1724081004469&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[] participant, String[] completion) {
        String answer = &quot;&quot;;
        
        HashMap&amp;lt;String, Integer&amp;gt; hm = new HashMap&amp;lt;&amp;gt;();
        
        //map에 참가자 추가
        for(String p : participant) {
            hm.put(p, hm.getOrDefault(p, 0) + 1);
        }
        
        //map에서 완주한 선수 제거
        for(String c : completion) {
            hm.put(c, hm.get(c) - 1);
        }
        
        for(String key : hm.keySet()) {
            if(hm.get(key) != 0) {
                answer = key;
                break;
            }
        }
        
        return answer;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;참여자 배열 participant를 돌면서 &amp;lt;참여자명, 참여자수&amp;gt; 쌍으로 HashMap에 참여자를 모두 넣는다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;보통은 value=1이지만 동명이인의 경우 value가 2 이상이 될 수 있다. 이 때 getOrDefault() 함수를 사용해서 동명이인까지 세서 값을 저장한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&amp;rarr; getOrDefault(Object key, V DefaultValue) &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp;: 찾는 key가 존재하면 해당 key의 value 값 반환, 존재하지 않으면 DefaultValue 반환&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;완주자 배열 completion을 돌면서 map에서 해당 선수를 key로 가진 value를 1씩 감소해서 완주자를 제거한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;마지막으로 map을 돌면서 value가 0 이 아닌 key를 찾아서 완주하지 못한 선수를 출력한다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>PS/프로그래머스</category>
      <author>nyrimmm</author>
      <guid isPermaLink="true">https://yemi-devlog.tistory.com/102</guid>
      <comments>https://yemi-devlog.tistory.com/102#entry102comment</comments>
      <pubDate>Wed, 22 Oct 2025 15:41:27 +0900</pubDate>
    </item>
  </channel>
</rss>