왼쪽에서 오른쪽으로, 위에서 아래로 탐색하면서 word가 존재하는지 찾는 문제.
word의 첫 문자를 찾았을 때 그 위치부터 왼->오, 위->아래 로 탐색을 진행했다.
class Solution {
solve(board, word) {
if (!board || !word) return false;
for (let i = 0; i < board.length; i++) {
for (let j = 0; j < board[0].length; j++) {
if (board[i][j] === word[0]) {
if (word.length === 1) return true;
if (this.searchHo(i, j, board, word) || this.searchVer(i, j, board, word)) return true;
}
}
}
return false;
}
searchHo(i, j, board, word) {
let idx = 1;
let k = j + 1;
while (k < board[0].length && idx < word.length) {
if (board[i][k] !== word[idx]) break;
if (idx === word.length - 1) return true;
idx++;
k++;
}
}
searchVer(i, j, board, word) {
let idx = 1;
let k = i + 1;
while (k < board.length && idx < word.length) {
if (board[k][j] !== word[idx]) break;
if (idx === word.length - 1) return true;
idx++;
k++;
}
}
}
연결리스트의 길이를 구하는 문제.
while 반복을 사용하여 노드의 다음을 타고 가면서 개수를 셌다.
/**
* class LLNode {
* constructor(val, next=null) {
* this.val = val
* this.next = next
* }
* }
*/
class Solution {
solve(node) {
let length = 0;
let curNode = node;
while (curNode !== null) {
length++;
curNode = curNode.next;
}
return length;
}
}
k개의 요소를 뒤로 이동시키는 문제.
k = 3 => [1,2,3,4,5,6] -> [4,5,6,1,2,3]
class Solution {
solve(nums, k) {
if (nums.length == k) return nums;
let newNums = nums.slice(k);
for (let i = 0; i < k; i++)
newNums.push(nums[i]);
return newNums;
}
}
k부터 끝까지 배열을 잘라서 그 뒤에 0~k-1까지 배열을 잘라서 붙였다.
class Solution {
solve(nums, k) {
if (nums.length == k) return nums;
return nums.slice(k).concat(nums.slice(0, k))
}
}
n번째 피보나치를 구하는 문제.
피보나치 값들을 배열에 저장하여 현재 값을 구할 때, 이전의 두 수를 더해서 구한 뒤 배열에 넣었다.
인덱스가 0부터 시작하므로 n-1 위치의 값을 반환했다.
class Solution {
solve(n) {
if (n === 0 || n === 1) return 1;
const fibo = [1, 1];
for (let i = 2; i <= n; i++) {
fibo.push(fibo[i - 2] + fibo[i - 1]);
}
return fibo[n - 1];
}
}
최저점에서 구입하여 최고점에서 팔 때 가장 큰 수익을 반환하는 문제.
Two Pointer 사용.
class Solution {
solve(prices) {
if (prices.length === 0 || prices.length === 1) return 0;
let gap = 0;
let min = 0, max = 0;
while (min < prices.length && max < prices.length && min <= max) {
if (prices[min] < prices[max])
gap = Math.max(gap, prices[max] - prices[min]);
else min = max;
max++;
}
return gap;
}
}