본문 바로가기
알고리즘/구현

[백준][js] 20436_ZOAC 3

by 성현0409 2024. 6. 23.

 

문제

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도 +...

 

꽤나 간단한 문제이다..