알고리즘/test

javascript) 프로그래머스 - 대충 만든 자판

이경찬 :) 2023. 2. 27. 10:56

https://school.programmers.co.kr/learn/courses/30/lessons/160586#

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

실행코드

function solution(keymap, targets) {
  const result = [];
  for (const target of targets) {
    let targetSum = 0;
    let hasInvalidChar = false;
    for (const char of target) {
      let charPositions = [];
      for (let i = 0; i < keymap.length; i++) {
        const pos = keymap[i].indexOf(char);
        if (pos !== -1) {
          charPositions.push(pos + 1);
        }
      }
      if (charPositions.length === 0) {
        hasInvalidChar = true;
        break;
      }
      const minPos = Math.min(...charPositions);
      targetSum += minPos;
    }
    result.push(hasInvalidChar ? -1 : targetSum);
  }
  return result;
}

풀이

  1. 함수의 매개변수 keymap은 2차원 문자열 배열이며, 각 열은 정확히 같은 문자들을 포함하고 있습니다. keymap 배열은 문자열이 아닌 숫자로 이루어져 있습니다. 이 숫자는 각 문자의 ASCII 값에 1을 뺀 값입니다. 예를 들어, keymap[0][1]이 "b"라면, keymap[0][1]에 저장된 값은 "b".charCodeAt(0) - 1 입니다.
  2. 함수의 매개변수 targets는 문자열 배열입니다. 이 배열은 검색하려는 문자열을 포함합니다.
  3. 반복문을 사용하여 targets 배열에서 각각의 target 문자열을 가져옵니다.
  4. targetSum 변수를 초기화하고, hasInvalidChar 변수를 false로 초기화합니다. hasInvalidChar 변수는 현재 target 문자열에 keymap 배열에서 찾을 수 없는 문자가 있는지 여부를 나타냅니다.
  5. 반복문을 사용하여 target 문자열에서 각각의 문자를 가져옵니다.
  6. 반복문을 사용하여 keymap 배열에서 현재 문자의 위치를 찾습니다. 문자가 keymap 배열에 없으면 hasInvalidChar 변수를 true로 설정하고, 반복문을 중지합니다.
  7. 문자가 keymap 배열에 있는 경우, 문자가 있는 가장 왼쪽 열의 번호를 계산합니다. 이를 위해 Math.min 함수를 사용하여 배열 charPositions에서 가장 작은 값을 찾습니다.
  8. targetSum 변수에 현재 문자의 위치를 더합니다.
  9. hasInvalidChar 변수가 true로 설정되었으면, 현재 target 문자열이 유효하지 않기 때문에 -1을 result 배열에 추가하고, 반복문을 중지합니다.
  10. 반복문이 모두 완료되면, result 배열을 반환합니다.

즉, 이 코드는 keymap 배열에서 문자를 찾아 해당 문자가 있는 열의 번호를 계산하고, 이를 targets 배열에서 찾는 각각의 문자열에 대해 반복합니다. keymap 배열에서 찾을 수 없는 문자가 있으면, 해당 문자열이 유효하지 않으므로 -1을 result 배열에 추가합니다.