Skip to content

Commit e65b197

Browse files
authored
Merge branch 'DaleStudy:main' into main
2 parents 9157bdb + d3b9ca8 commit e65b197

File tree

227 files changed

+5833
-458
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

227 files changed

+5833
-458
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
function maxProfit(prices: number[]): number {
2+
let minPrice = Infinity;
3+
let maxProfit = 0;
4+
for (let i = 0; i < prices.length; i++) {
5+
if (prices[i] < minPrice) {
6+
minPrice = prices[i];
7+
}
8+
9+
if (prices[i] - minPrice > maxProfit) {
10+
maxProfit = prices[i] - minPrice;
11+
}
12+
}
13+
return maxProfit;
14+
}

contains-duplicate/HISEHOONAN.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
//
2+
// Contains_Duplicate.swift
3+
// Algorithm
4+
//
5+
// Created by 안세훈 on 3/31/25.
6+
//
7+
8+
import Foundation
9+
10+
class Solution {
11+
func containsDuplicate(_ nums: [Int]) -> Bool {
12+
return nums.count != Set(nums).count
13+
//Set : 중복된 값을 갖지 않음.
14+
//문제로 주어진 배열의 개수와 중복을 갖지않는 Set연산의 개수의 차이 비교
15+
//비교 후 다르다면 true 같다면 false
16+
}
17+
}

contains-duplicate/HoonDongKang.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* [Problem]: [217] Contains Duplicate
3+
* (https://leetcode.com/problems/contains-duplicate/description/)
4+
*/
5+
6+
function containsDuplicate(nums: number[]): boolean {
7+
// 시간복잡도: O(n^2)
8+
// 공간복잡도: O(1)
9+
const doubleLoopFunc = (nums: number[]) => {
10+
let isDuplicated = false;
11+
for (let i = 0; i < nums.length; i++) {
12+
for (let j = i + 1; j < nums.length; j++) {
13+
if (nums[i] === nums[j]) isDuplicated = true;
14+
}
15+
}
16+
return isDuplicated;
17+
};
18+
19+
// 시간복잡도: O(n)
20+
// 공간복잡도: O(n)
21+
const setFunc = (nums: number[]) => {
22+
const numsSet = new Set<number>(nums);
23+
24+
return nums.length !== numsSet.size;
25+
};
26+
27+
// 시간복잡도: O(n)
28+
// 공간복잡도: O(n)
29+
const mapFunc = (nums: number[]) => {
30+
const numsMap = new Map<number, boolean>();
31+
32+
for (const num of nums) {
33+
if (numsMap.get(num)) return true;
34+
numsMap.set(num, true);
35+
}
36+
37+
return false;
38+
};
39+
40+
return mapFunc(nums);
41+
}

contains-duplicate/JANGSEYEONG.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/*
2+
시간복잡도: O(n) - new Set(nums)에서 배열 요소 순회하며 Set 생성 O(n) + 길이 비교 O(1)
3+
- Set 자료구조는 중복된 값을 자동으로 제거
4+
*/
5+
6+
/**
7+
* @param {number[]} nums
8+
* @return {boolean}
9+
*/
10+
var containsDuplicate = function (nums) {
11+
// Set으로 만들었을 때, 기존 배열과 사이즈가 다르면 중복이 제거된거임
12+
const numsSet = new Set(nums);
13+
return nums.length !== numsSet.size;
14+
};

contains-duplicate/JiHyeonSu.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# 중복제거 후 길이 확인 문제
2+
# 시간복잡도 및 공간복잡도 O(n)
3+
class Solution:
4+
def containsDuplicate(self, nums: List[int]) -> bool:
5+
return len(nums) != len(set(nums))

contains-duplicate/JustHm.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class Solution {
2+
func containsDuplicate(_ nums: [Int]) -> Bool {
3+
nums.count != Set(nums).count
4+
}
5+
}

contains-duplicate/PDKhan.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public:
3+
bool containsDuplicate(vector<int>& nums) {
4+
unordered_map<int, int> map;
5+
6+
for(int i = 0; i < nums.size(); i++){
7+
map[nums[i]]++;
8+
9+
if(map[nums[i]] == 2)
10+
return true;
11+
}
12+
13+
return false;
14+
}
15+
};

contains-duplicate/Sung-Heon.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class Solution:
2+
def containsDuplicate(self, nums: List[int]) -> bool:
3+
temp = {}
4+
for i in nums:
5+
if temp.get(i):
6+
return True
7+
else:
8+
temp[i] = True
9+
return False

contains-duplicate/Tessa1217.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import java.util.HashSet;
2+
import java.util.Set;
3+
4+
class Solution {
5+
6+
/** 217. 중복된 수
7+
* 정수 배열 nums가 주어졌을 때 배열 요소 중 한 개 이상이 두 번 이상 중복되어
8+
* 나타는 경우 true를, 모든 배열의 요소가 고유한 경우 false를 반환
9+
*/
10+
public boolean containsDuplicate(int[] nums) {
11+
12+
Set<Integer> distincts = new HashSet<>();
13+
14+
for (int i = 0; i < nums.length; i++) {
15+
distincts.add(nums[i]);
16+
}
17+
18+
return distincts.size() != nums.length;
19+
}
20+
}
21+

contains-duplicate/Ujoonnee.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import java.util.HashSet;
2+
import java.util.Set;
3+
4+
class Solution {
5+
public boolean containsDuplicate(int[] nums) {
6+
Set<Integer> numberSet = new HashSet<>();
7+
for(int number : nums) {
8+
if(numberSet.contains(number)) {
9+
return true;
10+
}
11+
12+
numberSet.add(number);
13+
}
14+
return false;
15+
}
16+
}
17+
18+
/*
19+
class Solution {
20+
public boolean containsDuplicate(int[] nums) {
21+
return Arrays.stream(nums).distinct().count() != nums.length;
22+
}
23+
}
24+
*/

contains-duplicate/Yn3-3xh.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/*
2+
[문제풀이]
3+
time: O(N), space: O(N)
4+
- 같은 수가 하나라도 있으면 true
5+
- 모든 수가 다르면 false
6+
7+
[회고]
8+
ArrayList vs Set
9+
ArrayList: O(N^2), 매번 리스트를 처음부터 검색해야 하며, n번 반복
10+
Set : O(N) , 내부적으로 해시 테이블을 사용하여 중복 확인을 O(1)에 수행
11+
따라서 중복 검사에서 Set 더 효율적
12+
13+
set.add()의 return 자료형은 boolean 이다.
14+
이후에는 if(!set.add()) 처럼 사용해도 좋을 듯.
15+
*/
16+
class Solution {
17+
public boolean containsDuplicate(int[] nums) {
18+
Set<Integer> set = new HashSet<>();
19+
for (int num : nums) {
20+
if (set.contains(num)) {
21+
return true;
22+
}
23+
set.add(num);
24+
}
25+
return false;
26+
}
27+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import java.util.HashMap;
2+
import java.util.Map;
3+
4+
class Solution {
5+
// 시간복잡도 O(n)
6+
public boolean containsDuplicate(int[] nums) {
7+
Map<Integer, Boolean> dupMap = new HashMap<>();
8+
9+
for(int i = 0; i < nums.length; i++) {
10+
if(dupMap.containsKey(nums[i])) {
11+
return true;
12+
}
13+
14+
dupMap.put(nums[i], true);
15+
}
16+
17+
return false;
18+
}
19+
}

contains-duplicate/ayosecu.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from typing import List
2+
3+
class Solution:
4+
"""
5+
- Time Complexity: O(n), n = len(nums)
6+
- Space Complexity: O(N)
7+
- N = len(set_check) = The number of unique numbers
8+
- If there is no duplicated numbers, N = n
9+
"""
10+
def containsDuplicate(self, nums: List[int]) -> bool:
11+
set_check = set()
12+
13+
for num in nums:
14+
if num in set_check:
15+
return True
16+
else:
17+
set_check.add(num)
18+
19+
return False
20+
21+
tc = [
22+
([1, 2, 3, 1], True),
23+
([1, 2, 3, 4], False),
24+
([1,1,1,3,3,4,3,2,4,2], True)
25+
]
26+
27+
for i, (t, e) in enumerate(tc, 1):
28+
sol = Solution()
29+
result = sol.containsDuplicate(t)
30+
print(f"TC {i} is Passed!" if result == e else f"TC {i} is Failed! - Expected: {e}, Result: {result}")

contains-duplicate/b41-41.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// nums에 중복이 있는 지 확인하는 것
2+
// array써서 시간 통과 못했다가 Set 객체로 변경해서 통과
3+
function containsDuplicate(nums: number[]): boolean {
4+
const numSet = new Set();
5+
6+
for(let num of nums) {
7+
if(numSet.has(num)) {
8+
return true;
9+
} else {
10+
numSet.add(num);
11+
}
12+
}
13+
14+
return false;
15+
};

contains-duplicate/choidabom.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// https://leetcode.com/problems/contains-duplicate/description/
2+
3+
// TC: O(n)
4+
// SC: O(n)
5+
6+
function containsDuplicate(nums: number[]): boolean {
7+
const set = new Set(nums);
8+
return set.size !== nums.length;
9+
}
10+
11+
function containsDuplicate(nums: number[]): boolean {
12+
const set = new Set();
13+
14+
for (const num of nums) {
15+
if (set.has(num)) {
16+
return true;
17+
}
18+
set.add(num);
19+
}
20+
21+
return false;
22+
}
23+
24+
console.log(containsDuplicate([1, 1, 1, 3, 3, 4, 3, 2, 4, 2]));

contains-duplicate/clara-shin.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/**
2+
* 문제 파악: 배열에 중복된 요소가 있는지 확인하는 문제
3+
* 만약 한 값이 배열에서 적어도 두 번 이상 나타난다면 true를, 모든 요소가 고유하다면 false를 반환
4+
*
5+
* 접근 방식:
6+
* Set 객체를 사용하여 중복된 요소를 확인
7+
* Set은 중복된 값을 허용하지 않기 때문에, 배열을 Set으로 변환한 후 길이를 비교하여 중복 여부를 확인
8+
* 배열의 길이와 Set으로 변환한 후의 길이를 비교
9+
* - 길이가 다르면 중복된 요소가 존재하므로 true 반환
10+
* - 길이가 같으면 중복된 요소가 존재하지 않으므로 false 반환
11+
* 시간 복잡도: O(n) - 배열을 한 번 순회하면서 Set에 요소를 추가하기 때문
12+
* 공간 복잡도: O(n) - Set에 최대 n개의 요소를 저장해야 하기 때문
13+
*/
14+
15+
/**
16+
* @param {number[]} nums
17+
* @return {boolean}
18+
*/
19+
var containsDuplicate = function (nums) {
20+
const uniqueSet = new Set(nums);
21+
return uniqueSet.size < nums.length;
22+
};
23+
24+
/**
25+
* 내장메서드인 sort()를 사용하여 배열을 정렬한 후, 인접한 요소를 비교하여 중복된 요소가 있는지 확인하는 방법도 있다. -> 시간 복잡도 O(n log n)
26+
*
27+
* 성능비교:
28+
* Set() 사용 : Runtime: ✨15ms, Memory: 68MB
29+
* sort() 사용: Runtime: 69ms, Memory: 65.6MB
30+
*
31+
* */

contains-duplicate/doitduri.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class Solution {
2+
func containsDuplicate(_ nums: [Int]) -> Bool {
3+
let numbericSet = Set(nums)
4+
return numbericSet.count < nums.count
5+
}
6+
}

contains-duplicate/eunhwa99.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
1+
import java.util.HashSet;
2+
3+
// 공간 복잡도; O(n)
4+
// 시간 복잡도: O(1)
15
class Solution {
26
public boolean containsDuplicate(int[] nums) {
3-
HashSet<Integer> seen = new HashSet<>();
7+
HashSet<Integer> visited = new HashSet<>();
48
for (int num : nums) {
5-
if (!seen.add(num)) {
9+
if (!visited.add(num)) {
610
return true;
711
}
812
}
9-
1013
return false;
11-
12-
1314
}
1415
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {boolean}
4+
*/
5+
6+
/**
7+
* 문제설명: 2개 이상 반복되는 값이 있으면 true, 모두 반복되지 않으면 false.
8+
9+
제한사항
10+
1 <= nums.length <= 10^5
11+
-109 <= nums[i] <= 109
12+
*/
13+
14+
var containsDuplicate = function (nums) {
15+
const numberSet = new Set();
16+
//시간 복잡도 O(n)
17+
for (let i of nums) {
18+
if (!numberSet.has(i)) {
19+
//공간복잡도 O(n)
20+
numberSet.add(i);
21+
} else {
22+
return true;
23+
}
24+
}
25+
return false;
26+
};

0 commit comments

Comments
 (0)