프로그래머스 #JavaScript - 스킬트리

SSO·2020년 1월 26일
0

프로그래머스 Lv2

목록 보기
7/46

문제

https://programmers.co.kr/learn/courses/30/lessons/49993

풀이

Others


function solution(skill, skill_trees) {
  var answer = 0; 
    var newArr = skill.split("");
    var str = 0;

    for(var i=0;i<skill_trees.length;i++){
        str = skill_trees[i].split("").filter(element => newArr.includes(element)).join("");
      //순서를 지켜야 함 -> substr 경우의 수가 한정적. 
      //이 부분을 생각못함.
        if(str === skill.substring(0,str.length)){
            answer++;
        }
    }
    return answer; 
}

Me...(일부 성공 일부 실패) -> WHY?
=> 접근방법자체가 틀림..ㅠㅠ


function solution(skill, skill_trees) {
  var answer = 0;
  
  //skill각 문자의 인덱스를 찾아서 오름차순인지 확인
  var skillArr = skill.split('');
  for (var i =0; i<skill_trees.length; i++) {
    var temp = [];
    var count = 0;
    for (var j = 0; j < skill.length; j++) {
      temp.push(skill_trees[i].split('').findIndex(str => str === skillArr[j]));
    }
    // console.log(temp);
    if (temp[temp.length - 1] === -1) {
      temp.pop();
    }
    console.log(temp);
  
  // index 비교 -> 오름차순일 경우만 count
  // index -1인 경우는 무시 -> 가 아니라 맨 뒤만 -1가능
    if(temp.some(el=> el ===-1)){
      answer = answer;
    } else {
      for (var k = 1; k < temp.length; k++) {
        var first = temp[k-1];
        var count = 0;
        if (temp.slice(k).some(el => temp[k-1] > el)){ //이것도 안돼 -> 5896
          count = count+1;
        }
      }
      if (count === 0 ){
        answer=answer+1; console.log(answer);
      }
    }
  }
  return answer;
}
       

더 생각해보기

나는 너무 복잡하게 생각함.
코딩을 하기 전에 알고리즘 자체를 최대한 단순화해보기.
문자열의 비교!!

참고사항

profile
happy

0개의 댓글