모각코/2024
2024 동계 모각코 3회차
delee2008
2025. 1. 20. 22:09
2025/01/20
3회차 목표
1) Udemy 강의:
- 섹션 10: 검색 알고리즘
2) 실습:
- 강의의 문제 구현
- 프로그래머스 문제
TIL
검색 알고리즘(Search Algorithm): 주어진 데이터 집합에서 특정한 값이나 조건을 만족하는 데이터를 찾기 위한 절차 또는 방법
검색 알고리즘의 분류
1. 선형 검색(Linear Search)
- 배열 또는 리스트의 첫 번째 요소부터 마지막 요소까지 순차적으로 탐색하며 원하는 값을 찾는 방법
- 시간 복잡도: O(n) (n은 데이터의 크기)
- 특징: 정렬되지 않은 데이터에도 사용할 수 있지만, 데이터 크기가 커질수록 비효율적.선형 검색(Linear Search)
- 예시 코드:
function linearSearch(arr, target) {
for (let i = 0; i < arr.length; i++) {
if (arr[i] === target) {
return i; // 인덱스 반환
}
} return -1; // 찾지 못하면 -1 반환
}
console.log(linearSearch([1, 2, 3, 4, 5], 3)); // 2
2. 이진 검색(Binary Search)
- 데이터가 정렬되어 있는 경우, 가운데 값을 기준으로 원하는 값이 있는지 확인하며 검색 범위를 절반으로 줄여나가는 방식.
- 시간 복잡도: O(log n) (n은 데이터의 크기)
- 특징: 정렬된 데이터에만 사용할 수 있으며, 매우 빠르고 효율적.이진 검색(Binary Search)
- 예시 코드:
function binarySearch(arr, target) {
let left = 0;
let right = arr.length - 1;
while (left <= right) {
const mid = Math.floor((left + right) / 2);
if (arr[mid] === target) {
return mid;
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
console.log(binarySearch([1, 2, 3, 4, 5], 3)); // 2
1. Array.prototype.indexOf()
- 배열에서 특정 값을 찾아 인덱스를 반환. 값이 없으면 1을 반환
- 선형 검색(Linear Search)에 해당.
예제:
const arr = [10, 20, 30, 40, 50];
console.log(arr.indexOf(30)); // 결과: 2
console.log(arr.indexOf(60)); // 결과: -1
2. Array.prototype.includes()
- 배열이 특정 값을 포함하고 있는지 여부를 반. (불리언 값)
예제:
const arr = [10, 20, 30, 40, 50];
console.log(arr.includes(30)); // 결과: true
console.log(arr.includes(60)); // 결과: false
3. Array.prototype.find()
- 배열에서 조건을 만족하는 첫 번째 요소를 반환. 조건에 맞는 요소가 없으면 undefined를 반환.
예제:
const users = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 3, name: 'Charlie' }
];
console.log(users.find(user => user.name === 'Bob'));
// 결과: { id: 2, name: 'Bob' }
4. Array.prototype.findIndex()
- 배열에서 조건을 만족하는 첫 번째 요소의 인덱스를 반환. 조건에 맞는 요소가 없으면 1을 반환.
예제:
const nums = [5, 10, 15, 20];
console.log(nums.findIndex(num => num > 10)); // 결과: 2
console.log(nums.findIndex(num => num > 50)); // 결과: -1
5. Array.prototype.filter()
- 조건을 만족하는 모든 요소를 새로운 배열로 반환. 조건에 맞는 요소가 없으면 빈 배열을 반환.
예제:
const nums = [5, 10, 15, 20, 25];
console.log(nums.filter(num => num > 10)); // 결과: [15, 20, 25]
console.log(nums.filter(num => num > 50)); // 결과: []
6. Array.prototype.some()
- 배열의 요소 중 하나라도 조건을 만족하면 true를 반환. 모든 요소가 조건에 맞지 않으면 false를 반환.
예제:
const nums = [5, 10, 15];
console.log(nums.some(num => num > 10)); // 결과: true
console.log(nums.some(num => num > 20)); // 결과: false
7. Array.prototype.every()
- 배열의 모든 요소가 조건을 만족하면 true를 반환. 하나라도 조건을 만족하지 않으면 false를 반환.
예제:
const nums = [5, 10, 15];
console.log(nums.every(num => num > 0)); // 결과: true
console.log(nums.every(num => num > 10)); // 결과: false
8. String.prototype.includes()
- 문자열에서 특정 서브 문자열을 포함하고 있는지 여부를 확인.
예제:
const str = "Hello, world!";
console.log(str.includes("world")); // 결과: true
console.log(str.includes("JavaScript")); // 결과: false
9. String.prototype.indexOf()
- 문자열에서 특정 서브 문자열의 첫 번째 위치를 반환. 찾지 못하면 1을 반환.
예제:
const str = "Hello, world!";
console.log(str.indexOf("world")); // 결과: 7
console.log(str.indexOf("JavaScript")); // 결과: -1
10. Set.prototype.has()
- Set 객체에서 특정 값을 포함하고 있는지 확인.
예제:
const set = new Set([1, 2, 3, 4, 5]);
console.log(set.has(3)); // 결과: true
console.log(set.has(6)); // 결과: false
11. Map.prototype.has()
- Map 객체에서 특정 키가 존재하는지 확인.
예제:
const map = new Map([
['key1', 'value1'],
['key2', 'value2']
]);
console.log(map.has('key1')); // 결과: true
console.log(map.has('key3')); // 결과: false
12. Object.keys() / Object.values() / Object.entries()
- 객체의 키, 값, 또는 키-값 쌍을 배열로 반환하여 검색.
예제:
const obj = { a: 1, b: 2, c: 3 };
console.log(Object.keys(obj)); // 결과: ['a', 'b', 'c']
console.log(Object.values(obj)); // 결과: [1, 2, 3]
console.log(Object.entries(obj)); // 결과: [['a', 1], ['b', 2], ['c', 3]]
느낀 점
알고리즘 재수강 해야지..