https://programmers.co.kr/learn/courses/30/lessons/42862
0. 해설참고
function solution(n, lost, reserve) {
var answer = 0;
var students = [];
for(var i=0; i<=n; i++){
students.push(1); // 옷 있음 1
}
for(var i=1; i<=n; i++){
for(var j=0; j<lost.length; j++){
if(i === lost[j]) {
students[i] = 0; // 옷 없음 0
}
}
for(var j=0; j<reserve.length; j++){
if(i === reserve[j]) {
students[i] += 1; // 여벌 있음 1 **
}
}
}
for(var i=1; i<=n; i++){
if(students[i]===0 && students[i-1]===2){
students[i-1] = 1;
students[i] = 1;
}else if(students[i]===0 && students[i+1]===2){
students[i+1] = 1;
students[i] = 1;
}
}
for(var i=1; i<=n; i++){
if(students[i]>0) {
answer = answer + 1;
}
}
return answer;
}
1. 2020 - 2
function solution(n, lost, reserve) {
var answer = 0;
var count=0;
var student = [];
//맨앞1은 추후 무시(인덱스 주의)
for(var i=0; i<=n+1; i++){
student.push(1);
}
for(var j=0; j<lost.length; j++){
student[lost[j]]=0;
if(reserve.includes(lost[j])){
student[lost[j]]=1;
var index = reserve.indexOf(lost[j]);
reserve.splice(index, 1);
}
}
// lost = reserve인 경우 고려해야 함
// 요소 비교 로직이 바로 떠오르지 않음.
for(var k=0; k<reserve.length; k++){
// undefined인 경우도 고려해야 함
// indefined 고려하는 대신, student array에 추가값 입력.
// if((student[reserve[k]+1]!=undefined)){
if(student[reserve[k]-1]===0){
student[reserve[k]-1]=1;
}else if(student[reserve[k]+1]===0){
student[reserve[k]+1]=1;
}
}
// }
console.log(student);
student.forEach(num => {
if(num===1){
count = count +1;
}
});
answer = count -2;
return answer;
}
2. 2020 - 1
test 3,7,8,10 fail -> 왜? students[s+1]
을 students[s-1]
이라고 해서..
function solution(n, lost, reserve) {
var answer = 0;
var students = [];
var lenLost = lost.length;
var lenReserve = reserve.length;
var lenStudents = 0;
var count = 0;
for(var i=0; i<=(n+1); i++){
students[i] = 0;
} // [0,...0] 총 n+2개의 el. 인덱스 편하게 이용하려고
for(var j=0; j<lenLost; j++){
var index = lost[j];
students[index] = 1; // 잃어버림:1
}
for(var k=0; k<lenReserve; k++){
var index2 = reserve[k];
if (students[index2] === 1){ //잃어버린 애 = 여벌가진 애
students[index2] = 0; // 옷 있음으로 설정
} else {
students[index2] = 2; //여벌 가짐으로 설정
}
}
for(var s=1; s<=n; s++){
if(students[s] === 2){ //예외처리 불필요. s[0]과 s[n+1]이 1일 수 없음
if((students[s-1])===1){
students[s-1] = 0;
students[s] = 0;
} else if((students[s+1]) === 1){
students[s+1] = 0;
students[s] = 0;
}
}
}
lenStudents = students.length; //-2필요
for(var w=0; w<lenStudents; w++){
if(students[w] !== 1){
count = count +1;
}
}
answer = count -2;
return answer;
}
//var n = 7;
//var lost =[2,3,6];
//var reserve = [4,5,7];
//return= 5
//console.log('answer',solution(n,lost,reserve));
배열은 index
를 이용해야 하는데, 자꾸 주어진 값에 초점을 맞추고 있다..
힌트참고. 오래걸림.
2. 2019 - 정확성 테스트 5, 12 fail 왜 틀린거지!?
function solution(n, lost, reserve) {
var count = 0;
for(var i=1; i<=n; i++){
if (lost.includes(i)){
if (reserve.includes(i)){
var indexOfGoodPerson = reserve.indexOf(i);
reserve.splice(indexOfGoodPerson,1);
count += 1;
} else if (reserve.includes(i-1)){
var indexOfGoodPerson = reserve.indexOf(i-1);
reserve.splice(indexOfGoodPerson,1);
count += 1;
} else if (reserve.includes(i+1)){
var indexOfGoodPerson = reserve.indexOf(i+1);
reserve.splice(indexOfGoodPerson,1);
count += 1;
}
} else {
count += 1;
}
}
return count;
}