대충 만든 자판 문제

presentnow·2023년 4월 12일
function solution(keyMap, targets) {
  var answer = [];
  // targets 의 길이만큼 반목문을 실행하여 targets내의 요소들을 확인하고자 한다.
  for(let i=0; i<targets.length; i++) {
    let total = 0;
    // targets 요소의 길이만큼 반복문을 실행하여 요소의 각 문자를 확인하고자 한다.
    for(let k=0; k<targets[i].length; k++) {
      // count 변수는 키를 몇 번 눌렀을 때 각 문자를 작성할 수 있는지 최소의 숫자를 구하기 위한 변수이다. 
      let count = 101;
      const word = targets[i][k]
      // keyMap의 길이만큼 반복문을 실행하여 targets 요소의 각 문자를 keyMap의 요소가 포함하고 있는지 확인하고자 한다.
      for(j=0; j<keyMap.length; j++) {
        let index = keyMap[j].indexOf(word);
        // targets 요소의 각 문자를 keyMap의 요소가 포함하고 있는 경우에 대한 처리
        if(index != -1) {
          // count가 -1이 아니면서 해당 최소 숫자가 이전의 최소값인 count 보다 작은 경우 이거나
          // count가 -1 인 경우는 count값을 해당 최소값으로 대체한다.
          if((count != -1 && index+1 < count) || count == -1) count = index+1;
        }
        // targets 요소의 각 문자를 keyMap의 요소가 포함하고 있지 않으면서 
        // count > 100 ( count가 -1 이 아니고, 최소의 숫자가 구해지지 않은 상태 )인 경우에 대한 처리
        if(index == -1 && count > 100) count = -1;
      }
      // targets 요소의 각 문자를 keyMap의 요소를 순회하며 확인했을 때 문자를 포함하고 있지 않은 것이 확인된 경우, -1을 answer에 push하고
      // 이미 해당 문자를 작성 할 수 없으므로, 반복문을 break 하여 다음 targets의 요소를 확인하도록 한다.
      if(count == -1){
        answer.push(-1);
        break;
      }
      // targets 요소의 각 문자를 keyMap의 요소를 순회하며 확인했을 때 문자를 포함하고있다는 것이 확인된 경우 total에 count를 더해준다.
      else total+=count;
    }
    // targets의 요소가 각 문자중 하나라도 없어서 작성할 수 없게 된 경우가 아니라면, answer[i] 에 값이 없을 것 이므로, total 값을 answer[i] 에 할당한다.
    if(!answer[i]) answer[i] = total;      
  }
  return answer;
}




문제출처
프로그래머스 > 코딩테스트연습



0개의 댓글