1 minute read

πŸ“Œ λ‚œμ΄λ„

πŸ₯ˆ Silver 1


πŸ“Œ 문제

https://www.acmicpc.net/problem/1931


image

image


πŸ“Œ 풀이

와 이전 λ¬Έμ œμ—μ„œ 느꼈던, Greedy μ•Œκ³ λ¦¬μ¦˜μ΄ μ‰½λ‹€λŠ” 생각을 μ²˜μ°Έν•˜κ²Œ κΉ¨μ€€ λ¬Έμ œμ˜€λ‹€.

μ²˜μŒμ—λŠ” Conference[][]에 μ‹œμž‘ μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ„ λ„£κ³ , for문을 λŒλ €μ„œ i번째 μ‹œκ°„λΆ€ν„° μ‹œμž‘μ„ ν•΄μ„œ, 이후에 올 수 μžˆλŠ” κ°€μž₯ κ°€κΉŒμš΄ μ‹œμž‘μ‹œκ°„μ„ λΆ™ν˜€μ„œ 개수λ₯Ό κ΅¬ν–ˆλ‹€.
이것을 μ²˜μŒλΆ€ν„° λκΉŒμ§€μ˜ 개수λ₯Ό maxμ³μ„œ κ΅¬ν–ˆλŠ”λ° λ‹Ήμ—°ν•˜κ²Œλ„ ν‹€λ Έλ‹€.

곰곰히 μƒκ°ν•΄λ³΄λ‹ˆκΉŒ μ΄λŸ°μ‹μœΌλ‘œ 문제점이 ν•˜λ‚˜κ°€ μžˆμ—ˆλ‹€.

image

μœ„μ™€ 같이 1-4와 2-3이 있으면 해결이 μ•ˆλ˜λŠ” λ°©λ²•μ΄μ—ˆλ‹€.

λŒ€μ²΄ 이걸 μ–΄λ–»κ²Œ ν’€μ–΄μ•Όν•˜λ‚˜ κ³ λ―Όν•˜λ‹€κ°€ μ•žμ—μ„œ λ‹€λ₯Έ μ• ν•œν…Œ μ„€λͺ…ν•΄μ£Όμ‹œλŠ” μ„ λ°°λ‹˜μ΄ 정렬을 μ„€λͺ…ν•˜μ‹œκΈΈλž˜ μ•„~! 정렬을 μ¨μ•Όν•˜λŠ” λ¬Έμ œκ΅¬λ‚˜! μ‹Άμ–΄μ„œ, μ‹œμž‘ μ‹œκ°„μ„ κΈ°μ€€μœΌλ‘œ 정렬을 ν•˜μ˜€λ‹€.
이후 이전과 같이 ν’€μ—ˆλ‹€.

image

ν•˜μ§€λ§Œ μ΄λ ‡κ²Œ 정렬을 μ‹œμΌ°μŒμ—λ„ λΆˆκ΅¬ν•˜κ³ , μœ„μ˜ κ²½μš°μ™€ 같이 λΆ„λͺ… κ°€μž₯ λ§Žμ€ μ‹œκ°„μ„ μž‘λŠ” κ²½μš°λŠ” 첫번째 회의 이후 5, 6번째 회의λ₯Ό ν•˜λŠ” 경우인데, λ‚΄ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œλŠ” 이것을 ν•΄κ²°ν•  μˆ˜κ°€ μ—†μ—ˆλ‹€.
이런 경우 수λ₯Ό κ³ λ €ν•˜λ €κ³  ν•˜λ‹ˆκΉŒ 해결이 μ•ˆλ˜λŠ” λ°©μ‹μ΄μ˜€λ‹€.


정말 λ§Žμ€ 고민을 ν•˜μ˜€λ‹€.
κ·ΈλŸ¬λ‹€ 문뜩 μƒκ°λ‚œ 사싀이 λ’€λ‘œ 정렬을 ν•˜λ©΄ μ–΄λ–»κ²Œ λ κΉŒλΌλŠ” κ²ƒμ΄μ˜€λ‹€.

image

μœ„ κ·Έλ¦Όκ³Ό 같이 λ’€λ₯Ό κΈ°μ€€μœΌλ‘œ 정렬을 ν•˜μž, μžλ™μœΌλ‘œ 길이가 κΈ΄ νšŒμ˜μ‹œκ°„λ“€μ€ 짧은 것에 λΉ„ν•΄ ν›„μˆœμœ„λ‘œ 배치되게 λ˜μ–΄μ„œ, 경우의 수λ₯Ό κ³ λ €ν•˜μ§€ μ•Šμ•„λ„ 되게 λ˜μ—ˆλ‹€.


λ„ˆλ¬΄ μ‹ κΈ°ν•˜μ˜€λ‹€.

μ—­μ‹œ μ½”λ”© λ¬Έμ œλŠ” 많이 ν’€μ–΄μ„œ κ²½ν—˜μ„ μŒ“μ•„μ•Όλ§Œ ν•˜λŠ” 것 κ°™λ‹€.


πŸ“Œ Code

package Greedy;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;

public class N1931 {
    public static int count;
    public static int[][] conference;
    public static int[][] conference2;

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

        count = Integer.parseInt(st.nextToken());

        conference = new int[count][2];

        for (int i = 0; i < count; i++) {
            st = new StringTokenizer(br.readLine());
            conference[i][0] = Integer.parseInt(st.nextToken());
            conference[i][1] = Integer.parseInt(st.nextToken());
        }

        SortConference();
        System.out.println(MaxConference());
    }

    public static void SortConference() {
        Arrays.sort(conference, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                if (o1[1] == o2[1]) {
                    return o1[0] - o2[0];
                } else {
                    return o1[1] - o2[1];
                }
            }
        });
    }

    public static int MaxConference() {
        int result = 1;
        int time = conference[0][1];
        for (int i = 1; i < count; i++) {
            if (conference[i][0] >= time) {
                time = conference[i][1];
                result += 1;
            }
        }
        return result;
    }
}

package (이름); λ₯Ό λ•Œκ³ , class 이름을 Main으둜 λ³€κ²½ν•˜λ©΄ λœλ‹€.



개인 곡뢀 기둝용 λΈ”λ‘œκ·Έμž…λ‹ˆλ‹€.
ν‹€λ¦¬κ±°λ‚˜ 였λ₯˜κ°€ μžˆμ„ 경우 μ œλ³΄ν•΄μ£Όμ‹œλ©΄ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€.😁