
문제
https://www.acmicpc.net/problem/20436
결과

풀이
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "boj/input.txt";
const input = fs.readFileSync(filePath).toString().trim().split("\n");
key = [['q','w','e','r','t','y','u','i','o','p'],
['a','s','d','f','g','h','j','k','l'],
['z','x','c','v','b','n','m']];
right = ['y','u','i','o','p','h','j','k','l','b','n','m'];
let [sl, sr] = input[0].trim().split(" ");
let zoac = input[1].trim().split("");
let time = 0;
function lenkey(a, b) {
for (let i = 0; i < key.length; i++){
if (key[i].includes(a)) [xl, yl] = [i, key[i].indexOf(a)];
if (key[i].includes(b)) [xr, yr] = [i, key[i].indexOf(b)];
}
return Math.abs(xl - xr) + Math.abs(yl - yr);
}
let xl, yl, xr, yr;
zoac.forEach(z => {
if (right.includes(z)){
time += lenkey(z, sr);
sr = z;
}
else{
time += lenkey(z, sl);
sl = z;
}
time += 1;
})
console.log(time);
네부캠 2차코테로 파이썬을 사용할 수 없어서.. js 연습을 하기위한 쉬운 구현문제이다.
파이썬으로 했다면 더빨리 풀 수 있었을텐데 언어가 익숙치 않다보니 꽤나 귀찮았다.
lenkey라는 전에 눌렀던 키와 새로 누를 키와의 거리를 계산하는 함수를 만든다.
각 키가 오른손으로 누를지 왼손으로 누를지 판단한다음 lenkey를 통해 거리를 계산한다. 그 거리를
time에 추가시켜준다 디폴트로 1의 시간이 걸리므로 거리와 상관없이 1도 +...
꽤나 간단한 문제이다..
'알고리즘 > 구현' 카테고리의 다른 글
| [프로그래머스][js] 주차 요금 계산 (0) | 2024.07.06 |
|---|---|
| [백준][python] 1021 회전하는 큐 (0) | 2022.03.10 |
| [백준][python] 1745 방 번호 (0) | 2022.02.19 |
| [백준][python] 1316 그룹 단어 체커 (0) | 2022.02.19 |
| [백준][python] 4673 셀프 넘버 (0) | 2022.02.17 |