가장 큰 숫자가 두 번째로 큰 숫자의 두 배 초과인지 묻는 문제.
오름차순으로 정렬한 뒤, 맨 뒤의 두 숫자를 비교했다.
class Solution {
solve(nums) {
nums.sort((a, b) => a - b);
if (nums[nums.length - 1] > nums[nums.length - 2] * 2) return true;
return false;
}
}
소수 구하기. 현재 수의 제곱근만큼만 찾아보아도 된다.
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;
}
}
겹치는 단어가 있는지 찾는 문제. 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;
}
}
중복된 문자를 줄여서 하나의 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("");
}
}
하나씩 자르고 붙이면서 시도해보았는데 시간초과가 났다. 그래서 다른 사람의 코드를 보고 배웠다.
이럴 때는 첫 번째 단어 두 개를 붙여서 그 안에 두번째 단어가 있는지 찾는 방법이 있다는 걸 알았다.
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)
}
}