[binarysearch] 20, 24, 28, 29, 30 (Easy)

황은하·2021년 11월 24일
0

알고리즘

목록 보기
97/100
post-thumbnail

20. Largest Number By Two Times

가장 큰 숫자가 두 번째로 큰 숫자의 두 배 초과인지 묻는 문제.
오름차순으로 정렬한 뒤, 맨 뒤의 두 숫자를 비교했다.

class Solution {
    solve(nums) {
        nums.sort((a, b) => a - b);
        if (nums[nums.length - 1] > nums[nums.length - 2] * 2) return true;
        return false;
    }
}


24. Generate Primes

소수 구하기. 현재 수의 제곱근만큼만 찾아보아도 된다.

class Solution {
    solve(n) {
        const result = [];
        for (let i = 2; i <= n; i++) {
            let flag = false;
            for (let j = 2; j <= Math.sqrt(i); j++) {
                if (i % j !== 0) continue;
                flag = true;
                break;
            }
            if (flag) continue;
            result.push(i);
        }
        return result;
    }
}


28. A Unique String

겹치는 단어가 있는지 찾는 문제. set을 사용하여 한 문자씩 넣었고, set에 현재 단어가 있다면 중복이라는 뜻이니, false를 반환했다.

class Solution {
    solve(s) {
        const set = new Set();
        for (let i = 0; i < s.length; i++) {
            if (set.has(s[i])) return false;
            set.add(s[i]);
        }
        return true;
    }
}


29. Compress String

중복된 문자를 줄여서 하나의 string으로 줄이는 문제.
stack(배열)을 사용하여 가장 최근의 문자와 현재 문자가 같은지 비교했다.

class Solution {
    solve(s) {
        if (s.length === 1) return s;

        const word = [];
        word.push(s[0]);
        for (let i = 1; i < s.length; i++) {
            if (word[word.length - 1] === s[i]) continue;
            word.push(s[i]);
        }
        return word.join("");
    }
}


30. Rotation of Another String

하나씩 자르고 붙이면서 시도해보았는데 시간초과가 났다. 그래서 다른 사람의 코드를 보고 배웠다.
이럴 때는 첫 번째 단어 두 개를 붙여서 그 안에 두번째 단어가 있는지 찾는 방법이 있다는 걸 알았다.

class Solution {
    solve(s0, s1) {
        if (s0.length > 200000 || s1.length > 200000) return false;
        if (s0.length !== s1.length) return false;
        if (s0 === s1) return true;

        return s0.length === s1.length && (s0 + s0).includes(s1)
    }
}
profile
차근차근 하나씩

0개의 댓글