문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42862
1. 나의 풀이
function solution(n, lost, reserve) {
// 배열 정렬
lost.sort((a, b) => a - b);
reserve.sort((a, b) => a - b);
let lost_cnt = lost.length;
for (let i = lost.length - 1; i >= 0; i--) {
let l = lost[i];
var rightIndex = reserve.indexOf(l);
if (rightIndex !== -1) {
reserve.splice(rightIndex, 1);
lost.splice(i, 1);
lost_cnt--;
}
}
for (let l of lost) {
var minusIndex = reserve.indexOf(l - 1);
var plusIndex = reserve.indexOf(l + 1);
if (minusIndex !== -1) {
console.log("minus");
reserve.splice(minusIndex, 1);
lost_cnt--;
} else if (plusIndex !== -1) {
console.log("plus");
reserve.splice(plusIndex, 1);
lost_cnt--;
}
}
return n - lost_cnt;
}
- lost 배열과 reserve 배열을 정렬한다.
- lost 배열을 순회하면서 lost와 reserve에 같은 값이 있는지 찾고, 있다면 해당 값을 lost와 reserve에서 제거하고 lost_cnt를 1 감소시킨다. (indexOf를 통하여 index를 찾고 splice로 해당 index에 있는 값을 제거하는 방법을 활용했다) -> 여벌 체육복을 가져온 학생이 체육복을 도난당했을 경우를 먼저 고려한 것인데, 이 부분을 고려하지 못했어서 많이 헤맸었다.
- lost 배열을 순회하면서 reserve에 lost보다 1보다 크거나 작은 값을 찾아서 해당 값을 reserve 배열에서 제거하고 lost_cnt를 1 감소시킨다.
- n에서 lost_cnt를 뺀 값을 return 한다.
2. 다른 사람의 풀이
function solution(n, lost, reserve) {
const students = {};
let answer = 0;
for(let i = 1; i <= n; i++){
students[i] = 1;
}
lost.forEach(number => students[number] -= 1);
reserve.forEach(number => students[number] += 1);
for(let i = 1; i <= n; i++){
if(students[i] === 2 && students[i-1] === 0){
students[i-1]++;
students[i]--;
} else if(students[i] === 2 && students[i+1] === 0){
students[i+1]++;
students[i]--;
}
}
for(let key in students){
if(students[key] >= 1){
answer++;
}
}
return answer;
}
- 모든 학생은 1개의 체육복을 가지고 있다고 가정한다.(students 배열에 1을 넣는다.)
- lost 배열의 학생들은 체육복을 1개 잃고, reserve 배열의 학생들은 체육복을 1개 얻는다.
- i-1번째 학생이 체육복이 0개, i번째 학생이 체육복이 2개면 i번째 학생이 i-1번째 학생에게 체육복을 1개 빌려준다.
- i번째 학생이 체육복이 2개, i+1번째 학생이 체육복이 0개면 i번째 학생이 i+1번째 학생에게 체육복을 1개 빌려준다.
- 체육복이 1개 이상인 학생들이 몇 명인지 세서 return한다.
깔끔하고 이해하기 쉬운 풀이였다. 이 풀이를 활용하면 여벌 체육복을 가져온 학생이 체육복을 잃어버렸을 경우를 따로 계산하지 않아도 자연스럽게 계산에 포함되기 때문에 더 좋은 코드인 것 같다.
'Programmers(JavaScript)' 카테고리의 다른 글
[프로그래머스 자바스크립트] ‘K번째수’ 풀어보기 (0) | 2024.08.07 |
---|---|
[프로그래머스 자바스크립트] ‘구명보트’ 풀어보기 (0) | 2024.08.07 |
[프로그래머스 자바스크립트] ‘기능개발’ 풀어보기 (0) | 2024.07.17 |
[프로그래머스 자바스크립트] ‘같은 숫자는 싫어’ 풀어보기 (3) | 2024.07.17 |
[프로그래머스 자바스크립트] '완주하지 못한 선수' 풀어보기 (0) | 2024.07.17 |