Udemy - Javascript
일반적인 문제풀이 패턴
빈도수 세기 패턴
- 다중의 입력값들을 비교할 때 유용
- 배열을 이용하는 것이 아닌 / 주어진 입력값을 객체 (
{}) 에 넣고, 문제를 해결하는 것이다
function anagram(word1, word2) {
if (word1.length !== word2.length) {
return false
} else if (word1.length === 0 & word2.length === 0) {
return true
}
let anagramObject1 = {}
let anagramObject2 = {}
for (let word = 0; word < word1.length ; word++) {
if (word1[word] in anagramObject1) {
anagramObject1[word1[word]] += 1
} else {
anagramObject1[word1[word]] = 1
}
}
for (let word = 0; word < word2.length ; word++) {
if (word2[word] in anagramObject2) {
anagramObject2[word2[word]] += 1
} else {
anagramObject2[word2[word]] = 1
}
}
for (let word in anagramObject1) {
if (! (word in anagramObject2)) {
return false
}
if (anagramObject2[word] !== anagramObject1[word]) {
return false
}
return true
}
}
anagram('', '')
- 첫 두개의 for문은 객체 안에 각 단어의 알파벳과, 그 알파벳의 갯수를 넣는 것이다
- 그리고 마지막 for문은 두 개의 객체들을 비교하는 것이다
- 만약 첫 번째 객체의 단어들을 순회하며, 그 단어가 두 번째 객체에 었으면
false를 출력한다 - 같은 단어가 있지만, 단어의 갯수가 다르면
false를 출력한다
- 만약 첫 번째 객체의 단어들을 순회하며, 그 단어가 두 번째 객체에 었으면
다중 포인터 패턴
포인트를 리스트 안에 넣고, 만약에 그 두 포인트에 대한 값이 원하는 값이 아니면, 포인트 들을 바꾼다
리스트 안에 숫자들이 있다. 그 안에 중복되지 않은 숫자의 개수를 구하는 것.
예시) [1, 1, 2, 2, 2] 의 답은 2 다 (1과 2 밖에 없음)
function countUniqueValues(array) {
let i = 0
let j = i + 1
let result = 1
if (array.length !== 0) {
while (j < array.length) {
if (array[i] === array[j]) {
j += 1 ;
} else {
i = j ;
j = i + 1 ;
result += 1 ;
}
}
return result
} else {
result = 0
return result
}
}
i와j는 두 개의 포인터다i의 값과j의 값이 같으면j를 한 단계 뒤로 옮긴다i와j의 값이 다르면,result에 1을 더해주고,i를j위치로 옮기는 동시,j를i뒤에 옮겨 놓는다
슬라이딩 윈도우
문자열이나 배열의 문제를 해결할때 도움이 된다
해당 데이터의 하위 집합을 찾는데 유용한다
예시) 문자열이 주어지면, 문자열 안에 알파벳이 중복되지 않고 쓰여지나?
- "hellothere"
- hel 까지 앞에는 3개 (l 뒤에 또 l 이 있어 멈춘다)
- 그 뒤에 lother 5개 (다른 겹치는 알파벳이 없다)
function maxSubArraySum(array, num) {
let maxSum = 0
let tempSum = 0
for (let n = 0 ; n < num ; n ++) {
tempSum += array[n]
}
for (let i = num ; i < array.length ; i ++) {
tempSum = tempSum - array[i - num] + array[i] ;
if (tempSum > maxSum) {
maxSum = tempSum
}
}
return maxSum;
}
maxSubArraySum([2,6,9,2,1,8,5,6,3], 3)
- 처음 for문에서는 배열 제일 앞부터, 더해야 하는 숫자들의 값만 먼저 구해서 tempSum에 저장을 한다
- 그 이후, for문을 배열 끝가지 돈다.
- 여기서
i, 인덱스는 배열 끝까지 하나씩 증가를 한다 - 증가할때마다,
i번째의 숫자를 tempSum에 더해주고, 반대로i - num번째는 빼준다
- 여기서
- 거기서 구한 tempSum 이 maxSum보다 크면, maxSum을 바꿔준다
분할과 정복 패턴
데이터를 더 적은 덩어리로 줄이는 것이다
줄이면서 시간 복잡도를 줄이는 것
예시) binary search / binary tree
'Skill Stacks > Javascript' 카테고리의 다른 글
| 5.2_Javascript - Multiple Pointers 문제풀이 (1) | 2023.01.07 |
|---|---|
| 5.1_Javascript - Frequency Counter 문제풀이 (0) | 2023.01.07 |
| 3_Javascript - 문제 해결 접근법 (0) | 2023.01.05 |
| 2_Javascript - 객체와 배열의 빅오 (0) | 2023.01.05 |
| 1_Javascript - Big O Notation (5) | 2023.01.04 |