Skip to content

Commit da886dd

Browse files
authored
Merge pull request #729 from yeeZinu/main
[호돌이] Week2
2 parents 9b43181 + 06a920f commit da886dd

File tree

3 files changed

+152
-0
lines changed

3 files changed

+152
-0
lines changed

3sum/yeeZinu.js

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number[][]}
4+
*
5+
* 문제: 세 수를 더해서 0을 만들어야함.
6+
*
7+
* 주의사항: 인덱스 상관없어 세 수의 조합이 같으면 안됨.
8+
* 핵심: 배열을 오름차순으로 정렬해서
9+
* 양 끝에 각 인덱스넣고 사이에 있는인덱스로 계속 더하면서
10+
* 좌우 인덱스를 0에 가깝게 +- 하면된다~
11+
*
12+
*/
13+
var threeSum = function (nums) {
14+
// 결과를 저장할 배열
15+
let result = [];
16+
// 주어진 수를 오름차순으로 정렬
17+
nums.sort((a, b) => a - b);
18+
19+
for (let i = 0; i < nums.length; i++) {
20+
// nums[i] > 0보다 크다면? 반복 끝
21+
if (nums[i] > 0) {
22+
break;
23+
}
24+
25+
let j = i + 1; // 중간에서 바뀔 인덱스
26+
let k = nums.length - 1; // 맨 마지막에서 부터 움직일 인덱스
27+
28+
while (j < k) {
29+
let sum = nums[i] + nums[j] + nums[k];
30+
31+
// 총합이 양수라면 k인덱스 한칸뒤로 ㄱ
32+
if (sum > 0) {
33+
k--;
34+
}
35+
// 음수라면 j진행 ㄱ
36+
else if (sum < 0) {
37+
j++;
38+
}
39+
// 0이면 result배열에 추가, j진행
40+
else {
41+
result.push([nums[i], nums[j], nums[k]]);
42+
j++;
43+
44+
// j가 이전값과 같다면 무시하고 진행하기
45+
while (nums[j] === nums[j - 1] && j < k) {
46+
j++;
47+
}
48+
}
49+
}
50+
}
51+
52+
return result;
53+
54+
};

climbing-stairs/yeeZinu.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/**
2+
* @param {number} n
3+
* @return {number}
4+
*/
5+
var climbStairs = function (n) {
6+
// n+1 배열을 만들고 0으로 초기화
7+
const dp = new Array(n + 1).fill(0);
8+
9+
// 인덱스 0번과 1번은 1로 초기화
10+
dp[0] = 1;
11+
dp[1] = 1;
12+
13+
// 이전계단과 그 이전 계단의 합이 계단을 올라갈 수 있는 총합
14+
for (let i = 2; i <= n; i++) {
15+
dp[i] = dp[i - 1] + dp[i - 2];
16+
}
17+
18+
return dp[n];
19+
};
20+
21+
console.log(climbStairs(5));

valid-anagram/yeeZinu.js

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
/**
2+
* @param {string} s
3+
* @param {string} t
4+
* @return {boolean}
5+
*
6+
*/
7+
8+
var isAnagram = function (s, t) {
9+
// 두 문자열의 길이가 같지않다면 false
10+
if (s.length !== t.length) {
11+
return false;
12+
};
13+
14+
// Map을 사용해서 데이터 최신화
15+
let count = new Map();
16+
17+
// set으로 해당 문자를 key, 갯수를 value로 카운트
18+
for (let char of s) {
19+
count.set(char, (count.get(char) || 0) + 1)
20+
}
21+
22+
for (let char of t) {
23+
// 새로운 문자가 map에 없거나, 이미 카운트가 0이라면 false
24+
if (!count.has(char) || count.get(char) === 0) {
25+
return false;
26+
}
27+
// 문자 카운트 -1
28+
count.set(char, (count.get(char) - 1))
29+
}
30+
31+
return true;
32+
}
33+
34+
/*
35+
* 문제: 두 문자열의 구성요소 비교
36+
*
37+
* 생각: 각 문자열에 상대 문자열의 스펠링이 있는지 확인하고 splice로 제거
38+
* 결과: 타임리밋
39+
var isAnagram = function (s, t) {
40+
if (s.length !== t.length) {
41+
return false;
42+
};
43+
44+
let sArr = [];
45+
let tArr = [];
46+
let finder = 0;
47+
48+
for (let j = 0; j < s.length; j++) {
49+
sArr.push(s[j]);
50+
tArr.push(t[j]);
51+
}
52+
53+
// 반복문을 돌며 s와 t를 비교
54+
for (let i = 0; i < s.length; i++) {
55+
//s[i]번 째가 t안에 있다면?
56+
if (tArr.indexOf(sArr[0]) !== -1) {
57+
// 찾은 인덱스를 저장해 줌 -> sArr 에서 splice먼저해버리면 배열이 달라져서 못찾음;;
58+
finder = tArr.indexOf(sArr[0]);
59+
//s[i]를 스플라이스로 빼고
60+
sArr.splice(0, 1);
61+
//t의 인덱스번호를 슬라이스로 뺌
62+
tArr.splice(finder, 1);
63+
}
64+
console.log(i);
65+
console.log(sArr);
66+
console.log(tArr);
67+
}
68+
69+
// s와 t의 길이가 0이면 true 아니면 fales
70+
if (sArr.length === 0 && tArr.length === 0) {
71+
return true;
72+
}
73+
else return false
74+
75+
};
76+
77+
*/

0 commit comments

Comments
 (0)