<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>알고리즘</title>
    <link>https://sy4406.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sun, 7 Jun 2026 13:44:50 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>SEUNG YONG</managingEditor>
    <item>
      <title>[소프티어 Level2] 비밀 메뉴(Java)</title>
      <link>https://sy4406.tistory.com/89</link>
      <description>&lt;pre id=&quot;code_1691045268326&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.io.*;


public class Main
{
    public static void main(String args[]) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] str = br.readLine().split(&quot; &quot;);
        int M = Integer.parseInt(str[0]);
        int N = Integer.parseInt(str[1]);
        int K = Integer.parseInt(str[2]);

        String target = br.readLine();
        String total = br.readLine();
        if(total.contains(target))
            System.out.println(&quot;secret&quot;);
        else
            System.out.println(&quot;normal&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <author>SEUNG YONG</author>
      <guid isPermaLink="true">https://sy4406.tistory.com/89</guid>
      <comments>https://sy4406.tistory.com/89#entry89comment</comments>
      <pubDate>Thu, 3 Aug 2023 15:47:50 +0900</pubDate>
    </item>
    <item>
      <title>[소프티어 2Level] 장애물 인식 프로그램(Java)</title>
      <link>https://sy4406.tistory.com/88</link>
      <description>&lt;pre id=&quot;code_1691044674853&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.io.*;


public class Main
{
    static int[][] graph;
    static int[] dx = {0,1,0,-1};
    static int[] dy = {-1,0,1,0};
    static int n; 
    public static void main(String args[]) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
        n = Integer.parseInt(br.readLine());
        graph = new int[n][n];
        
        for(int i = 0; i &amp;lt; n; i++){
            String[] str = br.readLine().split(&quot;&quot;);
            for(int j = 0; j &amp;lt; n ;j++){
                graph[i][j] = Integer.parseInt(str[j]);
            }
        }
        ArrayList&amp;lt;Integer&amp;gt; result = new ArrayList&amp;lt;&amp;gt;();
        for(int i = 0; i &amp;lt; n; i++){
            for(int j = 0; j &amp;lt; n; j++){
                if(graph[i][j] == 1){
                    result.add(BFS(i,j));
                }
            }
        }
        Collections.sort(result);
        System.out.println(result.size());
        for(int a : result)
            System.out.println(a);
        //System.out.print(Arrays.deepToString(graph));

    }
    static int BFS(int y, int x){
        Queue&amp;lt;int[]&amp;gt; queue = new LinkedList&amp;lt;&amp;gt;();
        graph[y][x] = 0;
        int count = 1;
        queue.add(new int[]{y,x});
        while(queue.size() &amp;gt; 0){
            int[] current = queue.poll();

            for(int i = 0; i &amp;lt; 4; i++){
                int nextY = current[0] + dy[i];
                int nextX = current[1] + dx[i];
                if(0 &amp;lt;= nextY &amp;amp;&amp;amp; nextY &amp;lt; n &amp;amp;&amp;amp; 0 &amp;lt;= nextX &amp;amp;&amp;amp; nextX &amp;lt; n)
                {
                    if(graph[nextY][nextX] == 1){
                        graph[nextY][nextX] = 0;
                        count++;
                        queue.add(new int[]{nextY, nextX});
                    }
                }

            }
        }
        return count;
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <author>SEUNG YONG</author>
      <guid isPermaLink="true">https://sy4406.tistory.com/88</guid>
      <comments>https://sy4406.tistory.com/88#entry88comment</comments>
      <pubDate>Thu, 3 Aug 2023 15:37:57 +0900</pubDate>
    </item>
    <item>
      <title>[소프티어 Level2] 금고털이(Java)</title>
      <link>https://sy4406.tistory.com/87</link>
      <description>&lt;pre id=&quot;code_1691042493328&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.io.*;

public class Main
{
    public static void main(String args[]) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] s = br.readLine().split(&quot; &quot;);
        int W = Integer.parseInt(s[0]);
        int N = Integer.parseInt(s[1]);

        PriorityQueue &amp;lt;int []&amp;gt; metals = new PriorityQueue&amp;lt;&amp;gt;((o1, o2) -&amp;gt; o1[1] &amp;lt; o2[1] ? 1:-1);

        for(int i = 0; i &amp;lt; N; i++){
            String[] str = br.readLine().split(&quot; &quot;);
            metals.add(new int[]{Integer.parseInt(str[0]), Integer.parseInt(str[1])});
        }
        int sum = 0;

        while(!metals.isEmpty()){
            int[] e = metals.poll();
            if(W &amp;gt; e[0]) // 배낭이 여유가 있으면
            {
                sum += e[1] * e[0];
                W -= e[0]; // 다 담기
            }
            else
            {
                sum += W * e[1];
                break;
            }
        }
        System.out.println(sum);
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <author>SEUNG YONG</author>
      <guid isPermaLink="true">https://sy4406.tistory.com/87</guid>
      <comments>https://sy4406.tistory.com/87#entry87comment</comments>
      <pubDate>Thu, 3 Aug 2023 15:01:34 +0900</pubDate>
    </item>
    <item>
      <title>[소프티어 2Level]8단 변속기(Java)</title>
      <link>https://sy4406.tistory.com/86</link>
      <description>&lt;pre id=&quot;code_1691042428390&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.io.*;


public class Main
{
    public static void main(String args[]) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        if(s.equals(&quot;1 2 3 4 5 6 7 8&quot;))
            System.out.print(&quot;ascending&quot;);
        else if(s.equals(&quot;8 7 6 5 4 3 2 1&quot;))
            System.out.print(&quot;descending&quot;);
        else
            System.out.print(&quot;mixed&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <author>SEUNG YONG</author>
      <guid isPermaLink="true">https://sy4406.tistory.com/86</guid>
      <comments>https://sy4406.tistory.com/86#entry86comment</comments>
      <pubDate>Thu, 3 Aug 2023 15:00:31 +0900</pubDate>
    </item>
    <item>
      <title>[백준 11725] 트리의 부모 찾기(Java)</title>
      <link>https://sy4406.tistory.com/85</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/11725&quot;&gt;11725번: 트리의 부모 찾기 (acmicpc.net)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1690964691495&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;11725번: 트리의 부모 찾기&quot; data-og-description=&quot;루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/11725&quot; data-og-url=&quot;https://www.acmicpc.net/problem/11725&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/WuoLI/hyTwkpC0KY/X5Eno2A6JRmr1xOHvoch4k/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/11725&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/11725&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/WuoLI/hyTwkpC0KY/X5Eno2A6JRmr1xOHvoch4k/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&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;11725번: 트리의 부모 찾기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1690964681358&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;

public class Main {
    static int[] parent;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        LinkedList&amp;lt;Integer&amp;gt;[] graph = new LinkedList[n + 1];
        boolean[] visited = new boolean[n+1];
        parent = new int[n+1];
        for(int i = 0; i &amp;lt;= n;i++)
            graph[i] = new LinkedList&amp;lt;Integer&amp;gt;();

        for(int i = 0; i &amp;lt; n - 1; i++){
            String[] s = br.readLine().split(&quot; &quot;);
            int v1 = Integer.parseInt(s[0]);
            int v2 = Integer.parseInt(s[1]);
            graph[v1].add(v2);
            graph[v2].add(v1);
        }
        bfs(1, graph, visited);
        for(int i = 2; i &amp;lt;= n; i++)
            System.out.println(parent[i]);

    }
    public static void bfs(int start, LinkedList&amp;lt;Integer&amp;gt;[] graph, boolean[] visited){
        Queue&amp;lt;Integer&amp;gt; queue = new LinkedList&amp;lt;Integer&amp;gt;();
        visited[start] = true;
        queue.add(start);

        while(queue.size() &amp;gt; 0){
            Integer current = queue.poll();

            for(int next : graph[current]){
                if(visited[next] == false){
                    parent[next] = current;
                    visited[next] = true;
                    queue.add(next);
                }
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <author>SEUNG YONG</author>
      <guid isPermaLink="true">https://sy4406.tistory.com/85</guid>
      <comments>https://sy4406.tistory.com/85#entry85comment</comments>
      <pubDate>Wed, 2 Aug 2023 17:24:54 +0900</pubDate>
    </item>
    <item>
      <title>[백준 27527]배너걸기(Java)</title>
      <link>https://sy4406.tistory.com/84</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/27527&quot;&gt;27527번: 배너 걸기 (acmicpc.net)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1690961091296&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;27527번: 배너 걸기&quot; data-og-description=&quot;현대오토에버는 현대자동차그룹의 모빌리티 소프트웨어 전문 기업으로서, In-Car와 Out-Car 영역 전반의 소프트웨어와 인프라를 안정적, 효율적, 혁신적으로 지원하는 'Mobility SW Provider' 역할을 수&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/27527&quot; data-og-url=&quot;https://www.acmicpc.net/problem/27527&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/f5rv3/hyTvaPEJUp/o6I4ZHJ9LKGQYlPFNW5Re1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/27527&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/27527&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/f5rv3/hyTvaPEJUp/o6I4ZHJ9LKGQYlPFNW5Re1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&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;27527번: 배너 걸기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;현대오토에버는 현대자동차그룹의 모빌리티 소프트웨어 전문 기업으로서, In-Car와 Out-Car 영역 전반의 소프트웨어와 인프라를 안정적, 효율적, 혁신적으로 지원하는 'Mobility SW Provider' 역할을 수&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1690961091960&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    static int[] A = new int[1000001];
    static int[] heights;
    static int N;
    static int M;
    static int dest;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] s = br.readLine().split(&quot; &quot;);
        N = Integer.parseInt(s[0]);
        M = Integer.parseInt(s[1]);


        String[] heights_ = br.readLine().split(&quot; &quot;);
        heights = new int[N];

        for(int i = 0; i &amp;lt; N; i++)
            heights[i] = Integer.parseInt(heights_[i]);

        if ((9 * M) % 10 == 0) {
            dest = (9 * M) / 10;
        }
        else {
            dest = (9 * M) / 10;
            dest++;
        }
        System.out.println(isPossible());
    }
    public static String isPossible(){
        for(int i = 0; i &amp;lt; M; i++){
            A[heights[i]] += 1;
            if(A[heights[i]] == dest)
                return &quot;YES&quot;;
        }

        for(int i = 1; i &amp;lt;= N - M; i++){
            A[heights[i - 1]] -= 1;
            A[heights[i + M - 1]] += 1;
            if(A[heights[i + M - 1]] == dest)
                return &quot;YES&quot;;
        }

        return &quot;NO&quot;;
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <author>SEUNG YONG</author>
      <guid isPermaLink="true">https://sy4406.tistory.com/84</guid>
      <comments>https://sy4406.tistory.com/84#entry84comment</comments>
      <pubDate>Wed, 2 Aug 2023 16:24:56 +0900</pubDate>
    </item>
    <item>
      <title>[백준 2644]촌수계산(Java)</title>
      <link>https://sy4406.tistory.com/83</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2644&quot;&gt;2644번: 촌수계산 (acmicpc.net)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1690960991038&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;2644번: 촌수계산&quot; data-og-description=&quot;사람들은 1, 2, 3, &amp;hellip;, n (1 &amp;le; n &amp;le; 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2644&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2644&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/iSLyN/hyTvljmgtE/StW6d8bfSOVakx0TEPgKqk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2644&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2644&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/iSLyN/hyTvljmgtE/StW6d8bfSOVakx0TEPgKqk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&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;2644번: 촌수계산&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;사람들은 1, 2, 3, &amp;hellip;, n (1 &amp;le; n &amp;le; 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1690960978181&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;

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

        int n = Integer.parseInt(br.readLine());
        String[] s = br.readLine().split(&quot; &quot;);
        int start = Integer.parseInt(s[0]);
        int dest = Integer.parseInt(s[1]);

        int num = Integer.parseInt(br.readLine());
        LinkedList&amp;lt;Integer&amp;gt;[] graph = new LinkedList[n + 1];
        for(int i = 0; i &amp;lt;= n; i++){
            graph[i] = new LinkedList&amp;lt;&amp;gt;();
        }
        boolean[] visited = new boolean[n+1];

        for(int i = 1; i &amp;lt;= num; i++){
            String[] input = br.readLine().split(&quot; &quot;);
            int v1 = Integer.parseInt(input[0]);
            int v2 = Integer.parseInt(input[1]);
            graph[v1].add(v2);
            graph[v2].add(v1);

        }
        System.out.println(bfs(start, graph, visited, dest));
    }
    public static int bfs(int v, LinkedList&amp;lt;Integer&amp;gt;[] graph, boolean[] visited, int d)
    {
        Queue&amp;lt;int[]&amp;gt; queue = new LinkedList&amp;lt;&amp;gt;();
        visited[v] = true;

        queue.add(new int[]{v, 0});
        while(queue.size() != 0){
            int[] poll = queue.poll();
            int current = poll[0];
            int count = poll[1];

            //System.out.println(v + &quot; &quot;);
            for(int next : graph[current]){
                if(!visited[next])
                {
                    if(next == d)
                        return count + 1;
                    visited[next] = true;
                    queue.add(new int[]{next, count + 1});
                }
            }
        }
        return -1;
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <author>SEUNG YONG</author>
      <guid isPermaLink="true">https://sy4406.tistory.com/83</guid>
      <comments>https://sy4406.tistory.com/83#entry83comment</comments>
      <pubDate>Wed, 2 Aug 2023 16:23:13 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스]주차 요금 계산</title>
      <link>https://sy4406.tistory.com/82</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/92341&quot;&gt;코딩테스트 연습 - 주차 요금 계산 | 프로그래머스 (programmers.co.kr)&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1644076619730&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;[180, 5000, 10, 600] [&amp;quot;05:34 5961 IN&amp;quot;, &amp;quot;06:00 0000 IN&amp;quot;, &amp;quot;06:34 0000 OUT&amp;quot;, &amp;quot;07:59 5961 OUT&amp;quot;, &amp;quot;07:59 0148 IN&amp;quot;, &amp;quot;18:59 0000 IN&amp;quot;, &amp;quot;19:09 0148 OUT&amp;quot;, &amp;quot;22:59 5961 IN&amp;quot;, &amp;quot;23:00 5961 OUT&amp;quot;] [14600, 34400, 5000]&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/92341&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/92341&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/AfUKf/hyNjEOL2ps/Nb7O8lfzP9YvkEVmz24OR0/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/s7mdC/hyNjKuH1qO/esRJXmq7KpIkKK8GbUnHRK/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/92341&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/92341&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/AfUKf/hyNjEOL2ps/Nb7O8lfzP9YvkEVmz24OR0/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/s7mdC/hyNjKuH1qO/esRJXmq7KpIkKK8GbUnHRK/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626');&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;[180, 5000, 10, 600] [&quot;05:34 5961 IN&quot;, &quot;06:00 0000 IN&quot;, &quot;06:34 0000 OUT&quot;, &quot;07:59 5961 OUT&quot;, &quot;07:59 0148 IN&quot;, &quot;18:59 0000 IN&quot;, &quot;19:09 0148 OUT&quot;, &quot;22:59 5961 IN&quot;, &quot;23:00 5961 OUT&quot;] [14600, 34400, 5000]&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;h4 data-ke-size=&quot;size20&quot;&gt;문제요약)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기본시간, 기본요금, 단위 시간(분), 단위 요금(원)에 대한 정보가 fees배열로 들어오고&lt;/li&gt;
&lt;li&gt;입출차시간, 차량번호, IN-OUT여부가 records로 들어온다.&lt;/li&gt;
&lt;li&gt;누적 주차 시간이 기본 시간 이하라면 기본 요금을 청구하고 초과한다면 단위 시간 마다 단위 요금을 청구한다.&lt;/li&gt;
&lt;li&gt;초과한 시간이 단위 시간으로 나누어 떨어지지 않는다면 올림처리한다.(초과시간 == 63, 단위시간 == 10일 때, 7)&lt;/li&gt;
&lt;li&gt;똑같은 차량이 여러번 출입할 수 있으며 출차된 내역이 없는 차량은 23:59분에 출차된 것으로 간주함&lt;/li&gt;
&lt;li&gt;차량 번호가 작은 자동차부터 요금을 차례대로 배열에 담아서 리턴&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;문제풀이&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;차량별로 누적 주차시간만 구할 수 있다면 나머지는 연산만 하면 되는 문제이긴하다. 누적 주차 시간을 구하기 위해 처음에 접근했던 방식은 차량이 들어올 때 딕셔너리에 출입시간을 저장해놓고 차량이 나갈 때 시간을 계산해 주차 시간을 누적하는 방법을 이용하려 했는데 출차기록이 없는 차량을 처리하기 위해서는 출차할 때에 입출차 기록을 지워야 했는데 이문제를 해결하기가 어려웠다. 리스트의 인덱스를 이용해 레코드를 지울 수 있지만 지워야 할 레코드의 인덱스를 찾아낼 방법을 못찾았다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계속 지워야할 레코드의 인덱스를 찾는 방법을 고민하다가 정렬을 이용한다면 레코드를 지울 필요가 없지 않을까? 라는 생각을 하고 &lt;span style=&quot;color: #353a3d;&quot; data-darkreader-inline-color=&quot;&quot;&gt;접근방식을 바꿨다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #353a3d;&quot; data-darkreader-inline-color=&quot;&quot;&gt;정렬을 하면 차가 남아있는 경우를 제외하면 IN -&amp;gt; OUT의 순서를 가진다. 이를 이용하면 IN다음에 IN이 나온다면 이전 차량이 남아있다는 의미이다. 이전 차량의 기록을 남겨가면서 차가 들어올 때는 딕셔너리에 출입시간을 기록하고 차가 나갈 때는 출입시간을 불러와 주차시간을 계산하고 누적시킨다. 차량이 남아있을 때에는 이전 차량의 출입시간과 23:59를 이용해 주차시간을 계산한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #353a3d;&quot; data-darkreader-inline-color=&quot;&quot;&gt;records루프를 다 돌고나면 마지막 차량에 대해서만 고려하면 된다. 마지막 차량의 출입기록이 IN이라면 위와 같이 계산해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #353a3d;&quot; data-darkreader-inline-color=&quot;&quot;&gt;알고리즘)&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #353a3d;&quot; data-darkreader-inline-color=&quot;&quot;&gt;records 리스트화 한 다음 차량번호를 기준으로 정렬&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #353a3d;&quot; data-darkreader-inline-color=&quot;&quot;&gt;출입 내역이 IN일 때 이전차량의 IN이라면 이전 차량 주차시간 계산(23:59 - 이전 차량 출입)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #353a3d;&quot; data-darkreader-inline-color=&quot;&quot;&gt;출입 시간과 이전 레코드 기록&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #353a3d;&quot; data-darkreader-inline-color=&quot;&quot;&gt;OUT이라면 해당 차량의 출입시간을 불러와 주차시간 계산&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #353a3d;&quot; data-darkreader-inline-color=&quot;&quot;&gt;---- 반복&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #353a3d;&quot; data-darkreader-inline-color=&quot;&quot;&gt;루프가 끝난 뒤 마지막 차량에 대해 판단&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #353a3d;&quot; data-darkreader-inline-color=&quot;&quot;&gt;차가 여러번 출입할 수 있기 때문에 누적처리 신경써야함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #353a3d;&quot; data-darkreader-inline-color=&quot;&quot;&gt;코드)&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1644078391906&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import math

def TimeResolver(t):
    time = t.split(':')
    return int(time[0]) * 60 + int(time[1])
def solution(fees, recordss):
    
    #fees[0] - 기본시간
    #fees[1] - 기본요금
    #fees[2] - 단위시간(분)
    #fees[3] - 단위요금(원)
    d = {}
    parkingTime = {}
    records = [] # [[&quot;05:34&quot;],[5961],[&quot;IN&quot;]]과 같은 형태로 변환
    for r in recordss:
        s =r.split(' ')
        records.append(s)
    records.sort(key = lambda x : x[1]) #차량번호를 기준으로 오름차순 정렬
    beforeRecord = [None,None,None] #정렬되어 있기 때문에 차가 남아있는게 아니라면 IN - OUT의 순서를 가짐 
    for index,rec in enumerate(records):
        record = rec
        if record[2] == &quot;IN&quot;: 
            if beforeRecord[2] == &quot;IN&quot;: #이전 차가 안나간것
                if parkingTime.get(beforeRecord[1]) is None: #처음 들어온 차
                    parkingTime[beforeRecord[1]] =  TimeResolver(&quot;23:59&quot;) - TimeResolver(d[beforeRecord[1]])
                else: #차가 여러번 들어올 수 있음
                    parkingTime[beforeRecord[1]] = parkingTime[beforeRecord[1]] + TimeResolver(&quot;23:59&quot;) - TimeResolver(d[beforeRecord[1]])
            
            d[record[1]] = record[0] #차 번호에 대해 출입시간을 갱신
            beforeRecord = record    
        else:
            if parkingTime.get(record[1]) is None:
                parkingTime[record[1]] =  TimeResolver(record[0]) - TimeResolver(d[record[1]])
            else:
                parkingTime[record[1]] = parkingTime[record[1]] + TimeResolver(record[0]) - TimeResolver(d[record[1]])
            beforeRecord = record
    #마지막 차에 대해
    if beforeRecord[2] == &quot;IN&quot;: #마지막 차가 안나갔다면
                if parkingTime.get(beforeRecord[1]) is None: #처음 들어온 차
                    parkingTime[beforeRecord[1]] =  TimeResolver(&quot;23:59&quot;) - TimeResolver(d[beforeRecord[1]])
                else:
                    parkingTime[beforeRecord[1]] = parkingTime[beforeRecord[1]] + TimeResolver(&quot;23:59&quot;) - TimeResolver(d[beforeRecord[1]])
    
    answer = []
    for pTime in parkingTime:
        if parkingTime.get(pTime) &amp;gt; fees[0]:
            answer.append(fees[1]+ math.ceil(((parkingTime.get(pTime) - fees[0]) / fees[2])) * fees[3])
        else:
            answer.append(fees[1])

    return answer&lt;/code&gt;&lt;/pre&gt;</description>
      <category>프로그래머스</category>
      <author>SEUNG YONG</author>
      <guid isPermaLink="true">https://sy4406.tistory.com/82</guid>
      <comments>https://sy4406.tistory.com/82#entry82comment</comments>
      <pubDate>Sun, 6 Feb 2022 01:28:04 +0900</pubDate>
    </item>
    <item>
      <title>[Python][프로그래머스]양궁대회</title>
      <link>https://sy4406.tistory.com/81</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/92342&quot;&gt;코딩테스트 연습 - 양궁대회 | 프로그래머스 (programmers.co.kr)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1643805571929&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;문제 설명 카카오배 양궁대회가 열렸습니다. 라이언은 저번 카카오배 양궁대회 우승자이고 이번 대회에도 결승전까지 올라왔습니다. 결승전 상대는 어피치입니다. 카카오배 양궁대회 운영위원&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/92342&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/92342&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/iCOej/hyNga9hlpD/LdX2QwmMnLvV2Hkwhv7ksK/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/qnUMp/hyNhYTF1OT/peMjNHl5T5H9IT56G7f29K/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/92342&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/92342&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/iCOej/hyNga9hlpD/LdX2QwmMnLvV2Hkwhv7ksK/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/qnUMp/hyNhYTF1OT/peMjNHl5T5H9IT56G7f29K/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626');&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;문제 설명 카카오배 양궁대회가 열렸습니다. 라이언은 저번 카카오배 양궁대회 우승자이고 이번 대회에도 결승전까지 올라왔습니다. 결승전 상대는 어피치입니다. 카카오배 양궁대회 운영위원&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;문제요약)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 문제를 간략하게 요약한다면 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 과녁판의 점수는 0점부터 10점까지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 어피치가 n발을 쏜 후 라이언이 n발을 쏜다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. k점에 화살을 더 많이 맞춘 사람이 k점을 가져간다.(맞춘 횟수가 동일할 경우 어피치가 득점)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 최종 점수가 같을 경우 어피치가 우승&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. info에는 어피치가 10점부터 0점까지 점수별로 몇발씩 맞췄는지 정보가 들어있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 라이언이 가장 큰 점수 차이로 우승해야 하는데 가장 큰 점수 차이인 경우가 여러개 존재한다면 가장 낮은 점수를 많이 맞췄을 경우로 리턴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;문제풀이)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DFS나 백트래킹으로 접근하는 것이 훨씬 효율이 좋지만 어떻게 구현해야 할지 생각이 안나서 중복조합을 사용하는 완전탐색 방식으로 접근했다. 최악의 경우인 10발을 쐈을 때 11개의 점수를 각각 몇발씩 맞추는가에 대한 경우의 수를 구해보면 11H10(&lt;span style=&quot;color: #000000;&quot;&gt;184756번)이다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;from itertools import combinations_with_replacement 라이브러리를 이용하면 [9,9,9,9,9,9,9,9,1,1]과 같은 형태로 각 경우들이 튜플로 반환된다. 9점을 8번 1점을 2번 쐈다고 생각하여 구현했다.&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;**풀이과정중 라이언의 점수가 어치피보다 클 때를 조건으로 거는 실수를 했었는데 구해야 하는 경우가 어피치와의 점수차가 큰 경우이기 때문에 peach - lion으로 비교해야한다!&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;코드)&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1643806677897&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from itertools import combinations_with_replacement


def solution(n, info):
    bestPoint = 0 #현재까지 어피치와의 가장 큰 점수차
    bestCount = [] #현재까지 점수차가 가장 클 때에 라이언의 과녁
    winFlag = 0
    for lion_count in combinations_with_replacement([10,9,8,7,6,5,4,3,2,1,0],n):
        lion = 0
        peach = 0
        for index, count in enumerate(info): # count = 어피치가 n점 맞춘횟수(10점,9점,8점,...)
            point = 10 - index # 10,9,8,7,6...
            if count &amp;gt; 0 or lion_count.count(point) &amp;gt; 0:
                if count &amp;lt; lion_count.count(point): # 라이언이 point점 맞춘횟수  
                    lion += point
                else:
                    peach += point
        if lion - peach &amp;gt; 0:
            if bestPoint &amp;lt; lion - peach:
                winFlag = 1
                bestPoint = lion - peach
                bestCount = lion_count
                
            elif bestPoint == lion - peach:  
                change = 0 
                for i in range(0,11): # 가장 낮은 점수를 더 많이 맞힌 경우
                    if bestCount.count(i) &amp;lt; lion_count.count(i):
                        #print(i,bestCount.count(i),lion_count.count(i))
                        change = 1
                        break
                    elif bestCount.count(i) == lion_count.count(i):
                        continue
                    else:
                        break
                if change == 1: 
                    #print(&quot;lion_count: &quot;,lion_count)
                    #print(&quot;bestCount:  &quot;,bestCount)
                    bestCount = lion_count
                    bestPoint = lion - peach
                

    if winFlag == 1: # 점수별로 맞춘 횟수를 리스트에 재배열
        answer = []
        for i in range(10,-1,-1):
            answer.append(bestCount.count(i))
        return answer
    else:
        return [-1]&lt;/code&gt;&lt;/pre&gt;</description>
      <category>프로그래머스</category>
      <author>SEUNG YONG</author>
      <guid isPermaLink="true">https://sy4406.tistory.com/81</guid>
      <comments>https://sy4406.tistory.com/81#entry81comment</comments>
      <pubDate>Wed, 2 Feb 2022 22:05:01 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 입출력</title>
      <link>https://sy4406.tistory.com/69</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;기본 입력은 String타입이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나 입력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;a = input()&lt;/p&gt;
&lt;pre id=&quot;code_1642169538040&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;a = input()
-- 1234 입력
print(a)
# '1234'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두개 입력 + 타입변환&lt;/p&gt;
&lt;pre id=&quot;code_1642169645618&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;a, b = input().split()
#123 456입력
print(a)  # '123'
print(b)  # '456'
a = int(a) # 123
b = int(b) # 456&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러개 입력(번거롭기 때문에 map메서드 사용)&lt;/p&gt;
&lt;pre id=&quot;code_1642169743200&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;a, b, c = map(int, input().split())
# 1 2 3 입력
print(a) # 1
print(b) # 2
print(c) # 3&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Python</category>
      <author>SEUNG YONG</author>
      <guid isPermaLink="true">https://sy4406.tistory.com/69</guid>
      <comments>https://sy4406.tistory.com/69#entry69comment</comments>
      <pubDate>Fri, 14 Jan 2022 23:16:03 +0900</pubDate>
    </item>
  </channel>
</rss>