Skip to content

Commit f60c8eb

Browse files
committed
Merge branch 'main' into ohchaeyeon
2 parents 4e37e37 + 619ff7c commit f60c8eb

29 files changed

+692
-0
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
function solution(s) {
2+
return s
3+
.split('')
4+
.sort()
5+
.filter((char, idx, arr) =>
6+
char !== arr[idx-1] && char !== arr[idx+1]
7+
)
8+
.join('');
9+
}
10+
// 시간 복잡도 o(n log n)
11+
// 공간 복잡도 o(n)
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {boolean}
4+
*/
5+
var containsDuplicate = function (nums) {
6+
const uniqueNums = [...new Set(nums)];
7+
return uniqueNums.length != nums.length;
8+
};
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number}
4+
*/
5+
var longestConsecutive = function (nums) {
6+
const numSet = new Set(nums);
7+
let longestStreak = 0;
8+
for (const num of numSet) {
9+
if (!numSet.has(num - 1)) {
10+
let currentNum = num;
11+
let currentStreak = 1;
12+
while (numSet.has(currentNum + 1)) {
13+
currentNum += 1;
14+
currentStreak += 1;
15+
}
16+
longestStreak = Math.max(longestStreak, currentStreak);
17+
}
18+
}
19+
return longestStreak;
20+
};
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
function solution(n) {
2+
let primeFactors = new Set();
3+
let num = n;
4+
5+
while(num % 2 === 0) {
6+
primeFactors.add(2);
7+
num = num / 2;
8+
}
9+
for(let i = 3; i <= num; i += 2) {
10+
while(num % i === 0) {
11+
primeFactors.add(i);
12+
num = num / i;
13+
}
14+
}
15+
if(num > 2) {
16+
primeFactors.add(num);
17+
}
18+
19+
return [...primeFactors].sort((a, b) => a - b);
20+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
function solution(arr, k) {
2+
var answer = [...new Set(arr)];
3+
return [...answer.slice(0, k), ...Array(Math.max(0, k - answer.length)).fill(-1)];
4+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
function solution(my_string) {
2+
var answer = [...new Set(my_string)].join('');
3+
return answer;
4+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/**
2+
* @param {string} s
3+
* @return {string[]}
4+
*/
5+
function findRepeatedDnaSequences(s) {
6+
const see = new Set();
7+
const seen = new Set();
8+
9+
for (let i = 0; i <= s.length - 10; i++) {
10+
const sequence = s.slice(i, i + 10);
11+
if (see.has(sequence)) {
12+
seen.add(sequence);
13+
}
14+
see.add(sequence);
15+
}
16+
17+
return [...seen];
18+
}

JooKangSan/[week6]Set/Set.md

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
## 1. Set(집합)
2+
- 중복을 허용하지 않는 값들의 모음을 표현하는 자료구조,
3+
- 수학의 집합 개념을 구현한 자료구조
4+
5+
## 2. Set 구현
6+
7+
### 2.1 기본 생성
8+
```javascript
9+
// Set 생성
10+
const set = new Set();
11+
const setFromArray = new Set([1, 2, 3]);
12+
13+
// 값 추가/삭제
14+
set.add(4); // 값 추가
15+
set.delete(4); // 값 삭제
16+
set.clear(); // 모든 값 삭제
17+
18+
// 값 확인
19+
set.has(4); // 값 존재 여부
20+
set.size; // Set 크기
21+
```
22+
23+
### 2.2 기본 연산
24+
```javascript
25+
class CustomSet {
26+
constructor() {
27+
this.items = {};
28+
}
29+
30+
// 원소 추가
31+
add(element) {
32+
if (!this.has(element)) {
33+
this.items[element] = element;
34+
return true;
35+
}
36+
return false;
37+
}
38+
39+
// 원소 삭제
40+
delete(element) {
41+
if (this.has(element)) {
42+
delete this.items[element];
43+
return true;
44+
}
45+
return false;
46+
}
47+
48+
// 원소 확인
49+
has(element) {
50+
return element in this.items;
51+
}
52+
53+
// 모든 원소 반환
54+
values() {
55+
return Object.values(this.items);
56+
}
57+
}
58+
```
59+
60+
## 3. Set 연산 메서드
61+
62+
### 3.1 합집합(Union)
63+
```javascript
64+
function union(setA, setB) {
65+
const unionSet = new Set(setA);
66+
for (const element of setB) {
67+
unionSet.add(element);
68+
}
69+
return unionSet;
70+
}
71+
```
72+
73+
### 3.2 교집합(Intersection)
74+
```javascript
75+
function intersection(setA, setB) {
76+
const intersectionSet = new Set();
77+
for (const element of setA) {
78+
if (setB.has(element)) {
79+
intersectionSet.add(element);
80+
}
81+
}
82+
return intersectionSet;
83+
}
84+
```
85+
86+
### 3.3 차집합(Difference)
87+
```javascript
88+
function difference(setA, setB) {
89+
const differenceSet = new Set(setA);
90+
for (const element of setB) {
91+
differenceSet.delete(element);
92+
}
93+
return differenceSet;
94+
}
95+
```
96+
97+
### 3.4 부분집합(Subset) 확인
98+
```javascript
99+
function isSubset(setA, setB) {
100+
for (const element of setA) {
101+
if (!setB.has(element)) {
102+
return false;
103+
}
104+
}
105+
return true;
106+
}
107+
```
108+
109+
## 4. Set 활용
110+
111+
### 4.1 배열 중복 제거
112+
```javascript
113+
function removeDuplicates(array) {
114+
return [...new Set(array)];
115+
}
116+
117+
// 예시
118+
const array = [1, 2, 2, 3, 3, 4];
119+
console.log(removeDuplicates(array)); // [1, 2, 3, 4]
120+
```
121+
122+
### 4.2 문자열 중복 문자 제거
123+
```javascript
124+
function removeDuplicateChars(str) {
125+
return [...new Set(str)].join('');
126+
}
127+
128+
// 예시
129+
console.log(removeDuplicateChars('hello')); // 'helo'
130+
```
131+
132+
## 5. 성능 고려사항
133+
134+
### 5.1 시간 복잡도
135+
- 추가(add): O(1)
136+
- 삭제(delete): O(1)
137+
- 검색(has): O(1)
138+
- 크기 확인(size): O(1)
139+
140+
### 5.2 공간 복잡도
141+
- O(n), n은 저장된 원소의 수
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
var containsDuplicate = function (nums) {
2+
const numSet = new Set(nums);
3+
return numSet.size !== nums.length;
4+
};
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
function solution(arr, k) {
2+
const uniqueSet = new Set();
3+
const result = [];
4+
5+
for (const num of arr) {
6+
if (!uniqueSet.has(num)) {
7+
uniqueSet.add(num);
8+
result.push(num);
9+
}
10+
if (result.length === k) break;
11+
}
12+
13+
while (result.length < k) {
14+
result.push(-1);
15+
}
16+
17+
return result;
18+
}

0 commit comments

Comments
 (0)