Skip to content

Commit 4de0f8a

Browse files
committed
solution 체육복
1 parent 68d03df commit 4de0f8a

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

level-1/체육복.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,3 +88,40 @@ function solution(n, lost, reserve) {
8888
//그리디
8989
// lost 배열과 reserve 배열을 순회하여 체육복을 추가, 제거 해줍니다.
9090
// 그 후에 최종적으로 i부터 n까지 for문을 순회하며 i번쨰 학생과 i+1번째의 학생이 가진 체육복 수를 비교하여 빌려 줄 수 있는지, 빌려줄 수 없는지 확인 합니다.
91+
92+
//정답 4 - chaerin-dev
93+
function solution(n, lost, reserve) {
94+
// 학생들의 체육복 개수를 저장할 배열 students
95+
// 학생의 index가 1번부터 시작하므로 배열의 길이를 n+1로 설정
96+
// 0번 학생은 실제로는 없지만 초기값을 1로 설정하면 이후 연산에 영향을 미치지 않음
97+
const students = Array.from({ length: n + 1 }, () => 1);
98+
99+
// 체육복 분실/여분 정보 students 배열에 반영
100+
lost.forEach((lostStudent) => students[lostStudent]--);
101+
reserve.forEach((reserveStudent) => students[reserveStudent]++);
102+
103+
// 체육복이 없어 체육 수업을 들을 수 없는 학생 수를 저장할 변수 cnt
104+
let cnt = 0;
105+
students.forEach((student, i) => {
106+
// 현재 인덱스의 학생이 체육복이 없다면
107+
if (student === 0) {
108+
// 바로 앞 학생이 체육복 여분이 있다면
109+
if (students[i - 1] === 2) {
110+
// 바로 앞 학생에게 체육복 빌리기
111+
students[i - 1]--;
112+
student++;
113+
}
114+
// 바로 앞 학생에게 체육복을 빌리지 못했고, 바로 뒤 학생이 체육복 여분이 있다면
115+
else if (students[i + 1] === 2) {
116+
// 바로 뒤 학생에게 체육복 빌리기
117+
students[i + 1]--;
118+
student++;
119+
}
120+
// 바로 앞 학생과 바로 뒤 학생 모두에게 체육복을 빌리지 못했다면 체육 수업을 들을 수 없음
121+
else cnt++;
122+
}
123+
});
124+
125+
// 체육 수업을 들을 수 있는 학생 수 = 전체 학생 수 - 체육 수업을 들을 수 없는 학생 수
126+
return n - cnt;
127+
}

0 commit comments

Comments
 (0)