Skip to content

Commit e8b19f6

Browse files
committed
2 parents a544c4d + d9dd2d8 commit e8b19f6

File tree

213 files changed

+5698
-178
lines changed

Some content is hidden

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

213 files changed

+5698
-178
lines changed

โ€Ž.github/workflows/integration.yamlโ€Ž

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ jobs:
1717
run: |
1818
echo "๐Ÿ” PR ๋ฒˆํ˜ธ: ${{ github.event.pull_request.number }}"
1919
pr_number="${{ github.event.pull_request.number }}"
20-
20+
2121
echo "๐Ÿ“‹ PR ๋ผ๋ฒจ ์กฐํšŒ ์ค‘..."
2222
labels_json=$(gh pr view $pr_number --json labels -q '.labels[].name')
2323
echo "ํ™•์ธ๋œ ๋ผ๋ฒจ: $labels_json"
24-
24+
2525
if [ -n "$labels_json" ]; then
2626
has_maintenance=$(echo $labels_json | grep -q 'maintenance' && echo 'true' || echo 'false')
2727
echo "maintenance ๋ผ๋ฒจ ํฌํ•จ ์—ฌ๋ถ€: $has_maintenance"

โ€Ž.github/workflows/management.yamlโ€Ž

Lines changed: 88 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@ on:
1111
options:
1212
- approve-prs
1313
- merge-prs
14+
week:
15+
description: 'Week number to filter (optional, e.g., "1")'
16+
required: false
17+
type: string
18+
default: ""
1419
exclude_prs:
1520
description: 'PR numbers to exclude (comma-separated, e.g., "1972,1973")'
1621
required: false
@@ -40,11 +45,20 @@ jobs:
4045
excludes="[$(echo "$exclude_input" | sed 's/,/, /g')]"
4146
fi
4247
48+
# Build request payload
49+
week_input="${{ inputs.week }}"
50+
if [ -z "$week_input" ]; then
51+
payload="{\"repo_name\": \"${{ github.event.repository.name }}\", \"excludes\": $excludes}"
52+
else
53+
payload="{\"repo_name\": \"${{ github.event.repository.name }}\", \"week\": \"Week $week_input\", \"excludes\": $excludes}"
54+
fi
55+
56+
echo "์ฃผ์ฐจ ํ•„ํ„ฐ: ${week_input:-์ „์ฒด}"
4357
echo "์ œ์™ธํ•  PR: $excludes"
4458
4559
response=$(curl -s -X POST "https://github.dalestudy.com/approve-prs" \
4660
-H "Content-Type: application/json" \
47-
-d "{\"repo_name\": \"${{ github.event.repository.name }}\", \"excludes\": $excludes}")
61+
-d "$payload")
4862
4963
echo "response=$response" >> $GITHUB_OUTPUT
5064
echo "$response" | jq '.'
@@ -55,6 +69,10 @@ jobs:
5569
5670
success=$(echo "$response" | jq -r '.success // false')
5771
total=$(echo "$response" | jq -r '.total_open_prs // 0')
72+
week_filter=$(echo "$response" | jq -r '.week_filter // null')
73+
week_matched=$(echo "$response" | jq -r '.week_matched // 0')
74+
week_mismatched=$(echo "$response" | jq -r '.week_mismatched // 0')
75+
solving_excluded=$(echo "$response" | jq -r '.solving_excluded // 0')
5876
processed=$(echo "$response" | jq -r '.processed // 0')
5977
approved=$(echo "$response" | jq -r '.approved // 0')
6078
skipped=$(echo "$response" | jq -r '.skipped // 0')
@@ -69,18 +87,42 @@ jobs:
6987
fi
7088
7189
echo "" >> $GITHUB_STEP_SUMMARY
90+
if [ "$week_filter" != "null" ]; then
91+
echo "- ๐Ÿ—“๏ธ ์ฃผ์ฐจ ํ•„ํ„ฐ: **$week_filter**" >> $GITHUB_STEP_SUMMARY
92+
fi
7293
echo "- ๐Ÿ“‹ ์ „์ฒด Open PR: **$total**๊ฐœ" >> $GITHUB_STEP_SUMMARY
94+
if [ "$week_filter" != "null" ]; then
95+
echo "- โœ… $week_filter ๋งค์นญ: **$week_matched**๊ฐœ" >> $GITHUB_STEP_SUMMARY
96+
echo "- โŒ Week ๋ถˆ์ผ์น˜: **$week_mismatched**๊ฐœ" >> $GITHUB_STEP_SUMMARY
97+
echo "- ๐Ÿ”„ Solving ์ƒํƒœ ์ œ์™ธ: **$solving_excluded**๊ฐœ" >> $GITHUB_STEP_SUMMARY
98+
fi
7399
echo "- ๐Ÿ” ๊ฒ€์‚ฌํ•œ PR: **$processed**๊ฐœ" >> $GITHUB_STEP_SUMMARY
74100
echo "- โœ… ์Šน์ธํ•œ PR: **$approved**๊ฐœ" >> $GITHUB_STEP_SUMMARY
75101
echo "- โญ๏ธ ๊ฑด๋„ˆ๋›ด PR: **$skipped**๊ฐœ" >> $GITHUB_STEP_SUMMARY
76102
77103
# Show detailed results if available
78-
results=$(echo "$response" | jq -r '.results // []')
79-
if [ "$results" != "[]" ]; then
104+
result_count=$(echo "$response" | jq -r '.results | length')
105+
if [ "$result_count" -gt 0 ]; then
80106
echo "" >> $GITHUB_STEP_SUMMARY
81107
echo "### ๐Ÿ“ ์ƒ์„ธ ๊ฒฐ๊ณผ" >> $GITHUB_STEP_SUMMARY
82108
echo "" >> $GITHUB_STEP_SUMMARY
83-
echo "$response" | jq -r '.results[] | "- PR #\(.pr_number): \(.status) \(if .reason then "(\(.reason))" else "" end)"' >> $GITHUB_STEP_SUMMARY
109+
110+
echo "$response" | jq -c '.results[]' | while read -r item; do
111+
pr=$(echo "$item" | jq -r '.pr')
112+
title=$(echo "$item" | jq -r '.title')
113+
skipped=$(echo "$item" | jq -r '.skipped // false')
114+
approved=$(echo "$item" | jq -r '.approved // false')
115+
reason=$(echo "$item" | jq -r '.reason // ""')
116+
error=$(echo "$item" | jq -r '.error // ""')
117+
118+
if [ "$skipped" = "true" ]; then
119+
echo "- PR #$pr [$title]: โญ๏ธ skipped ($reason)" >> $GITHUB_STEP_SUMMARY
120+
elif [ "$approved" = "true" ]; then
121+
echo "- PR #$pr [$title]: โœ… approved" >> $GITHUB_STEP_SUMMARY
122+
else
123+
echo "- PR #$pr [$title]: โŒ failed (${error:-unknown})" >> $GITHUB_STEP_SUMMARY
124+
fi
125+
done
84126
fi
85127
86128
merge-prs:
@@ -105,13 +147,23 @@ jobs:
105147
excludes="[$(echo "$exclude_input" | sed 's/,/, /g')]"
106148
fi
107149
150+
# Build request payload
151+
week_input="${{ inputs.week }}"
108152
merge_method="merge"
153+
154+
if [ -z "$week_input" ]; then
155+
payload="{\"repo_name\": \"${{ github.event.repository.name }}\", \"merge_method\": \"$merge_method\", \"excludes\": $excludes}"
156+
else
157+
payload="{\"repo_name\": \"${{ github.event.repository.name }}\", \"merge_method\": \"$merge_method\", \"week\": \"Week $week_input\", \"excludes\": $excludes}"
158+
fi
159+
109160
echo "๋จธ์ง€ ๋ฐฉ์‹: $merge_method"
161+
echo "์ฃผ์ฐจ ํ•„ํ„ฐ: ${week_input:-์ „์ฒด}"
110162
echo "์ œ์™ธํ•  PR: $excludes"
111163
112164
response=$(curl -s -X POST "https://github.dalestudy.com/merge-prs" \
113165
-H "Content-Type: application/json" \
114-
-d "{\"repo_name\": \"${{ github.event.repository.name }}\", \"merge_method\": \"$merge_method\", \"excludes\": $excludes}")
166+
-d "$payload")
115167
116168
echo "response=$response" >> $GITHUB_OUTPUT
117169
echo "$response" | jq '.'
@@ -122,6 +174,10 @@ jobs:
122174
123175
success=$(echo "$response" | jq -r '.success // false')
124176
total=$(echo "$response" | jq -r '.total_open_prs // 0')
177+
week_filter=$(echo "$response" | jq -r '.week_filter // null')
178+
week_matched=$(echo "$response" | jq -r '.week_matched // 0')
179+
week_mismatched=$(echo "$response" | jq -r '.week_mismatched // 0')
180+
solving_excluded=$(echo "$response" | jq -r '.solving_excluded // 0')
125181
processed=$(echo "$response" | jq -r '.processed // 0')
126182
merged=$(echo "$response" | jq -r '.merged // 0')
127183
skipped=$(echo "$response" | jq -r '.skipped // 0')
@@ -138,16 +194,40 @@ jobs:
138194
139195
echo "" >> $GITHUB_STEP_SUMMARY
140196
echo "- ๐Ÿ”ง ๋จธ์ง€ ๋ฐฉ์‹: **$merge_method**" >> $GITHUB_STEP_SUMMARY
197+
if [ "$week_filter" != "null" ]; then
198+
echo "- ๐Ÿ—“๏ธ ์ฃผ์ฐจ ํ•„ํ„ฐ: **$week_filter**" >> $GITHUB_STEP_SUMMARY
199+
fi
141200
echo "- ๐Ÿ“‹ ์ „์ฒด Open PR: **$total**๊ฐœ" >> $GITHUB_STEP_SUMMARY
201+
if [ "$week_filter" != "null" ]; then
202+
echo "- โœ… $week_filter ๋งค์นญ: **$week_matched**๊ฐœ" >> $GITHUB_STEP_SUMMARY
203+
echo "- โŒ Week ๋ถˆ์ผ์น˜: **$week_mismatched**๊ฐœ" >> $GITHUB_STEP_SUMMARY
204+
echo "- ๐Ÿ”„ Solving ์ƒํƒœ ์ œ์™ธ: **$solving_excluded**๊ฐœ" >> $GITHUB_STEP_SUMMARY
205+
fi
142206
echo "- ๐Ÿ” ๊ฒ€์‚ฌํ•œ PR: **$processed**๊ฐœ" >> $GITHUB_STEP_SUMMARY
143207
echo "- โœ… ๋จธ์ง€ํ•œ PR: **$merged**๊ฐœ" >> $GITHUB_STEP_SUMMARY
144208
echo "- โญ๏ธ ๊ฑด๋„ˆ๋›ด PR: **$skipped**๊ฐœ" >> $GITHUB_STEP_SUMMARY
145209
146210
# Show detailed results if available
147-
results=$(echo "$response" | jq -r '.results // []')
148-
if [ "$results" != "[]" ]; then
211+
result_count=$(echo "$response" | jq -r '.results | length')
212+
if [ "$result_count" -gt 0 ]; then
149213
echo "" >> $GITHUB_STEP_SUMMARY
150214
echo "### ๐Ÿ“ ์ƒ์„ธ ๊ฒฐ๊ณผ" >> $GITHUB_STEP_SUMMARY
151215
echo "" >> $GITHUB_STEP_SUMMARY
152-
echo "$response" | jq -r '.results[] | "- PR #\(.pr_number): \(.status) \(if .reason then "(\(.reason))" else "" end)"' >> $GITHUB_STEP_SUMMARY
216+
217+
echo "$response" | jq -c '.results[]' | while read -r item; do
218+
pr=$(echo "$item" | jq -r '.pr')
219+
title=$(echo "$item" | jq -r '.title')
220+
skipped=$(echo "$item" | jq -r '.skipped // false')
221+
merged=$(echo "$item" | jq -r '.merged // false')
222+
reason=$(echo "$item" | jq -r '.reason // ""')
223+
error=$(echo "$item" | jq -r '.error // ""')
224+
225+
if [ "$skipped" = "true" ]; then
226+
echo "- PR #$pr [$title]: โญ๏ธ skipped ($reason)" >> $GITHUB_STEP_SUMMARY
227+
elif [ "$merged" = "true" ]; then
228+
echo "- PR #$pr [$title]: โœ… merged" >> $GITHUB_STEP_SUMMARY
229+
else
230+
echo "- PR #$pr [$title]: โŒ failed (${error:-unknown})" >> $GITHUB_STEP_SUMMARY
231+
fi
232+
done
153233
fi

โ€Ž3sum/WHYjun.pyโ€Ž

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
class Solution:
2+
def threeSum(self, nums: List[int]) -> List[List[int]]:
3+
answer = []
4+
sortedNums = sorted(nums)
5+
6+
for i in range(len(sortedNums)):
7+
# skip if same to avoid dup
8+
if i > 0 and sortedNums[i] == sortedNums[i-1]:
9+
continue
10+
11+
# use two pointers
12+
j = i + 1
13+
k = len(sortedNums) - 1
14+
15+
while j < k:
16+
total = sortedNums[i] + sortedNums[j] + sortedNums[k]
17+
18+
if total == 0:
19+
answer.append([sortedNums[i], sortedNums[j], sortedNums[k]])
20+
j += 1
21+
# skip if same to avoid dup
22+
while sortedNums[j] == sortedNums[j-1] and j < k:
23+
j += 1
24+
elif total < 0:
25+
j += 1
26+
else:
27+
k -= 1
28+
29+
return answer

โ€Žclimbing-stairs/WHYjun.pyโ€Ž

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution:
2+
def climbStairs(self, n: int) -> int:
3+
dp = {}
4+
return self.climbStairsRecursively(n, dp)
5+
6+
def climbStairsRecursively(self, n: int, dp: Dict[int, int]):
7+
if n == 1:
8+
dp[1] = 1
9+
return dp[1]
10+
if n == 2:
11+
dp[2] = 2
12+
return dp[2]
13+
14+
if n - 2 not in dp:
15+
dp[n - 2] = self.climbStairsRecursively(n - 2, dp)
16+
17+
if n - 1 not in dp:
18+
dp[n - 1] = self.climbStairsRecursively(n - 1, dp)
19+
20+
return dp[n - 2] + dp[n - 1]
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public int climbStairs(int n) {
3+
int[] dp = new int[46];
4+
dp[0] = 1;
5+
dp[1] = 1;
6+
dp[2] = dp[1] + dp[0];
7+
dp[3] = dp[2] + dp[1];
8+
9+
for (int i = 4; i <= n; i++) {
10+
dp[i] = dp[i-1] + dp[i-2];
11+
}
12+
return dp[n];
13+
}
14+
}
15+
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
function containsDuplicate(nums: number[]): boolean {
2+
// Javascript์˜ Set์€ ๋‚ด๋ถ€์ ์œผ๋กœ ํ•ด์‹œํ…Œ์ด๋ธ”์„ ์ด์šฉํ•ด์„œ, O(n)์œผ๋กœ ์ค‘๋ณต ์ œ๊ฑฐ
3+
const uniqueNums = Array.from(new Set(nums).values());
4+
return uniqueNums.length !== nums.length;
5+
};
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#
2+
# @lc app=leetcode id=217 lang=python3
3+
#
4+
# [217] Contains Duplicate
5+
#
6+
7+
# @lc code=start
8+
class Solution:
9+
def containsDuplicate(self, nums: List[int]) -> bool:
10+
# list๋กœ ํ•˜๋‹ˆ๊นŒ ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋– ์„œ set์œผ๋กœ ๋ณ€๊ฒฝ
11+
idx=set()
12+
for i in nums:
13+
if i in idx:
14+
return True
15+
idx.add(i)
16+
# null ๋ฐฉ์ง€
17+
return False
18+
19+
# @lc code=end
20+
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
class Solution:
2+
def containsDuplicate(self, nums: List[int]) -> bool:
3+
return len(set(nums)) != len(nums)
4+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# ์‹œ๊ฐ„ ๋ณต์žก๋„
2+
# ์ž…๋ ฅ list๋ฅผ set์œผ๋กœ ๋ณ€ํ™˜ -> ์ตœ๋Œ€ O(n)
3+
# ๊ณต๊ฐ„ ๋ณต์žก๋„
4+
# ์ž…๋ ฅ list๋ฅผ set์œผ๋กœ ๋ณ€ํ™˜ -> ์ตœ๋Œ€ O(n)
5+
class Solution:
6+
def containsDuplicate(self, nums: List[int]) -> bool:
7+
set_nums = set(nums)
8+
list_nums = list(set_nums)
9+
if len(nums) != len(list_nums):
10+
return True
11+
else:
12+
return False

โ€Žcontains-duplicate/Geegong.javaโ€Ž

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,26 @@ public class Geegong {
99
* time complexity : O(n)
1010
* space complexity : o(n)
1111
* @param nums
12-
* @return
12+
* @return boolean
1313
*/
1414
public boolean containsDuplicate(int[] nums) {
15+
16+
17+
1518
HashSet<Integer> uniques = new HashSet<>();
1619

1720
for (int num : nums) {
18-
if (uniques.contains(num)) {
21+
22+
// ๋ช…ํ™•ํ•˜๊ฒŒ hashSet์— ๊ฐ’์ด ์žˆ๋Š”์ง€ ์ฒดํฌํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋กœ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ
23+
// if (uniques.contains(num)) {
24+
// return true;
25+
// }
26+
// uniques.add(num);
27+
28+
// hashSet ์˜ Add ๋Š” ์ด๋ฏธ ๊ฐ’์ด ์žˆ๋‹ค๋ฉด FALSE๋ฅผ ๋ฆฌํ„ดํ•˜๊ธฐ์— ์•„๋ž˜์ฒ˜๋Ÿผ๋„ ๋™์ž‘ ๊ฐ€๋Šฅ (๋” ๋น ๋ฅธ ๊ฒฐ๊ณผํ™•์ธ)
29+
if (!uniques.add(num)) {
1930
return true;
2031
}
21-
22-
uniques.add(num);
2332
}
2433

2534
return false;

0 commit comments

Comments
ย (0)