Skip to content

[mike2ox] Week1 #653

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Dec 12, 2024
16 changes: 16 additions & 0 deletions contains-duplicate/mike2ox.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
/**
* Source: https://leetcode.com/problems/contains-duplicate/
* 풀이방법: Set을 이용하여 중복된 값이 있는지 확인
* 시간복잡도: O(n)
* 공간복잡도: O(n)
*
* 생각나는 풀이방법
* 1. 단순하게 sorted를 이용하여 이전값과 비교하여 중복된 값이 있는지 확인
* 2. 정렬하지 않고 nums의 길이만큼의 배열을 만들어서 중복된 값이 있는지 저장하면서 확인
*/
function containsDuplicate(nums: number[]): boolean {
// 중복된 값이 없는 자료구조 Set 활용
const set = new Set<number>(nums);
// Set의 size와 nums의 length를 비교하여 중복된 값이 있는지 확인
return set.size !== nums.length;
}
25 changes: 25 additions & 0 deletions house-robber/mike2ox.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/**
* Source: https://leetcode.com/problems/house-robber/
* 풀이방법: DP를 이용하여 집을 털 때 최대값을 구함
* 시간복잡도: O(n)
* 공간복잡도: O(n)
*
* 생각나는 풀이방법
*/
function rob(nums: number[]): number {
if (nums.length === 0) return 0;
if (nums.length === 1) return nums[0];
if (nums.length === 2) return Math.max(nums[0], nums[1]);

let prev = nums[0];
let maxResult = Math.max(nums[0], nums[1]);
let current = 0;

// 남은 집을 순회하면서 최대값을 구함
for (let i = 2; i < nums.length; i++) {
current = Math.max(maxResult, prev + nums[i]);
prev = maxResult;
maxResult = current;
}
return maxResult;
}
32 changes: 32 additions & 0 deletions longest-consecutive-sequence/mike2ox.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/**
* Source: https://leetcode.com/problems/longest-consecutive-sequence/
* 풀이방법: 정렬 후 순회를 통해 연속된 값이 있는지 확인
* 시간복잡도: O(nlogn)
* 공간복잡도: O(1)
*
* 생각나는 풀이방법
*/

function longestConsecutive(nums: number[]): number {
if (nums.length === 0) return 0;
const sorted = nums.sort((a, b) => a - b);
let prev = sorted[0];
let result = 1;
let candiResult = 1;

for (let current of sorted) {
if (prev === current) continue;
if (current === prev + 1) {
candiResult += 1;
} else {
if (candiResult > result) {
result = candiResult;
}
candiResult = 1;
}
prev = current;
}

if (candiResult > result) result = candiResult;
return result;
}
22 changes: 22 additions & 0 deletions top-k-frequent-elements/mike2ox.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/**
* Source: https://leetcode.com/problems/top-k-frequent-elements/
* 풀이방법: 순회를 통해 빈도수를 저장, Object.entries를 통해 정렬하여 k개까지 반환
* 시간복잡도: O(nlogn)
* 공간복잡도: O(n)
*
* 생각나는 풀이방법
*/
function topKFrequent(nums: number[], k: number): number[] {
const KFrequentObject = new Object();
const result = new Array();
for (let num of nums) {
if (!Object.hasOwn(KFrequentObject, num)) KFrequentObject[num] = 0;
KFrequentObject[num]++;
}
// Object.entries를 통해 key, value를 배열로 반환 (포인트)
let sorted = Object.entries(KFrequentObject).sort((a, b) => b[1] - a[1]);
for (let node of sorted) {
result.push(parseInt(node[0]));
}
return result.slice(0, k);
}
29 changes: 29 additions & 0 deletions valid-palindrome/mike2ox.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/**
* Source: https://leetcode.com/problems/valid-palindrome/
* 풀이방법: 문자열을 조건에 맞게 정제한 후 reverse하여 비교
* 시간복잡도: O(n)
* 공간복잡도: O(n)
*
* 생각나는 풀이방법
* 1. 정규식을 이용하여 문자열을 정제한 후 reverse하여 비교 => 정규식 작성을 못해서 배제
* 2. 문자열을 순회하면서 조건에 맞는 문자만 배열에 저장한 후 reverse하여 비교
*/
function isPalindrome(s: string): boolean {
// 미리 길이가 2보다 작은 경우는 true로 반환(Palindrome 조건에 맞음)
if (s.length < 2) return true;
const formatted: string[] = [];

// 문자열을 순회하면서 조건에 맞는 문자만 소문자로 변환해서 배열에 저장
for (let c of s) {
if (
(c >= "a" && c <= "z") ||
(c >= "A" && c <= "Z") ||
(c >= "0" && c <= "9")
)
formatted.push(c.toLowerCase());
}
// formatted 배열을 reverse하여 JSON.stringify로 비교 (중요)
// ? toReverse()가 chrome console에서는 작동하는데 여기서는 왜 안되는지 모르겠음
const reversed = [...formatted].reverse();
return JSON.stringify(reversed) === JSON.stringify(formatted);
}
Loading