논리 NOT( ! ) 연산자는 true 값을 false 로 변환
false 으로 변환할 수 있는 표현
- null
- NaN
- 0
- 빈 문자열 ("", '', ``)
- undefined
위의 표현을 제외한 나머지는 true
!true // false
!-1 // false
!"-1" // false
!35 // false
!"35" // false
!"cat" // false
!"true" // false
!"false" // false
!{} // false
![] // false
!function(){} // false
!false // true
!null // true
!undefined // true
!NaN // true
!0 // true
!"" // true
function solution(n, lost, reserve) {
let answer = 0;
let unable = 0;
// 수업을 들을 수 없는 사람
unable = lost.filter(a => { // 잃어버린 사람 중
const b = reserve.find(r => Math.abs(r-a) <= 1)
// 현재 lost학생(a)이 여벌을 가진 학생중 빌릴 사람 있는지 확인, Math.abs(r-a) <= 1 앞,뒤 번호인지 확인
if(!b) { // 빌릴 사람을 못찾은 경우, !undefined는 true이기 때문
return true;
}
reserve = reserve.filter(r => r !== b) // 빌려줄 수 있는 사람이 아닌 사람을 필터링
}).length // 빌려줄 수 없는 사람수 확인
return answer = n - unable; // 전제학생 - 수업이 불가능한 한생
}
이 코드를 채점하게 되면 12번 문제 오류가 나게 된다.
여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다. 이때 이 학생은 체육복을 하나만 도난당했다고 가정하며, 남은 체육복이 하나이기에 다른 학생에게는 체육복을 빌려줄 수 없습니다.
라는 조건에 맞지 않아서 인 것 같다.
배열을 체육복을 개수로 세팅한 후 해결해 나가는 방식
function solution(n, lost, reserve) {
let answer = 0;
let uniform = [];
// 초기 셋팅
// 체육복을 1번씩 가지고 있음
for(let i = 0; i < n; i++) {
uniform[i] = 1;
}
// 도난당한 사람은 체육복이 0개
for(let i = 0; i < lost.length; i++) {
uniform[lost[i]-1] = 0;
}
// 여벌을 가지고 있는 사람은 +1개를 해줌, 2개가 아닌 이유는 도난당했는데 여벌있으면 1개니까
for(let i = 0; i < reserve.length; i++) {
uniform[reserve[i]-1] += 1;
}
for(let i = 0; i < n; i++) { // 체육복이 0개일 경우 빌릴수 있는지 확인
if (uniform[i] == 0 && uniform[i-1] == 2) { // 앞번호 체육복을 빌리는 경우
// 한개씩 나눔
uniform[i-1] = 1;
uniform[i] = 1;
} else if (uniform[i] == 0 && uniform[i+1] == 2) { // 뒷번호 체육복을 빌리는 경우
// 한개씩 나눔
uniform[i] = 1;
uniform[i+1] = 1;
}
}
for(let i = 0; i < n; i++) {
if (uniform[i] > 0) { // 체육복이 1개 이상 가진 경우
answer++; // 수업 참여 가능 인원 카운트
}
}
return answer;
}
'프로그래머스 > JavaScript' 카테고리의 다른 글
[프로그래머스 JavaScript] Level1 예산 (0) | 2020.06.09 |
---|---|
[프로그래머스 JavaScript] Level1 크레인 인형뽑기 게임 (0) | 2020.06.04 |
[프로그래머스 JavaScript] Level1 직사각형 별찍기 (0) | 2020.04.17 |
[프로그래머스 JavaScript] Level1 이상한 문자 만들기 (0) | 2020.04.03 |
[프로그래머스 JavaScript] Level1 시저 암호 (0) | 2020.04.01 |