728x90
문제
https://www.acmicpc.net/problem/1931
코드
using System;
using System.Text;
using System.Collections.Generic;
class Dongsik
{
static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine());
(long start, long end)[] arr = new (long, long)[n];
for(int i = 0; i < n; i++)
{
long[] input = Array.ConvertAll(Console.ReadLine().Split(' '), long.Parse);
arr[i] = (input[0], input[1]);
}
// 정렬된 배열
var sortedArr = arr.OrderBy(x => x.end).ThenBy(x => x.start).ToArray();
int cnt = 0;
(long, long) currentArr = (0, 0);
for(int i = 0; i < n; i++)
{
// 현재 끝나는 시간과 다음 회의 시작하는 시간이 잘 맞는지
if(currentArr.Item2 <= sortedArr[i].Item1)
{
cnt++;
currentArr = sortedArr[i];
}
}
Console.WriteLine(cnt);
}
}
고민
그리디 알고리즘 카테고리에 있어서 그리디를 적용했다.
회의실이 끝나는 시간을 기준으로 정렬하고(오름차순)
그 정렬된 구간에서 회의가 시작하는 시간을 기준으로 정렬해준다(오름차순)
그리고 현재 회의 end time과 다음 회의의 start time을 비교해서 cnt해주면 된다.
OrderBy랑 ThenBy를 새롭게 알게되었다.
그리고 람다식을 활용하여 정렬하는 방법도 알게되었다.
OrderBy는 정렬을 해준 뒤, ThenBy로 정렬된 배열을 또 정렬 해주는거다.
list, arr보두 OrderBy, ThenBy를 사용할 수 있다.
OrderBy(x => x.end);에서 x는 배열의 요소이다.
튜플은 Item1, Item2로도 접근 가능하나 나는 직관적으로 확인하기 위해서 x.end로 접근했다.
쓰면 쓸수록 튜플은 재미있다.
'동식이 취업시키기 작전 > 코딩테스트' 카테고리의 다른 글
[백준] 5568번 카드 놓기 (0) | 2024.06.19 |
---|---|
[백준] 2961번 도영이가 만든 맛있는 음식 (1) | 2024.06.18 |
[프로그래머스] 이진 변환 반복하기(C#) (0) | 2024.04.11 |
[프로그래머스] 덧칠하기(C#) (0) | 2024.04.09 |
[백준] 1012번 유기농 배추(C#) (1) | 2024.03.18 |