카테고리 없음
코딩테스트 - 1단계 - 체육복
권멋져
2022. 5. 30. 21:25
https://programmers.co.kr/learn/courses/30/lessons/42862
코딩테스트 연습 - 체육복
점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번
programmers.co.kr
- 문제 파악
체육복을 도난 맞아 체육시간에 참여를 못하는 학생들이 있다. 하지만 다행히 체육복을 여러벌 가지고 있는 학생이 자신과 체격이 비슷한 사람에게 체육복을 빌려주려고 한다. 그러나 한 학생이 빌려줄 수 있는건 1명뿐이고, 여러벌 가져온 학생도 도난 당했을 경우에는 다른 사람에게 체육복을 빌려줄 수 없다. 이 때 체육시간에 가장 많이 참여할 수 있는 학생수를 출력 하라
- 정답
조건이 많다. 조건을 하나하나 처리해가면서 해보자.
오름차순 또는 내림차순 정렬을 하여 예상치 못한 경우를 줄여보자.
#include "bits/stdc++.h"
using namespace std;
int solution(int n, vector<int> lost, vector<int> reserve) {
int answer = n - lost.size(); // 체육 수업 가능한 학생
int arr_rsv[32] = {0,};
int arr_lst[32] = {0,};
sort(reserve.begin(),reserve.end());
sort(lost.begin(),lost.end());
for(auto a : reserve)
{
for(auto b : lost)
{
if(a==b)
{
answer++;
arr_rsv[a] = 1;
arr_lst[b] = 1;
}
}
}
for(auto a : reserve)
{
for(auto b : lost)
{
if(!arr_lst[b] && !arr_rsv[a])
{
if(b== a-1 || b== a+1)
{
arr_lst[b] = 1;
arr_rsv[a] = 1;
answer++;
break;
}
}
}
}
return answer;
}