diff --git "a/02_\355\232\214\354\235\230\354\213\244_\353\260\260\354\240\225/hyoz/code.py" "b/02_\355\232\214\354\235\230\354\213\244_\353\260\260\354\240\225/hyoz/code.py" new file mode 100644 index 0000000..0fa197a --- /dev/null +++ "b/02_\355\232\214\354\235\230\354\213\244_\353\260\260\354\240\225/hyoz/code.py" @@ -0,0 +1,12 @@ +n = int(input()) +meetings = [list(map(int, input().split())) for _ in range(n)] + +# 종료시간 기준 정렬 +meetings = sorted(meetings, key=lambda x: (x[1], x[0])) + +answer, time = 0, -1 +for st, en in meetings: + if st >= time: + time = en # 기준 시간(time)을 종료 시간으로 업데이트 + answer += 1 +print(answer) \ No newline at end of file diff --git "a/02_\355\232\214\354\235\230\354\213\244_\353\260\260\354\240\225/hyoz/description.ipynb" "b/02_\355\232\214\354\235\230\354\213\244_\353\260\260\354\240\225/hyoz/description.ipynb" new file mode 100644 index 0000000..7c22def --- /dev/null +++ "b/02_\355\232\214\354\235\230\354\213\244_\353\260\260\354\240\225/hyoz/description.ipynb" @@ -0,0 +1,110 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "9918c08e-08cd-4c7b-8f16-808fc00edfec", + "metadata": {}, + "source": [ + "# Description" + ] + }, + { + "cell_type": "markdown", + "id": "f2cc0507-1a28-43fa-8e0a-71452acdd833", + "metadata": {}, + "source": [ + "* 문제: [회의실 배정](https://www.acmicpc.net/problem/1931)\n", + "* 문제 요약\n", + " * N개의 회의 시간이 주어질 때, 하나의 회의실에서 진행 가능한 회의의 최대 개수를 구하는 문제이다.\n", + " * 입력\n", + " * 회의 개수 N: 1이상 10만 이하의 자연수\n", + " * 회의 시작 시간과 종료 시간: 231-1보다 작거나 같은 자연수 또는 0\n", + " * 출력: 회의실을 사용할 수 있는 최대 회의 개수 (정수)\n", + "* 문제 유형: 이진 탐색" + ] + }, + { + "cell_type": "markdown", + "id": "fd7526aa-d0d3-474b-8afc-43cf5f207a33", + "metadata": {}, + "source": [ + "# History of Code" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "e58b0e2e-5429-483c-8ae3-a67a041c0417", + "metadata": {}, + "outputs": [ + { + "name": "stdin", + "output_type": "stream", + "text": [ + " 11\n", + " 1 4\n", + " 3 5\n", + " 0 6\n", + " 5 7\n", + " 3 8\n", + " 5 9\n", + " 6 10\n", + " 8 11\n", + " 8 12\n", + " 2 13\n", + " 12 14\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4\n" + ] + } + ], + "source": [ + "'''\n", + "시간 복잡도: O(NlogN)\n", + "\n", + "구현 순서\n", + "1. 입력 받은 배열에 대해 정렬한다. 조건은 1. 종료시간, 2. 시작시간을 기준으로 한다. → O(NlogN)\n", + "2. 위 정렬값을 기준으로 가장 빨리 종료되는 시간을 최선의 값으로 고려하여 반복적으로 탐색한다. (그리디) → O(N)\n", + "'''\n", + "n = int(input())\n", + "meetings = [list(map(int, input().split())) for _ in range(n)]\n", + "\n", + "# 종료시간 기준 정렬\n", + "meetings = sorted(meetings, key=lambda x: (x[1], x[0]))\n", + "\n", + "answer, time = 0, -1\n", + "for st, en in meetings:\n", + " if st >= time: \n", + " time = en # 기준 시간(time)을 종료 시간으로 업데이트\n", + " answer += 1\n", + "print(answer)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}