[백준] 1931번: 회의실 배정 C++로 풀어보기

2023. 8. 9. 22:12·Algorithm/Baekjoon(C++)

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

 

1931번: 회의실 배정

(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.

www.acmicpc.net

 

1931번 설명

생각

그리디 알고리즘을 이용해서 풀어야되는 문제이다.

 

 

그리디 알고리즘(욕심쟁이 알고리즘, Greedy Algorithm)이란 "매 선택에서 지금 이 순간 당장 최적인 답을 선택하여 적합한 결과를 도출하자"라는 모토를 가지는 알고리즘 설계 기법이다. (출처: 나무위키)

 

 

현재 선택한 회의가 있다고 가정하자.

그러면 다음에 있는 회의 중에서 가장 종료 시간이 빠른 회의를 선택해야 최대한 많은 회의를 진행할 수 있다.

 

 

1. 회의를 종료 시간이 가장 빠른 순서로 정렬한다.

(만약 종료 시간이 같다면 시작 시간이 더 빠른 회의가 앞으로 온다)

 

2. 종료 시간을 저장할 변수를 만들고, 그 변수에 0을 집어넣는다. (이하 endtime)

 

3. 루프를 진행하면서 만약 시작 시간이 현재 택한 회의의 종료 시간보다 느리거나 같다면

(어차피 종료 시간 순으로 정렬을 했으니, 이 조건만 통과하면 최적해가 된다.)

 

4. endtime을 갱신하고, 회의 개수를 나타내는 변수에 1을 더해준다.

 

코드
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll cnt = 0; // 회의 개수

struct meet { // 시작 시간과 종료시간을 입력받는 구조체
    ll st;
    ll en;
};

ll cmp(meet a, meet b) { // 종료 시간이 빠른 순서대로 정렬
    if (a.en != b.en) {
        return a.en < b.en;
    }
    else { // 종료 시간이 같다면 시작 시간이 빠른 순서대로 정렬
        return a.st < b.st;
    }
    
}


int main(void) {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    ll n;
    cin >> n;

    struct meet* mt = new struct meet[n]; // 구조체 동적할당

    for (ll i = 0; i < n; i++) { // 시작 시간과 종료 시간 입력
        cin >> mt[i].st;
        cin >> mt[i].en;
    }

    sort(mt, mt + n, cmp); // 종료 시간이 빠른 순서대로 정렬


    int endtime = 0;
    for (ll i = 0; i < n; i++) {
        if (endtime <= mt[i].st) { // 시작 시간이 현재 회의의 종료 시간보다 느리거나 같다면
            endtime = mt[i].en; // 종료 시간 갱신
            cnt++; // 회의 개수 추가
        }
    }
    

    cout << cnt; // 출력

    delete[] mt; // 동적할당 해제


}

 

결과

1931번 결과

 

저작자표시 비영리 변경금지 (새창열림)

'Algorithm > Baekjoon(C++)' 카테고리의 다른 글

[백준] 2805번: 나무 자르기 C++로 풀어보기  (1) 2023.08.12
[백준] 1019번: 책 페이지 C++로 풀어보기  (0) 2023.08.12
[백준] 1520번: 내리막 길 C++로 풀어보기  (0) 2023.08.06
[백준] 10814번: 나이순 정렬 C++로 풀어보기  (1) 2023.08.06
[백준] 10989번: 수 정렬하기 3 C++로 풀어보기  (1) 2023.08.05
'Algorithm/Baekjoon(C++)' 카테고리의 다른 글
  • [백준] 2805번: 나무 자르기 C++로 풀어보기
  • [백준] 1019번: 책 페이지 C++로 풀어보기
  • [백준] 1520번: 내리막 길 C++로 풀어보기
  • [백준] 10814번: 나이순 정렬 C++로 풀어보기
퀵차분
퀵차분
웹 프론트엔드 개발자를 꿈꾸고 있습니다 :)
  • 퀵차분
    QC's Devlog
    퀵차분
  • 전체
    오늘
    어제
    • 분류 전체보기 (165)
      • Frontend (28)
        • HTML, CSS (7)
        • Javascript (3)
        • React (11)
        • Typescript (2)
        • Next.js (4)
      • Node.js (3)
      • Study (40)
        • Modern JS Deep Dive (13)
        • SQL (1)
        • Network (1)
        • 프롬프트 엔지니어링 (4)
        • 인공지능 (9)
        • 시스템프로그래밍 (11)
        • 선형대수학 (1)
      • Intern (4)
      • KUIT (20)
      • Algorithm (48)
        • Baekjoon(C++) (26)
        • Programmers(JavaScript) (22)
      • 우아한테크코스(프리코스) (4)
      • Project (7)
        • PROlog (4)
        • Nomadcoder (2)
      • 생각 (4)
      • Event (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    시스템프로그래밍
    리액트
    프롬프트 엔지니어링
    프론트엔드
    오블완
    typescript
    인공지능
    javascript
    HTML
    KUIT
    알고리즘
    react
    타입스크립트
    프로그래머스
    next.js
    백준
    티스토리챌린지
    자바스크립트
    음악추천
    프로그래머스 자바스크립트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
퀵차분
[백준] 1931번: 회의실 배정 C++로 풀어보기
상단으로

티스토리툴바