프로그래머스 Lv.1 체육복
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | function solution(n, lost, reserve) { // 체육복 없는 학생, 여벌 체육복 있는 학생 오름차순 정렬 lost.sort((a, b) => a-b); reserve.sort((a, b) => a-b); // 여벌 체육복이 있고 메인 체육복을 도난 당한 학생 제외 for(let i = 0; i < lost.length; i++) { for(let j = 0; j < reserve.length; j++) { if(lost[i] === reserve[j]) { lost.splice(i, 1); reserve.splice(j, 1); i--; j--; } } } // 체육복 빌리기 for(let i = 0; i < lost.length; i++) { for(let j = 0; j < reserve.length; j++) { if(lost[i]-1 === reserve[j] || lost[i]+1 === reserve[j]) { lost.splice(i, 1); reserve.splice(j, 1); i--; j--; } } } // 전제 인원에서 체육복 못 빌린 학생 제외 let answer = n - lost.length; return answer; } | cs |
먼저
lost
,reserve
의 순서를 오름차순으로 정렬한다.이중반복문을 사용하여 바깥쪽 반복문은
i
가 0부터lost
의 길이까지, 안쪽 반복문은j
가 0부터reserve
의 길이까지 반복한다.만약
lost[i]
와reserve[j]
가 같으면lost
와reserve
에서 각각 i, j번째 요소를splice
를 사용하여 제거한다.
배열의 길이가 변경되었기 때문에i--
,j--
를 통해 인덱스를 맞춰준다.첫 번째 이중반복문이 끝나면
lost
와reserve
에는 각각 도난을 당하고 여벌이 없는 학생과, 도난을 당하지 않고 여벌이 있는 학생만 남게 된다.다시 한번 이중반복문을 사용하여 바깥쪽 반복문은
i
가 0부터lost
의 길이까지, 안쪽 반복문은j
가 0부터reserve
의 길이까지 반복한다.만약
lost[i]-1
또는lost[i]+1
이reserve[j]
와 같다면lost
와reserve
에서 각각 i, j번째 요소를splice
를 사용하여 제거한다.
배열의 길이가 변경되었기 때문에i--
,j--
를 통해 인덱스를 맞춰준다.전제 인원인
n
에서 체육복을 못 빌린 학생lost
의 길이를 빼서answer
에 할당한 뒤 return 해준다.