학생 수 n, 체육복을 도난당한 학생 번호 배열 lost, 여벌 체육복이 있는 학생 번호 배열 reserve가 주어져요. 학생은 1번부터 n번까지 있어요.
체육복이 없는 학생은 바로 앞 번호나 바로 뒤 번호 학생에게만 여벌을 빌릴 수 있어요. 체육 수업을 들을 수 있는 학생 수의 최댓값을 반환해요.
주의할 점이 하나 있어요. 여벌이 있지만 자기 체육복을 도난당한 학생은, 그 여벌을 자기가 입어야 해서 남에게 빌려줄 수 없어요.
예시
예시 1
예시 2
예시 3
제한 사항
- 1 ≤ n ≤ 30
- 1 ≤ lost.length, reserve.length ≤ n (없으면 빈 배열)
- 같은 학생이 lost와 reserve 양쪽에 있을 수 있어요.
학생마다 체육복 개수를 세요(기본 1, 도난이면 -1, 여벌이면 +1). 개수가 2인 학생만 빌려줄 수 있어요. 번호 순서대로 보면서 개수가 2인 학생은 앞 번호에 먼저, 없으면 뒤 번호에 빌려줘요. 마지막에 체육복이 1개 이상인 학생을 세요.
javascriptCopy codefunction gymUniform(n, lost, reserve) {const has = new Array(n + 2).fill(1);for (const l of lost) has[l] -= 1;for (const r of reserve) has[r] += 1;for (let i = 1; i <= n; i++) {if (has[i] !== 2) continue;if (has[i - 1] === 0) {has[i - 1] = 1;has[i] = 1;} else if (has[i + 1] === 0) {has[i + 1] = 1;has[i] = 1;}}let count = 0;for (let i = 1; i <= n; i++) if (has[i] >= 1) count++;return count;}
이전 문제합이 target인 최단 구간
다음 문제예산 배정
예시 테스트만 실행 (Cmd/Ctrl+Enter)
숨김 테스트까지 채점 (Cmd/Ctrl+Shift+Enter)
에디터를 불러오고 있어요…
코드를 작성하고Ctrl↵를 눌러 예시 테스트를 확인해 보세요.