체육복(프로그래머스)

정승옥(seungok)·2020년 11월 13일
0

프로그래머스

목록 보기
3/40

문제설명

  • 전체 학생수 n, 체육복을 도난당한 학생수 배열 lost, 여벌의 체육복을 가져온 학생수 배열 reserve
  • 여벌의 체육복이 있는 학생은 바로 앞번호나 뒷번호 학생에게만 체육복을 빌려줄 수 있음
  • 체육수업을 들을 수 있는 학생의 최대값을 반환

제한사항

  • 전체 학생수는 2명이상 30명이하
  • 도난당한 학생수는 1명이상 n명이하 중복없음
  • 여벌의 체육복을 가져온 학생수는 1명이상 n명이하 중복없음
  • 여벌의 체육복을 가져온 학생이 도난을 당하면 다른 학생에게 빌려줄 수 없음

풀이

function solution(n, lost, reserve) {
    let answer = 0;
    let count = 0;
    
    for(let i=0;i<lost.length;i++){
        for(let j=0;j<reserve.length;j++){
            if(lost[i] === reserve[j]){
                lost[i] = '*';
                reserve[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[i] = '*';
                reserve[j] = '*';
            }
        }
    }
    
    lost.forEach(item=>{
        if(item !== '*')
            count += 1;
    })
    answer = n - count;
    console.log(answer);
    return answer;
}

체크포인트

  • 테스트 케이스: 8, [4, 5], [5, 6]
  • 여벌이 있지만 도난당한 학생을 먼저 해결하지 않으면 5번학생은 실제로는 빌려줄 수 없지만 4번학생이 5번학생에게 여벌을 받고 5번학생이 6번학생에게 여벌을 받는 오류가 생기기 때문에 먼저 반복문을 돌려 제외시켜야함
profile
Front-End Developer 😁

0개의 댓글