Skip to content

Commit 5a00719

Browse files
committed
refactor: [프로그래머스][greedy] 체육복 - Map + 배열
1 parent fcfeb10 commit 5a00719

1 file changed

Lines changed: 16 additions & 10 deletions

File tree

ts-programmers/greedy/001_체육복.ts

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,33 @@
11
// https://school.programmers.co.kr/learn/courses/30/lessons/42862
22

33
{
4-
// 세번째 풀이 배열 버전
4+
// 세번째 풀이 Map + 배열 버전
55
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>();
98

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);
1212
}
1313

1414
// 잃은개수 빼기
1515
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);
1817
}
1918

2019
// 여유분 더하기
2120
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);
2422
}
2523

24+
// 배열로 변환하여 순차 처리
25+
const studentArr = Array.from({ length: n }, (_, i) => [
26+
i + 1,
27+
studentMap.get(i + 1)!,
28+
]);
29+
30+
// 체육복 없는 학생이 좌우에서 빌릴 수 있는지 확인
2631
for (let i = 0; i < studentArr.length; i++) {
2732
const [, count] = studentArr[i];
2833

@@ -40,6 +45,7 @@
4045
}
4146
}
4247

48+
// 체육 수업 가능한 학생 수
4349
return studentArr.filter(([, v]) => v >= 1).length;
4450
}
4551

0 commit comments

Comments
 (0)