반응형
- 첫 풀이 및 정답풀이
이 문제는 특별한 알고리즘보다는 그냥 있는 조건에 맞게 코딩하면 풀 수 있는 문제이다. 필자는 체육복 개수를 카운팅 하는 1차원 배열을 n+2 크기만큼 선언해 주었다. 그 이유는 기본적으로 체육복을 앞, 뒤 사람에게만 빌릴 수 있는데 이를 구현하는 과정에서 인덱스 범위 에러와 코드 자체가 복잡하다고 생각되어서 이다. 자세한 풀이는 코드를 통해 확인하자.
import java.util.Arrays;
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = n;
// 1. 체육복 개수 배열.
int check[] = new int[n+2];
// 2. 체육복이 없는 학생 수.
int temp = 0;
// 3. 초기 모든 학생의 체육복은 1개.
Arrays.fill(check,1);
// 4. 체육복을 잃어버린 학생들의 체육복은 0개.
for(int i =0;i<lost.length;i++){
check[lost[i]]--;
}
// 5. 여벌 체육복이 있는 학생들의 체육복은 2개.
for(int i =0;i<reserve.length;i++){
check[reserve[i]]++;
}
// 6. 1번 학생부터 n번 학생까지 반복.
for(int i =1;i<=n;i++){
// 6-1. 체육복이 있는 학생은 넘어간다.
if(check[i] > 0) continue;
// 6-2. 체육복이 없는 학생의 앞, 뒤 학생들의 인덱스 범위가 안 벗어날 때.
if(i-1>=0 || i+1<check.length){
// 6-3. 앞 학생에게 체육복을 빌린다.
if(check[i-1] > 1){
check[i-1]--;
check[i]++;
// 6-4. 뒤 학생에게 체육복을 빌린다.
}else if(check[i+1] > 1){
check[i+1]--;
check[i]++;
}
}
// 6-5. 모두 빌렸지만 체육복이 없는 학생들의 수를 증가.
if(check[i] == 0) temp++;
}
return (answer-temp);
}
}
반응형