본문 바로가기
알고리즘/SWEA

[SWEA 9088] 다이아몬드 (C++)

by Bloofer 2020. 6. 2.

A. 문제설명

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AW7Oktj6WMQDFAWY

문제에 대한 자세한 설명은 링크 참조

 

1. 각각 크기가 다른 N개의 다이아몬드가 존재

2. 이 중 몇개를 골라 선물을 하려고 한다.

3. 다이아몬드 묶음은 K개의 크기차이 이하인 것들이어야 함

4. 묶음 중 최대로 줄 수 있는 다이아몬드의 수를 구하라 

 

B. 접근법

정렬 + Sliding Window

 

먼저 N개의 다이아몬드를 오름차순으로 정렬한다.

그 다음 head와 tail을 옮겨가며 Sliding Window를 이동하여 K개 이하의 차를 가지는 다이아몬드 묶음 윈도우를 만들어 정렬된 배열을 탐사. tail을 뒤로 옮길때마다 윈도우 크기를 전역의 변수와 비교하여 최대의 윈도우 크기를 구한다.

C. 풀이

1. diaVec에 넣은 크기들을 오름차순으로 정렬

2. Sliding Window를 이용, for loop안에서 idx 1부터 N까지 head와 tail을 K 범위 안에 늘려가며 최대 크기를 업데이트

3. 끝으로 가장 큰 size를 반환

 

D. 내 코드