Skip to content

Commit 5ac3e9a

Browse files
authored
Merge pull request #682 from yeeZinu/main
[호돌이] Week 1
2 parents 2517417 + 243f35d commit 5ac3e9a

File tree

6 files changed

+171
-0
lines changed

6 files changed

+171
-0
lines changed

contains-duplicate/yeeZinu.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {boolean}
4+
5+
nums 배열내의 아무 정수나 2개 이상 중복되면 true를 반복하는 함수.
6+
7+
시간 복잡도: O(n)
8+
*/
9+
var containsDuplicate = function (nums) {
10+
return nums.length !== new Set(nums).size
11+
}
12+
13+
console.log(containsDuplicate([1, 2, 3, 1])); // true
14+
// console.log(containsDuplicate([1, 2, 3, 4])); // false
15+
// console.log(containsDuplicate([1, 1, 1, 3, 3, 4, 3, 2, 4, 2])); // true

house-robber/yeeZinu.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
var rob = function (nums) {
2+
const n = nums.length;
3+
4+
// 길이가 1이라면
5+
if (n === 1) {
6+
return nums[0];
7+
}
8+
9+
// nums의 길이만큼 0으로 초기화된 배열
10+
const dp = Array(n).fill(0);
11+
12+
// 0번은 nums[0]
13+
dp[0] = nums[0];
14+
// 1번은 0과 1중 큰것을 선택
15+
dp[1] = Math.max(nums[0], nums[1]);
16+
17+
// i-1 과 i + i-2 의 합중 더 큰것을 선택하면됨
18+
for (let i = 2; i < n; i++) {
19+
dp[i] = Math.max(dp[i - 1], nums[i] + dp[i - 2]);
20+
}
21+
// i가 n - 1까지 반복함
22+
return dp[n - 1];
23+
};
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number}
4+
*/
5+
var longestConsecutive = function (nums) {
6+
// set으로 중복된 element 제거
7+
const numSet = new Set(nums);
8+
// 최대 연속 길이 변수
9+
let maxLength = 0;
10+
11+
// 최대 연속 길이 찾기
12+
for (let num of numSet) {
13+
// 만약 현재 수 -1이 없다면?
14+
if (!numSet.has(num - 1)) {
15+
let currentNum = num; //현재값이 시작
16+
let currentLength = 1; //최대 길이 1로 초기화
17+
18+
// 현재값 +1이 있을 때 까지 반복
19+
while (numSet.has(currentNum + 1)) {
20+
currentNum++;
21+
currentLength++;
22+
}
23+
24+
// 최대길이 값과 현재 길이값중 더 높은것이 최대길이값
25+
maxLength = Math.max(maxLength, currentLength);
26+
}
27+
}
28+
return maxLength;
29+
};

top-k-frequent-elements/yeeZinu.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} k
4+
* @return {number[]}
5+
*
6+
* nums 배열 내 최빈도 숫자 k개 출력
7+
*
8+
*/
9+
var topKFrequent = function (nums, k) {
10+
// 빈도 체크할 객체
11+
let frequent = {};
12+
13+
for (let i = 0; i < nums.length; i++) {
14+
// 숫자 중복될때마다 +1
15+
if (frequent[nums[i]] > 0) {
16+
frequent[nums[i]]++;
17+
}
18+
// 없으면 1로 초기화
19+
else {
20+
frequent[nums[i]] = 1;
21+
}
22+
}
23+
24+
// 정렬을 위해 entries를 사용해 배열로 변환
25+
const frequentEntries = Object.entries(frequent);
26+
frequentEntries.sort((a, b) => b[1] - a[1]); // 내림차순 정렬
27+
28+
// k갯수만큼 배열 자르기 및 배열 내부 값 number로 변경
29+
const topK = frequentEntries.slice(0, k).map((i) => Number(i[0]));
30+
return topK;
31+
};

two-sum/yeeZinu.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} target
4+
* @return {number[]}
5+
*/
6+
7+
/*
8+
두 수 더하기
9+
nums: 숫자 배열
10+
target: 목표 숫자
11+
12+
target 숫자에 맞게 nums 배열중 2개를 더함.
13+
return은 더한 두 수의 index
14+
- for i in nums -> target - i 값이 배열내에 있는지 찾기
15+
*/
16+
var twoSum = function (nums, target) {
17+
let indexArray = []; // 답을 저장할 배열
18+
for (let i = 0; i < nums.length; i++) {
19+
let tNum = nums.lastIndexOf(target - nums[i]); // 배열내에 target - nums[i] 찾기
20+
if (i === tNum) { // 같은 수 사용 방지
21+
22+
}
23+
else if (tNum > 0 && indexArray.lastIndexOf(i) === -1) { // 배열내에 원하는 값이 있다면
24+
indexArray.push(i);
25+
indexArray.push(tNum);
26+
break;
27+
}
28+
}
29+
return indexArray;
30+
};

valid-parentheses/yeeZinu.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/**
2+
* @param {string} s
3+
* @return {boolean}
4+
5+
괄호 유효성 검사(
6+
어느 괄호로 열어도 상관은 없지만 열었으면 닫아야지 true 안닫으면 false
7+
({)} -> 이런식으로 중간에 섞여서 닫혀있지 않다는 전제의 문제
8+
*/
9+
var isValid = function (s) {
10+
if (s.length % 2 === 1) {
11+
return false
12+
}
13+
14+
// 괄호들이 들어갈 스택배열
15+
const stack = [];
16+
17+
// 괄호 짝 객체
18+
const pair = {
19+
"(": ")",
20+
"{": "}",
21+
"[": "]",
22+
}
23+
24+
for (let i = 0; i < s.length; i++) {
25+
// 열린괄호면 스택추가
26+
if (s[i] in pair) {
27+
stack.push(s[i]);
28+
}
29+
// 닫힌 괄호라면?
30+
else {
31+
// 스택배열의 마지막이 같은 종류의 괄호라면 제거
32+
if (pair[stack.at(-1)] === s[i]) {
33+
stack.pop();
34+
}
35+
// 아니면 false
36+
else {
37+
return false
38+
}
39+
}
40+
}
41+
// 스택배열이 비었으면 true
42+
return stack.length === 0;
43+
};

0 commit comments

Comments
 (0)