알고리즘
[Programmers]체육복(난이도:★★★★★)
BaekGyuHyeon
2022. 5. 17. 09:01
https://programmers.co.kr/learn/courses/30/lessons/42862
코딩테스트 연습 - 체육복
점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번
programmers.co.kr
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = 0;
return solutionA(n,lost,reserve);
}
public int solutionA(int n, int[] lost, int[] reserve){
int answer = n - lost.length;
// index 앞 뒤로 비교할꺼기 때문에 정렬
sort(lost);
sort(reserve);
// 여분을 가지고 있는 사람이 체육복을 잃어버리면 여분 목록에서 제거
for(int i = 0 ; i < lost.length;i++){
for(int j = 0 ; j < reserve.length; j++){
if(lost[i] == reserve[j]){
lost[i] = -1;
reserve[j] = -1;
answer++;
break;
}
}
}
// 앞 뒤 인덱스와 비교해서 숫자가 일치하면 counter 증가 및 제거
for(int i = 0 ; i < lost.length; i++){
if(lost[i] == -1)
continue;
for(int j = 0; j < reserve.length; j++){
if(reserve[j] == -1)
continue;
if(lost[i] == reserve[j]-1 || lost[i] == reserve[j]+1){
answer++;
reserve[j] = -1;
break;
}
}
}
return answer;
}
public void sort(int[] arr){
int idx = arr.length -1;
for(int i = 0 ; i < arr.length; i++){
for(int j = 0; j < idx; j++){
if(arr[j] > arr[j+1]){
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
}