대충 만든 자판

Lv. 1

Solution

export function roughKeyboard(keymap: string[], targets: string[]): number[] {
  const createKeyMap = (keymap: string) => {
    const keyMap = new Map<string, number>();
    [...keymap].forEach((key, i) => {
      if (keyMap.has(key)) {
        return;
      }
      keyMap.set(key, i + 1);
    });
    return keyMap;
  };
 
  const findLeastPressCharTime = (keyMaps: Array<Map<string, number>>, char: string) => {
    return keyMaps.reduce((prev, keyMap) => Math.min(prev, keyMap.get(char) || Infinity), Infinity);
  };
 
  const findLeastPressTargetTime = (keyMaps: Array<Map<string, number>>, target: string) => {
    let totalPressTime = 0;
    for (const char of target) {
      const pressTime = findLeastPressCharTime(keyMaps, char);
      if (pressTime === Infinity) {
        return -1;
      }
      totalPressTime += pressTime;
    }
    return totalPressTime;
  };
 
  const keyMaps = keymap.map(createKeyMap);
 
  return targets.map((target) => findLeastPressTargetTime(keyMaps, target));
}