배운점
자바스크립트에서 ["q", "w", "e", "r", "t", "y", "u", "i", "o", "p"] 의 배열에서 w 문자가 몇번째 인덱스인지 알려면 어떻게 해야할까요?
더보기
let keyboard = [
["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"],
];
y = keyboard[0].indexOf(key);
console.log(y)
indexOf 메소드를 사용하면 됩니다.
자바스크립트에서 여러개의 변수를 리턴하고 싶다면 어떻게 해야할까요?
더보기
const returnXY = (key) => {
let x, y;
for (let i = 0; i < 3; i++) {
y = keyboard[i].indexOf(key);
if (y !== -1) {
x = i;
break;
}
}
return [x, y]; // 배열로 리턴
};
let [a, b] = returnXY("q"); // 리턴 값 받을 때
주석에 주목해주세요!
만약 다음과 같이 key_x , key_y 값을 미리 선언을 해두었는데 어떤 함수의 리턴이 복수변수라면 어떻게 받아야할까요?
let key_x, key_y;
더보기
let key_x, key_y;
[key_x, key_y] = returnXY("q");
그리고 어차피 indexOf 를 사용할때 배열과 string 에 모두 사용할 수 있기때문에 1번 처럼 키보드 배열을 만드는 것 보다 2번 처럼 만드는 것이 더 수월하다.
let keyboard = [
["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"],
]; //1
let keyboard = ["qwertyuiop", "asdfghjkl", "zxcvbnm"]; //2
문제풀이
- 키의 좌표를 반환하는 함수를 만든다.
- 키를 입력해야할때마다 입력해야하는 키의 좌표와 현재 왼손 또는 오른손의 좌표를 리턴받는다.
- 택시거리를 계산하고 +1 (입력시 걸리는 시간) 까지 포함하여 더해준다.
- left 또는 right를 누른 키 값으로 갱신한다.
const fs = require("fs");
BOJkey = 1;
let input = fs
.readFileSync(BOJkey ? "./자바스크립트로/20436/input.txt" : "./dev/stdin")
.toString()
.trim()
.split("\n");
// console.log(input);
let keyboard = ["qwertyuiop", "asdfghjkl", "zxcvbnm"];
let ja = "qwertasdfgzxcv";
let key;
let [left, right] = input[0].split(" ");
const returnXY = (key) => {
let x, y;
for (let i = 0; i < 3; i++) {
y = keyboard[i].indexOf(key);
if (y !== -1) {
x = i;
break;
}
}
return [x, y];
};
let key_x, key_y;
let result = 0;
for (let i = 0; i < input[1].length; i++) {
key = input[1][i];
if (ja.includes(key)) {
[key_x, key_y] = returnXY(key);
[left_x, left_y] = returnXY(left);
result += Math.abs(key_x - left_x) + Math.abs(key_y - left_y) + 1;
left = key;
} else {
[key_x, key_y] = returnXY(key);
[right_x, right_y] = returnXY(right);
result += Math.abs(key_x - right_x) + Math.abs(key_y - right_y) + 1;
right = key;
}
}
console.log(result);
'공부기록 > 자바스크립트 코딩테스트' 카테고리의 다른 글
[코테강의/JS] 이진수 출력 (0) | 2022.07.06 |
---|---|
[코테강의/JS] 재귀함수와 스택프레임 (0) | 2022.07.06 |
자바스크립트 여러개의 값 반환하기 (0) | 2022.07.06 |
if문 중첩에 관한 고찰 (0) | 2022.07.06 |
[백준/JS] 2753 윤년 (0) | 2022.07.06 |