[프로그래머스] Lv.1 체육복

Miro·2022년 8월 12일
0
post-thumbnail

프로그래머스 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]가 같으면 lostreserve에서 각각 i, j번째 요소를 splice를 사용하여 제거한다.
배열의 길이가 변경되었기 때문에 i--, j--를 통해 인덱스를 맞춰준다.

첫 번째 이중반복문이 끝나면 lostreserve에는 각각 도난을 당하고 여벌이 없는 학생과, 도난을 당하지 않고 여벌이 있는 학생만 남게 된다.

다시 한번 이중반복문을 사용하여 바깥쪽 반복문은 i가 0부터 lost의 길이까지, 안쪽 반복문은 j가 0부터 reserve의 길이까지 반복한다.

만약 lost[i]-1 또는 lost[i]+1reserve[j]와 같다면 lostreserve에서 각각 i, j번째 요소를 splice를 사용하여 제거한다.
배열의 길이가 변경되었기 때문에 i--, j--를 통해 인덱스를 맞춰준다.

전제 인원인 n에서 체육복을 못 빌린 학생 lost의 길이를 빼서 answer에 할당한 뒤 return 해준다.

profile
프론트엔드 개발자(진)

0개의 댓글