대충 만든 자판
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));
}