면접

프로그래머스 체육복

index.ys 2023. 8. 6. 00:25

로직

  • 반복문을 이용하여 1부터 n까지의 학생번호를 키로 사용하여 students 객체 초기화, 체육복이 있는 상태
  • lost  배열에 있는 학생들은 체육복이 없는 상태이므로 lost배열을 순회하면서 해당 학생들의 students객체 값에 1을 뺌 => 체육복이 없는 학생들을 찾아냄
  • reserve 배열에 있는 학생들은 여벌의 체육복을 가지고 있는 학생, reserve 배열을 돌면서 학생들의 students 객체에 1을 더하여 여벌의 체육복을 가진 상태를 찾아냄
  • 반복문을 돌면서 1부터 n까지의 학생번호를 순회
  • 만약 현재 학생이 students[i]이 여벌의 체육복을 가지고 왼쪽 학생 students[i-1]이 체육복이 없는 상태라면 왼쪽 학생에게  체육복 +1 현재 학생의 체육복 갯수 -1
  • 현재 학생이 여벌의 체육복을 가지고 오른쪽 하생은 체육복이 없다면 오른쪽 학생에게 빌려주고 현재 학생의 체육복 감소
  • 반복문을 돌면서 students 객체에 체육복이 있는 학생을 카운트하여 합산하여 반환
function solution(n, lost, reserve) {
    const students = {};
    let answer = 0;
    for(let i = 1; i <= n; i++){
        students[i] = 1;
    }
    lost.forEach(number => students[number] -= 1);
    reserve.forEach(number => students[number] += 1);

    for(let i = 1; i <= n; i++){
        if(students[i] === 2 && students[i-1] === 0){
                students[i-1]++;
                students[i]--;
        } else if(students[i] === 2 && students[i+1] === 0){
                students[i+1]++;
                students[i]--;
        }
    }
    for(let key in students){
        if(students[key] >= 1){
            answer++;
        }
    }
    return answer;
}

https://school.programmers.co.kr/learn/courses/30/lessons/42862

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr