|
1 | 1 | // https://school.programmers.co.kr/learn/courses/30/lessons/42862 |
2 | 2 |
|
3 | 3 | { |
| 4 | + // 세번째 풀이 배열 버전 |
| 5 | + function solution4(n: number, lost: number[], reserve: number[]): number { |
| 6 | + let answer = 0; |
| 7 | + |
| 8 | + const studentArr: number[][] = []; |
| 9 | + |
| 10 | + for (let i = 0; i < n; i++) { |
| 11 | + studentArr.push([i + 1, 1]); |
| 12 | + } |
| 13 | + |
| 14 | + // 잃은개수 빼기 |
| 15 | + for (const student of lost) { |
| 16 | + const idx = studentArr.findIndex(([num]) => num === student); |
| 17 | + if (idx !== -1) studentArr[idx][1] -= 1; |
| 18 | + } |
| 19 | + |
| 20 | + // 여유분 더하기 |
| 21 | + for (const student of reserve) { |
| 22 | + const idx = studentArr.findIndex(([num]) => num === student); |
| 23 | + if (idx !== -1) studentArr[idx][1] += 1; |
| 24 | + } |
| 25 | + |
| 26 | + for (let i = 0; i < studentArr.length; i++) { |
| 27 | + const [, count] = studentArr[i]; |
| 28 | + |
| 29 | + if (count === 0) { |
| 30 | + // 왼쪽 학생 |
| 31 | + if (i > 0 && studentArr[i - 1][1] === 2) { |
| 32 | + studentArr[i - 1][1] -= 1; |
| 33 | + studentArr[i][1] += 1; |
| 34 | + } |
| 35 | + // 오른쪽 학생 |
| 36 | + else if (i < n - 1 && studentArr[i + 1][1] === 2) { |
| 37 | + studentArr[i + 1][1] -= 1; |
| 38 | + studentArr[i][1] += 1; |
| 39 | + } |
| 40 | + } |
| 41 | + } |
| 42 | + |
| 43 | + return studentArr.filter(([, v]) => v >= 1).length; |
| 44 | + } |
| 45 | + |
| 46 | + // test |
| 47 | + console.log(solution4(5, [2, 2, 2, 4], [1, 2, 3, 3, 5])); // 4 |
| 48 | + |
4 | 49 | // 세번째 풀이 - 여러 벌 도난 / 여러 벌 보유의 경우 |
5 | 50 | // ex) lost = [2, 2, 4] / reserve = [1, 2, 3, 3, 5] |
6 | 51 |
|
|
19 | 64 | for (let i = 1; i <= n; i++) { |
20 | 65 | studentMap.set(i, 1); |
21 | 66 | } |
| 67 | + console.log(studentMap); |
22 | 68 |
|
23 | 69 | // 잃은개수 빼기 |
24 | 70 | for (const student of lost) { |
|
51 | 97 | } |
52 | 98 |
|
53 | 99 | // test |
54 | | - console.log(solution3(5, [2, 2, 4], [1, 2, 3, 3, 5])); // 5 |
| 100 | + // console.log(solution3(5, [2, 2, 4], [1, 2, 3, 3, 5])); // 5 |
55 | 101 |
|
56 | 102 | // 두번째 풀이 |
57 | 103 | function solution2(n: number, lost: number[], reserve: number[]): number { |
|
0 commit comments