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