[BOJ/λ°±μ€€] 1931 νšŒμ˜μ‹€ λ°°μ •(JAVA)

2025. 2. 10. 09:45Β·πŸ’ͺ Algorithm
λ°˜μ‘ν˜•

링크

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

 

문제 μš”μ•½

νšŒμ˜κ°€ κ²ΉμΉ˜μ§€ μ•Šκ²Œ ν•˜λ©΄μ„œ νšŒμ˜μ‹€μ„ μ‚¬μš©ν•  수 μžˆλŠ” 회의의 μ΅œλŒ€ 개수 κ΅¬ν•˜κΈ°

 

μ œν•œ

  • 첫째 쀄에 회의의 수 N(1 ≤ N ≤ 100,000)이 μ£Όμ–΄μ§„λ‹€.
  • λ‘˜μ§Έ 쀄뢀터 N+1 μ€„κΉŒμ§€ 각 회의의 정보가 μ£Όμ–΄μ§€λŠ”λ° 이것은 곡백을 사이에 두고 회의의 μ‹œμž‘μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ΄ μ£Όμ–΄μ§„λ‹€.
    • μ‹œμž‘ μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ€ 231-1보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜ λ˜λŠ” 0이닀.

 

풀이

회의의 μˆ˜κ°€ μ΅œλŒ€ 10^6μ΄λ―€λ‘œ μ‹œκ°„ λ³΅μž‘λ„κ°€ `O(N log N)`을 λ„˜μœΌλ©΄ μ•ˆ λ©λ‹ˆλ‹€.

 

회의λ₯Ό μ΅œλŒ€ν•œ 많이 μ„ νƒν•˜λ €λ©΄ μ–΄λ–€ κΈ°μ€€μœΌλ‘œ ν’€μ–΄μ•Ό ν• κΉŒμš”?

핡심은 회의 μ’…λ£Œ μ‹œκ°„μ΄ λΉ λ₯Όμˆ˜λ‘ 선택할 수 μžˆλŠ” νšŒμ˜κ°€ λ§Žμ•„μ§„λ‹€μž…λ‹ˆλ‹€.

  1. λλ‚˜λŠ” μ‹œκ°„μ„ κΈ°μ€€μœΌλ‘œ μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•œλ‹€.
  2. λλ‚˜λŠ” μ‹œκ°„μ΄ κ°™λ‹€λ©΄, μ‹œμž‘ μ‹œκ°„μ΄ λΉ λ₯Έ 것이 λ¨Όμ € 였게 ν•œλ‹€.
    1. ex) `(1,4)`, `(4,4)`
      1. μ‹œμž‘ μ‹œκ°„μ΄ λΉ λ₯Έ 것이 λ¨Όμ € μ˜€μ§€ μ•Šκ³  `(4,4)`λ₯Ό λ¨Όμ € μ„ νƒν•˜λ©΄ `(1,4)`λŠ” 선택할 수 μ—†λ‹€.
      2. `(1,4)`와 `(4,4)`λ₯Ό λͺ¨λ‘ μ„ νƒν•˜λŠ” 것이 μ΅œλŒ€ κ°œμˆ˜μ΄λ‹€.
  3. μ •λ ¬λœ λ°°μ—΄μ—μ„œ ν•˜λ‚˜μ”© μˆœνšŒν•˜λ©°, λ§ˆμ§€λ§‰μœΌλ‘œ μ„ νƒλœ νšŒμ˜μ™€ κ·Έλ‹€μŒ 회의 μ‹œκ°„μ΄ κ²ΉμΉ˜μ§€ μ•ŠμœΌλ©΄ 이λ₯Ό μ„ νƒν•œλ‹€.
    1. λ§Œμ•½ κ²ΉμΉœλ‹€λ©΄, κ·Έλ‹€μŒ 인덱슀 νšŒμ˜μ™€ λΉ„κ΅ν•œλ‹€.
    2. κ²ΉμΉ˜λŠ” 쑰건은 `이전 νšŒμ˜κ°€ λλ‚˜λŠ” μ‹œκ°„` ≤ `λ‹€μŒ νšŒμ˜κ°€ μ‹œμž‘ν•˜λŠ” μ‹œκ°„`

μ •λ ¬ν•œ ν›„, 첫 번째 νšŒμ˜λŠ” 무쑰건 μ„ νƒλ˜κΈ° λ•Œλ¬Έμ— 카운트 값을 1둜 μ΄ˆκΈ°ν™”ν•œ ν›„ μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€.

 

μ½”λ“œ

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));

        int N = Integer.parseInt(br.readLine());
        Meeting[] meetings = new Meeting[N];
        for(int i=0; i<N; i++){
            StringTokenizer st = new StringTokenizer(br.readLine());
            meetings[i] = new Meeting(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
        }
        Arrays.sort(meetings);
        int preidx = 0; // λ§ˆμ§€λ§‰μœΌλ‘œ μ„ νƒλœ 회의 인덱슀
        int cnt = 1; // 첫 번째 회의 선택
        for(int i=1; i<N; i++){
            if(meetings[preidx].end<=meetings[i].start){
                preidx=i;
                cnt++;
            }
        }
        System.out.println(cnt);
    }

    static class Meeting implements Comparable<Meeting>{
        public int start;
        public int end;

        Meeting(int start, int end){
            this.start = start;
            this.end = end;
        }

        @Override
        public int compareTo(Meeting o) {
            if (this.end == o.end) {
                return Integer.compare(this.start, o.start); // μ’…λ£Œ μ‹œκ°„μ΄ κ°™μœΌλ©΄ μ‹œμž‘ μ‹œκ°„ κΈ°μ€€μœΌλ‘œ μ˜€λ¦„μ°¨μˆœ
            }
            return Integer.compare(this.end, o.end); // μ’…λ£Œ μ‹œκ°„ κΈ°μ€€μœΌλ‘œ μ˜€λ¦„μ°¨μˆœ
        }
    }
}

🏷 μ‹œκ°„ λ³΅μž‘λ„

  • `N`: 회의의 수
  • sort ν•¨μˆ˜: `O(N logN)`
  • for λ¬Έ: `O(N)`
  • μ΅œμ’… μ‹œκ°„ λ³΅μž‘λ„: `O(N)`+ `O(N logN)` = `O(N logN)`

🏷 μ‹€ν–‰ 속도

Time: 544 ms, Memory: 44928 KB

λ°˜μ‘ν˜•

'πŸ’ͺ Algorithm' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[BOJ/λ°±μ€€] 13023 ABCDE(JAVA)  (1) 2025.02.12
[BOJ/λ°±μ€€] 2178 미둜 탐색(JAVA)  (1) 2025.02.11
[BOJ/λ°±μ€€] 2573 λΉ™μ‚° (JAVA)  (1) 2025.02.09
[BOJ/λ°±μ€€] 4963. μ„¬μ˜ 개수 (JAVA)  (1) 2025.02.07
'πŸ’ͺ Algorithm' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [BOJ/λ°±μ€€] 13023 ABCDE(JAVA)
  • [BOJ/λ°±μ€€] 2178 미둜 탐색(JAVA)
  • [BOJ/λ°±μ€€] 2573 λΉ™μ‚° (JAVA)
  • [BOJ/λ°±μ€€] 4963. μ„¬μ˜ 개수 (JAVA)
dev-heyjin
dev-heyjin
  • dev-heyjin
    개발 기둝
    dev-heyjin
  • 전체
    였늘
    μ–΄μ œ
    • λΆ„λ₯˜ 전체보기 (56)
      • 🎯 Programming (8)
      • πŸ’ͺ Algorithm (16)
      • βš™οΈ CS (31)
        • λ„€νŠΈμ›Œν¬ (15)
        • 운영체제 (15)
        • λ°μ΄ν„°λ² μ΄μŠ€ (0)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

  • 곡지사항

  • 인기 κΈ€

  • νƒœκ·Έ

    RDS
    λ°μ΄ν„°λ² μ΄μŠ€
    DB
    ν•΄ν‚Ή
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
dev-heyjin
[BOJ/λ°±μ€€] 1931 νšŒμ˜μ‹€ λ°°μ •(JAVA)
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”