Skip to content

Commit 00da909

Browse files
committed
Merge remote-tracking branch 'origin/main'
2 parents 9871f0b + bcde25c commit 00da909

File tree

268 files changed

+7663
-9
lines changed

Some content is hidden

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

268 files changed

+7663
-9
lines changed

โ€Ž.github/labeler.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,8 @@ elixir:
5252
- changed-files:
5353
- any-glob-to-any-file:
5454
- "**/*.exs"
55+
56+
rust:
57+
- changed-files:
58+
- any-glob-to-any-file:
59+
- "**/*.rs"

โ€Ž.github/pull_request_template.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
## ๋‹ต์•ˆ ์ œ์ถœ ๋ฌธ์ œ
22

33
<!--
4-
์ž์‹ ์˜ ์ˆ˜์ค€์ด๋‚˜ ์ผ์ •์— ๋งž๊ฒŒ ๊ธˆ์ฃผ์— ํ‘ธ์‹œ๊ธฐ๋กœ ์ •ํ•œ ๋ฌธ์ œ๋“ค๋งŒ ๋‚˜์—ดํ•ด์ฃผ์„ธ์š”.
5-
์ฝ”๋“œ ๊ฒ€ํ† ์ž๋“ค์ด PR ์Šน์ธ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•  ๋•Œ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
4+
์ž์‹ ์˜ ์ˆ˜์ค€์ด๋‚˜ ์ผ์ •์— ๋งž๊ฒŒ ๐Ÿ‘‰๊ธˆ์ฃผ์— ํ‘ธ์‹œ๊ธฐ๋กœ ์ •ํ•œ ๋ฌธ์ œ๋“ค๐Ÿ‘ˆ๋งŒ ๋‚˜์—ดํ•ด์ฃผ์„ธ์š”.
5+
๋ฆฌ๋ทฐ์–ด๋“ค์ด ๊ฒ€ํ† ์™€ PR ์Šน์ธ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•  ๋•Œ ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
66
-->
77

88
- [ ] ๋ฌธ์ œ 1
99
- [ ] ๋ฌธ์ œ 2
1010
- [ ] ๋ฌธ์ œ 3
11+
<!-- - [ ] ๋ฌธ์ œ 4 ํ’€๊ณ ์‹ถ์ง€ ์•Š์€ ๋ฌธ์ œ๋Š” ์ด๋ ‡๊ฒŒ ์ฃผ์„์ฒ˜๋ฆฌ ํ•ด ์ฃผ์…”๋„ ์ข‹์•„์š” -->
1112

1213
## ์ฒดํฌ ๋ฆฌ์ŠคํŠธ
1314

14-
- [ ] PR์„ ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€ํ•˜๊ณ  Week๋ฅผ ํ˜„์žฌ ์ฃผ์ฐจ๋กœ ์„ค์ •ํ•ด์ฃผ์„ธ์š”.
15+
- [ ] ์šฐ์ธก ๋ฉ”๋‰ด์—์„œ PR์„ **Projects**์— ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”.
16+
- [ ] **Projects**์˜ ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ(โ–ผ)์„ ๋ˆŒ๋Ÿฌ ํ™•์žฅํ•œ ๋’ค, **Week**๋ฅผ ํ˜„์žฌ ์ฃผ์ฐจ๋กœ ์„ค์ •ํ•ด์ฃผ์„ธ์š”.
1517
- [ ] ๋ฐ”๋กœ ์•ž์— PR์„ ์—ด์–ด์ฃผ์‹  ๋ถ„์„ ์ฝ”๋“œ ๊ฒ€ํ† ์ž๋กœ ์ง€์ •ํ•ด์ฃผ์„ธ์š”.
16-
- [ ] ๋ฌธ์ œ๋ฅผ ๋ชจ๋‘ ํ‘ธ์‹œ๋ฉด ํ”„๋กœ์ ํŠธ์—์„œ Status๋ฅผ `In Review`๋กœ ์„ค์ •ํ•ด์ฃผ์„ธ์š”.
18+
- [ ] ๋ฌธ์ œ๋ฅผ ๋ชจ๋‘ ํ‘ธ์‹œ๋ฉด ํ”„๋กœ์ ํŠธ์—์„œ **Status**๋ฅผ `In Review`๋กœ ์„ค์ •ํ•ด์ฃผ์„ธ์š”.
1719
- [ ] ์ฝ”๋“œ ๊ฒ€ํ† ์ž 1๋ถ„ ์ด์ƒ์œผ๋กœ๋ถ€ํ„ฐ ์Šน์ธ์„ ๋ฐ›์œผ์…จ๋‹ค๋ฉด PR์„ ๋ณ‘ํ•ฉํ•ด์ฃผ์„ธ์š”.

โ€Ž.github/workflows/integration.yaml

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,19 @@ jobs:
1515
- name: Get PR labels
1616
id: pr-labels
1717
run: |
18+
echo "๐Ÿ” PR ๋ฒˆํ˜ธ: ${{ github.event.pull_request.number }}"
1819
pr_number="${{ github.event.pull_request.number }}"
20+
21+
echo "๐Ÿ“‹ PR ๋ผ๋ฒจ ์กฐํšŒ ์ค‘..."
1922
labels_json=$(gh pr view $pr_number --json labels -q '.labels[].name')
23+
echo "ํ™•์ธ๋œ ๋ผ๋ฒจ: $labels_json"
24+
2025
if [ -n "$labels_json" ]; then
21-
echo "has_maintenance=$(echo $labels_json | grep -q 'maintenance' && echo 'true' || echo 'false')" >> $GITHUB_OUTPUT
26+
has_maintenance=$(echo $labels_json | grep -q 'maintenance' && echo 'true' || echo 'false')
27+
echo "maintenance ๋ผ๋ฒจ ํฌํ•จ ์—ฌ๋ถ€: $has_maintenance"
28+
echo "has_maintenance=$has_maintenance" >> $GITHUB_OUTPUT
2229
else
30+
echo "maintenance ๋ผ๋ฒจ์ด ์—†๋Š” PR์ž…๋‹ˆ๋‹ค. ํŒŒ์ผ๋ช… ๊ทœ์น™ ๊ฒ€์‚ฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค."
2331
echo "has_maintenance=false" >> $GITHUB_OUTPUT
2432
fi
2533
env:
@@ -28,35 +36,46 @@ jobs:
2836
# ์ค„๋ฐ”๊ฟˆ ์ฒดํฌ
2937
- name: Check for missing end line breaks
3038
run: |
31-
# ๋”ฐ์˜ดํ‘œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ํŒŒ์ผ ๋ชฉ๋ก ๊ฐ€์ ธ์˜ค๊ธฐ
39+
echo "๐Ÿ” ์ค„๋ฐ”๊ฟˆ ๊ฒ€์‚ฌ ์‹œ์ž‘"
40+
echo "๊ธฐ์ค€ ์ปค๋ฐ‹: ${{ github.event.pull_request.base.sha }}"
41+
echo "ํ˜„์žฌ ์ปค๋ฐ‹: ${{ github.sha }}"
42+
3243
files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | tr -d '"')
3344
success=true
3445
35-
echo "๋ณ€๊ฒฝ๋œ ํŒŒ์ผ ๋ชฉ๋ก:"
46+
echo "๐Ÿ“ ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ ๋ชฉ๋ก:"
3647
echo "$files"
3748
3849
echo "## ์ค„๋ฐ”๊ฟˆ ๋ˆ„๋ฝ ํŒŒ์ผ" >> $GITHUB_STEP_SUMMARY
3950
for file in $files; do
51+
echo "๊ฒ€์‚ฌ ์ค‘: $file"
4052
if [ -s "$file" ] && [ "$(tail -c 1 $file | wc -l)" -eq 0 ]; then
41-
echo "๋ฐœ๊ฒฌ๋œ ์ค„๋ฐ”๊ฟˆ ๋ˆ„๋ฝ: $file"
53+
echo "โŒ ์ค„๋ฐ”๊ฟˆ ๋ˆ„๋ฝ: $file"
4254
echo "- $file" >> $GITHUB_STEP_SUMMARY
4355
success=false
56+
else
57+
echo "โœ… ์ •์ƒ: $file"
4458
fi
4559
done
4660
4761
if [ "$success" = false ]; then
62+
echo "โš ๏ธ ์ค„๋ฐ”๊ฟˆ ๊ฒ€์‚ฌ ์‹คํŒจ"
4863
echo -e "\n:warning: ํŒŒ์ผ ๋์˜ ๋ˆ„๋ฝ๋œ ์ค„๋ฐ”๊ฟˆ์„ ์ถ”๊ฐ€ํ•ด ์ฃผ์„ธ์š”." >> $GITHUB_STEP_SUMMARY
4964
exit 1
65+
else
66+
echo "โœ… ๋ชจ๋“  ํŒŒ์ผ์˜ ์ค„๋ฐ”๊ฟˆ ์ •์ƒ"
5067
fi
5168
5269
# ์ œ์–ด๋ฌธ์ž ์ฒดํฌ
5370
- name: Check for control characters in filenames
5471
run: |
72+
echo "๐Ÿ” ํŒŒ์ผ๋ช… ์ œ์–ด๋ฌธ์ž ๊ฒ€์‚ฌ ์‹œ์ž‘"
5573
files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | tr -d '"')
5674
success=true
5775
5876
echo "## ์ œ์–ด๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ ํŒŒ์ผ๋ช…" >> $GITHUB_STEP_SUMMARY
5977
for file in $files; do
78+
echo "๊ฒ€์‚ฌ ์ค‘: $file"
6079
# basename์œผ๋กœ ํŒŒ์ผ๋ช…๋งŒ ์ถ”์ถœํ•˜๊ณ  ๋”ฐ์˜ดํ‘œ ์ œ๊ฑฐ
6180
filename=$(basename "$file" | tr -d '"')
6281
@@ -71,43 +90,66 @@ jobs:
7190
7291
# ์ด์Šค์ผ€์ดํ”„ ์‹œํ€€์Šค ์ฒดํฌ
7392
[[ "$filename" =~ (\\[0-7]{1,3}|\\x[0-9a-fA-F]{1,2}) ]]; then
93+
echo "โŒ ์ œ์–ด๋ฌธ์ž ๋ฐœ๊ฒฌ: $file"
7494
echo "- $file (์ œ์–ด๋ฌธ์ž ํฌํ•จ)" >> $GITHUB_STEP_SUMMARY
7595
success=false
96+
else
97+
echo "โœ… ์ •์ƒ: $file"
7698
fi
7799
done
78100
79101
if [ "$success" = false ]; then
102+
echo "โš ๏ธ ์ œ์–ด๋ฌธ์ž ๊ฒ€์‚ฌ ์‹คํŒจ"
80103
echo -e "\n:warning: ํŒŒ์ผ๋ช…์—์„œ ์ œ์–ด๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•ด ์ฃผ์„ธ์š”." >> $GITHUB_STEP_SUMMARY
81104
exit 1
105+
else
106+
echo "โœ… ๋ชจ๋“  ํŒŒ์ผ๋ช…์ด ์ œ์–ด๋ฌธ์ž ์—†์ด ์ •์ƒ"
82107
fi
83108
84109
# ํŒŒ์ผ๋ช… ๊ทœ์น™ ์ฒดํฌ - maintenance ๋ผ๋ฒจ์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ ์‹คํ–‰
85110
- name: Check filename rules
86111
if: ${{ steps.pr-labels.outputs.has_maintenance != 'true' }}
87112
run: |
88-
files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | tr -d '"')
113+
echo "๐Ÿ” ํŒŒ์ผ๋ช… ๊ทœ์น™ ๊ฒ€์‚ฌ ์‹œ์ž‘"
114+
echo "PR ์ž‘์„ฑ์ž: ${{ github.event.pull_request.user.login }}"
115+
116+
# PR์˜ ๊ณตํ†ต ์กฐ์ƒ ์ปค๋ฐ‹์„ ์ฐพ์•„์„œ merge base๋กœ ์„ค์ •
117+
merge_base=$(git merge-base ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }})
118+
echo "Merge base ์ปค๋ฐ‹: $merge_base"
119+
120+
files=$(git diff --name-only $merge_base ${{ github.event.pull_request.head.sha }} | tr -d '"')
89121
pr_author="${{ github.event.pull_request.user.login }}"
90122
success=true
91123
124+
echo "๐Ÿ“ ๊ฒ€์‚ฌํ•  ํŒŒ์ผ ๋ชฉ๋ก:"
125+
echo "$files"
126+
92127
echo "## ํŒŒ์ผ๋ช… ๊ทœ์น™ ์œ„๋ฐ˜" >> $GITHUB_STEP_SUMMARY
93128
for file in $files; do
94129
if [ -f "$file" ]; then
95130
131+
echo "๊ฒ€์‚ฌ ์ค‘: $file"
96132
# ํŒŒ์ผ๋ช…๋งŒ ์ถ”์ถœ (๊ฒฝ๋กœ ์ œ์™ธ)
97133
filename=$(basename "$file")
98134
99135
# ํŒŒ์ผ๋ช…์ด GitHub๊ณ„์ •๋ช…์ธ์ง€ ํ™•์ธ
100136
shopt -s nocasematch
101137
if [[ ! "$filename" = "$pr_author"* ]]; then
138+
echo "โŒ ๊ทœ์น™ ์œ„๋ฐ˜: $file"
102139
echo "- $file" >> $GITHUB_STEP_SUMMARY
103140
success=false
141+
else
142+
echo "โœ… ์ •์ƒ: $file"
104143
fi
105144
fi
106145
done
107146
108147
if [ "$success" = false ]; then
148+
echo "โš ๏ธ ํŒŒ์ผ๋ช… ๊ทœ์น™ ๊ฒ€์‚ฌ ์‹คํŒจ"
109149
echo -e "\n:warning: ํŒŒ์ผ๋ช…์€ ๋ฐ˜๋“œ์‹œ 'GitHub๊ณ„์ •๋ช…' ๋˜๋Š” 'GitHub๊ณ„์ •๋ช…-xxx' ํ˜•์‹์œผ๋กœ ํ•ด์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: ${pr_author}.ts, ${pr_author}-1.ts, ${pr_author}-2.ts)" >> $GITHUB_STEP_SUMMARY
110150
exit 1
151+
else
152+
echo "โœ… ๋ชจ๋“  ํŒŒ์ผ๋ช…์ด ๊ทœ์น™์— ๋งž๊ฒŒ ์ •์ƒ"
111153
fi
112154
env:
113155
GH_TOKEN: ${{ github.token }}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution {
2+
/**
3+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(N)
4+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(N)
5+
*/
6+
public boolean containsDuplicate(int[] nums) {
7+
Set<Integer> set = new HashSet<>();
8+
9+
for (int num : nums) {
10+
if (set.contains(num)) return true;
11+
set.add(num);
12+
}
13+
14+
return false;
15+
}
16+
}

โ€Žcontains-duplicate/Chaedie.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
2+
3+
'''
4+
ํ’€์ด:
5+
์ค‘๋ณต๋œ ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ์ฐพ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
6+
7+
hash set ์œผ๋กœ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ณ 
8+
๊ธฐ์กด nums ์˜ ๊ธธ์ด์™€ ์ค‘๋ณต ์ œ๊ฑฐ๋œ nums_set ์˜ ๊ธธ์ด๊ฐ€ ๊ฐ™์€์ง€ return ํ–ˆ์Šต๋‹ˆ๋‹ค.
9+
10+
์‹œ๊ฐ„ ๋ณต์žก๋„:
11+
O(n) - has set ์„ ๋งŒ๋“œ๋Š” ์‹œ๊ฐ„
12+
13+
๊ณต๊ฐ„ ๋ณต์žก๋„:
14+
O(n) - n๊ฐœ์˜ ์š”์†Œ๋ฅผ set์— ๋‹ด๊ธฐ ๋•Œ๋ฌธ
15+
'''
16+
17+
18+
class Solution:
19+
def containsDuplicate(self, nums: List[int]) -> bool:
20+
nums_set = set(nums)
21+
return len(nums_set) != len(nums)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package leetcode_study
2+
3+
/**
4+
* Set ์ž๋ฃŒ ๊ตฌ์กฐ๋กœ ๋ณ€๊ฒฝ ํ›„ ์›์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋น„๊ตํ•ด ๋ฌธ์ œ ํ•ด๊ฒฐ
5+
* ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(n)
6+
* -> ๋ชจ๋“  Array์˜ ์›์†Œ๋ฅผ ์ˆœํšŒํ•ด์•ผํ•จ.
7+
* ๊ณต๊ฐ„ ๋ณต์žก๋„ : O(n)
8+
* -> IntArray์˜ ์š”์†Œ ๊ฐœ์ˆ˜์— ๋น„๋ก€ํ•˜์—ฌ ์ถ”๊ฐ€์ ์ธ ๊ณต๊ฐ„์ด ํ•„์š”ํ•จ.
9+
*/
10+
fun containsDuplicate(nums: IntArray): Boolean {
11+
val changeSet = nums.toSet()
12+
return changeSet.size != nums.size
13+
}

โ€Žcontains-duplicate/GangBean.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import java.util.Arrays;
2+
import java.util.stream.Collectors;
3+
4+
class Solution {
5+
public boolean containsDuplicate(int[] nums) {
6+
/***
7+
compare length of array and length of set.
8+
O(n) given that n is length of array nums
9+
*/
10+
return nums.length > Arrays.stream(nums).boxed().collect(Collectors.toSet()).size();
11+
}
12+
}

โ€Žcontains-duplicate/Gotprgmer.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import java.util.HashSet;
2+
import java.util.Set;
3+
4+
class SolutionGotprgmer {
5+
// ํ•ด๋‹น ๋ฌธ์ œ๋Š” ์–ด๋А ํ•œ ์ˆซ์ž๊ฐ€ 2๊ฐœ์ด์ƒ ์กด์žฌํ•  ๊ฒฝ์šฐ true๋ฅผ ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒฝ์šฐ, false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.
6+
// set์„ ์‚ฌ์šฉํ•ด์„œ set์— ์ด๋ฏธ ๊ฐ’์ด ์กด์žฌํ•œ๋‹ค๋ฉด ๊ฐœ์ˆ˜๊ฐ€ 2 ์ด์ƒ์ด๋ฏ€๋กœ true ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด false๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
7+
8+
// ๊ฐ ์ˆซ์ž๋“ค์„ ์ €์žฅํ•ด์„œ set์œผ๋กœ ๊ด€๋ฆฌ -> distinctNums
9+
// nums์˜ ๊ฐ ์ˆซ์ž์ธ checkNum์„ distinctNums์— ๋„ฃ์–ด์ค€๋‹ค.
10+
// ๋งŒ์•ฝ checkNum์ด ์ด๋ฏธ distinctNums์— ์กด์žฌํ•œ๋‹ค๋ฉด ans๋ฅผ true๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค.
11+
12+
13+
// ์‹œ๊ฐ„๋ณต์žก๋„ -> O(n)
14+
// ๊ณต๊ฐ„๋ณต์žก๋„ -> O(n)
15+
static Set<Integer> distinctNums;
16+
public boolean containsDuplicate(int[] nums) {
17+
distinctNums = new HashSet<>();
18+
boolean ans = false;
19+
for (int checkNum : nums) {
20+
if (distinctNums.contains(checkNum)) {
21+
ans = true;
22+
break;
23+
};
24+
distinctNums.add(checkNum);
25+
}
26+
return ans;
27+
}
28+
29+
30+
}

โ€Žcontains-duplicate/HerrineKim.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(n)
2+
3+
/**
4+
* @param {number[]} nums
5+
* @return {boolean}
6+
*/
7+
var containsDuplicate = function (nums) {
8+
const seen = new Set();
9+
for (let num of nums) {
10+
if (seen.has(num)) {
11+
return true; // ์ค‘๋ณต ๋ฐœ๊ฒฌ
12+
}
13+
seen.add(num);
14+
}
15+
return false; // ๋ชจ๋“  ์š”์†Œ๊ฐ€ ๊ณ ์œ 
16+
};
17+

โ€Žcontains-duplicate/HodaeSsi.py

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

0 commit comments

Comments
ย (0)