프로그래머스#JS - 체육복 (**)

SSO·2020년 1월 2일
0

프로그래머스Lv1

목록 보기
4/47
post-custom-banner

문제

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;
}

참고사항

#탐욕법

profile
happy
post-custom-banner

0개의 댓글