[프로그래머스] 체육복
https://programmers.co.kr/learn/courses/30/lessons/42862#
그리디문제이다.
function solution(n, lost, reserve) {
var answer = 0;
var beforeDonan = [];
for(let i = 0; i < n; i++){ // 모든 학생이 체육복을 가지고 있었다고 가정.
beforeDonan[i] = 1;
}
for(let i = 1; i <= n; i++){ // 도난 당했을 때, 체육복 갯수 감소 i = 학생 번호
for(let j = 0; j < lost.length; j++){
if(i === lost[j])
beforeDonan[i-1] -= 1;
}
for(let k = 0; k < reserve.length; k++){ // 여분 체육복 가진 사람 갯수 증가
if(i === reserve[k])
beforeDonan[i-1] += 1;
}
}
//도난당한 친구에게 여분 체육복 나눠주기
for(let l = 0; l < beforeDonan.length; l++){
if(beforeDonan[l] === 2 && beforeDonan[l+1] === 0) {
beforeDonan[l] -= 1;
beforeDonan[l+1] += 1;
}
if(beforeDonan[l+1] === 2 && beforeDonan[l] === 0){
beforeDonan[l+1] -= 1;
beforeDonan[l] += 1;
}
if(beforeDonan[l] === 2 || beforeDonan[l] === 1)
answer++;
}
return answer;
}
테스트케이스는 쉽게 통과했지만 답안 제출을 했을 때는 정답률이 처참했다..
다양한 테스트 케이스에 대해 고민을 해봐야겠다고 느꼈다.