[binarysearch] 1, 5, 16, 18, 19 (Easy)

황은하·2021년 11월 24일
0

알고리즘

목록 보기
96/100
post-thumbnail

1. Sum of Two Numbers

class Solution {
    solve(nums, k) {
        const map = new Map();
        for (let i = 0; i < nums.length; i++) 
            map.set(k - nums[i], i);
        
        for (let i = 0; i < nums.length; i++) 
            if (map.has(nums[i]) && map.get(nums[i]) !== i)
                return true;
        
        return false;
    }
}


5. Palindromic Integer

Two pointer

class Solution {
    solve(num) {
        const numStr = num.toString();
        let left = 0;
        let right = numStr.length - 1;

        while (left < numStr.length && right >= 0 && left <= right) {
            if (numStr[left] != numStr[right]) return false;
            left++;
            right--;
        }

        return true;
    }
}


16. 3-6-9

369 게임

class Solution {
    solve(n) {
        const list = new Array(n);

        for (let i = 1; i <= n; i++) {
            if (i % 3 == 0) {
                list[i - 1] = "clap";
                continue;
            }
          
            const curNum = i.toString();
            let flag = false;
            for (let j = 0; j < curNum.length; j++) {
                if (curNum[j] === "3" || curNum[j] === "6" || curNum[j] === "9") {
                    list[i - 1] = "clap";
                    flag = true;
                    break;
                }
            }            
            if (flag) continue;
            list[i - 1] = i.toString();
        }
        return list;
    }
}


18. Run-Length Encoding

연속되는 중복 문자의 개수를 세서 문자의 개수와 문자를 붙여 줄여서 표현하는 문제다.

  • 첫 번째 방법
class Solution {
    solve(s) {
        const result = [];

        let left = 0, right = 0, count = 0;
        while (left <= right && left < s.length && right < s.length) {
            if (left === right) {
                count = 1;
                right++;
            } else {
                if (s[left] === s[right]) {
                    count++;
                    right++;
                } else {
                    result.push(count);
                    result.push(s[left]);
                    left = right;
                }
            }
            if (right === s.length) {
                result.push(count);
                result.push(s[right - 1]);
            }
        } 
        return result.join('');
    }
}
  • 두 번째 방법
    java에서는 배열의 값을 비교할 때, 배열의 범위를 벗어나는 값을 비교하면 오류가 발생했는데, js의 경우는 undefined으로 나타난다. 이는 오류가 아닌 값으로 받아들여서 오류가 발생하지 않는다. 자연스럽게 값이 다르다고 나오게 된다. 이를 이용하였다.
class Solution {
    solve(s) {
        const result = [];
        let count = 1;

        for (let i = 0; i < s.length; i++) {
            if (s[i] === s[i + 1]) {
                count++;
                continue;
            }
            result.push(count, s[i]);
            count = 1;
        }
        return result.join('');
    }
}


19. Strictly Increasing or Strictly Decresing

class Solution {
    solve(nums) {
        if (nums.length === 1) return true;
        if (nums[0] === nums[1]) return false;
        let up = nums[0] < nums[1] ? true : false;

        for (let i = 1; i < nums.length - 1; i++) {
            if (up && nums[i] >= nums[i + 1]) return false;
            if (!up && nums[i] <= nums[i + 1]) return false;
        }
        return true;
    }
}
profile
차근차근 하나씩

0개의 댓글