|
1 | 1 | // https://school.programmers.co.kr/learn/courses/30/lessons/42862 |
2 | 2 |
|
3 | 3 | { |
4 | | - // 세번째 풀이 배열 버전 |
| 4 | + // 세번째 풀이 Map + 배열 버전 |
5 | 5 | function solution4(n: number, lost: number[], reserve: number[]): number { |
6 | | - let answer = 0; |
7 | | - |
8 | | - const studentArr: number[][] = []; |
| 6 | + // 학생 기본 Map |
| 7 | + const studentMap = new Map<number, number>(); |
9 | 8 |
|
10 | | - for (let i = 0; i < n; i++) { |
11 | | - studentArr.push([i + 1, 1]); |
| 9 | + // 모든 학생에게 체육복 1벌씩 주기 |
| 10 | + for (let i = 1; i <= n; i++) { |
| 11 | + studentMap.set(i, 1); |
12 | 12 | } |
13 | 13 |
|
14 | 14 | // 잃은개수 빼기 |
15 | 15 | for (const student of lost) { |
16 | | - const idx = studentArr.findIndex(([num]) => num === student); |
17 | | - if (idx !== -1) studentArr[idx][1] -= 1; |
| 16 | + studentMap.set(student, studentMap.get(student)! - 1); |
18 | 17 | } |
19 | 18 |
|
20 | 19 | // 여유분 더하기 |
21 | 20 | for (const student of reserve) { |
22 | | - const idx = studentArr.findIndex(([num]) => num === student); |
23 | | - if (idx !== -1) studentArr[idx][1] += 1; |
| 21 | + studentMap.set(student, studentMap.get(student)! + 1); |
24 | 22 | } |
25 | 23 |
|
| 24 | + // 배열로 변환하여 순차 처리 |
| 25 | + const studentArr = Array.from({ length: n }, (_, i) => [ |
| 26 | + i + 1, |
| 27 | + studentMap.get(i + 1)!, |
| 28 | + ]); |
| 29 | + |
| 30 | + // 체육복 없는 학생이 좌우에서 빌릴 수 있는지 확인 |
26 | 31 | for (let i = 0; i < studentArr.length; i++) { |
27 | 32 | const [, count] = studentArr[i]; |
28 | 33 |
|
|
40 | 45 | } |
41 | 46 | } |
42 | 47 |
|
| 48 | + // 체육 수업 가능한 학생 수 |
43 | 49 | return studentArr.filter(([, v]) => v >= 1).length; |
44 | 50 | } |
45 | 51 |
|
|
0 commit comments