- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 코어 자바스크립트
- 오늘도 개발자가 안된다고 말했다
- javascript
- 리팩터링 2판
- typescript
- CRUD
- TIL
- First Project
- CSS
- LEVEL 1
- Git
- react
- java
- Err-Handling
- 알고리즘
- TWIL
- sql
- 배포
- mongodb
- 면접을 위한 cs 전공지식 노트
- TMIL
- 코딩테스트
- Docker
- 아고라스테이츠
- MariaDB
- LEVEL1
- 프로그래머스
- Refactoring
- LEVEL 2
- 에러핸들링
Archives
성장에 목마른 코린이
(탐욕법) 체육복 220409 본문
728x90
나의 솔루션
function solution(n, lost, reserve) {
let ans = 0;
// n명의 학생만큼 1이 들어있는 배열을 만들어준다.
let arr = new Array(n).fill(1);
// 체육복이 없으면 1이 들어있던 배열에서 0으로 줄인다.
for (let i = 0; i < lost.length; i++) {
arr[lost[i] - 1] -= 1;
}
// 체육복 여벌이 있으면 1이 있던 배열에서 2로 늘려준다.
for (let i = 0; i < reserve.length; i++) {
arr[reserve[i] - 1] += 1;
}
// 여벌이 있는 학생이 있고, 그 옆에 체육복이 없는 학생이 있다면
// 여벌이 있는 학생이 체육복이 없는 학생에게 체육복을 준다.
for (let i = 0; i < n - 1; i++) {
if (arr[i] === 0 && arr[i+1] === 2 || arr[i] === 2 && arr[i+1] === 0) {
arr[i] = 1;
arr[i+1] = 1;
}
}
// 체육복이 있는 학생의 수만큼 ans에 +1 해줍니다.
for (let i = 0; i < n; i++) {
if (arr[i] >= 1) {
ans += 1;
}
}
// 결과 리턴
return ans;
}
좋아요가 가장 많이 달린 솔루션
function solution(n, lost, reserve) {
return n - lost.filter(a => {
const b = reserve.find(r => Math.abs(r-a) <= 1)
if(!b) return true
reserve = reserve.filter(r => r !== b)
}).length
}
느낀점
filter와 find를 써서 제가 4개의 for 문을 써서 해결했던걸 정말 간단하게 코드 구현해서 조금 놀랐습니다.
find문은 안써봤어서 한번 공부해야겠습니다!
for 문으로 -1, +1 작업 해주는거 좀 복잡했는데, 앞으로 하다보면 점점 적응되지 않을까 싶습니다!
'코딩 테스트 준비 > 프로그래머스 level 1' 카테고리의 다른 글
(연습문제) 두 정수 사이의 합 220412 (0) | 2022.04.12 |
---|---|
두 개 뽑아서 더하기 220412 (0) | 2022.04.12 |
(완전탐색) 모의고사 220409 (0) | 2022.04.09 |
(해시) 완주하지 못한 선수 220406 (0) | 2022.04.06 |
(정렬) K번째수 220406 (0) | 2022.04.06 |
Comments