Skip to content

Commit 8703d5a

Browse files
Create taurus09318976.py
1 parent f9bd36c commit 8703d5a

File tree

1 file changed

+103
-0
lines changed

1 file changed

+103
-0
lines changed
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
'''
2+
๋ฌธ์ œ์˜ ์˜๋„
3+
์ด ๋ฌธ์ œ๋Š” ๋ฌธ์ž์—ด s์—์„œ ๋ฌธ์ž์—ด t์˜ ๋ชจ๋“  ๋ฌธ์ž(์ค‘๋ณต ํฌํ•จ)๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฐ€์žฅ ์งง์€ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ์ฐพ๋Š” ๋ฌธ์ œ์ž„.
4+
5+
ํ•ต์‹ฌ ํฌ์ธํŠธ:
6+
1) t์˜ ๋ชจ๋“  ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•จ (์ค‘๋ณต ๊ฐœ์ˆ˜๋„ ๋งž์•„์•ผ ํ•จ)
7+
2) ๊ฐ€์žฅ ์งง์€ ๊ธธ์ด์˜ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ์ฐพ์•„์•ผ ํ•จ
8+
3) ์—ฐ์†๋œ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์ด์–ด์•ผ ํ•จ
9+
10+
ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
11+
์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ + ํˆฌ ํฌ์ธํ„ฐ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•จ:
12+
์˜ค๋ฅธ์ชฝ ํฌ์ธํ„ฐ๋กœ ์œˆ๋„์šฐ๋ฅผ ํ™•์žฅํ•˜์—ฌ ์กฐ๊ฑด์„ ๋งŒ์กฑ์‹œํ‚ด
13+
์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด ์™ผ์ชฝ ํฌ์ธํ„ฐ๋กœ ์œˆ๋„์šฐ๋ฅผ ์ถ•์†Œํ•˜์—ฌ ์ตœ์†Œ ๊ธธ์ด ์ฐพ๊ธฐ
14+
ํ•ด์‹œ๋งต์œผ๋กœ ๋ฌธ์ž ๊ฐœ์ˆ˜๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌ
15+
16+
Example 1์˜ ๊ฒฝ์šฐ๋ฅผ ๋ณด๋ฉด,
17+
18+
Input: s = "ADOBECODEBANC", t = "ABC"
19+
20+
์‹คํ–‰ ๊ณผ์ •:
21+
t_count: {'A':1, 'B':1, 'C':1}, required = 3
22+
์œˆ๋„์šฐ ํ™•์žฅ: right ํฌ์ธํ„ฐ๋กœ "ADOBEC"๊นŒ์ง€ ํ™•์žฅ โ†’ ์กฐ๊ฑด ๋งŒ์กฑ
23+
์œˆ๋„์šฐ ์ถ•์†Œ: left ํฌ์ธํ„ฐ๋กœ "ODEBANC" โ†’ "BANC"๊นŒ์ง€ ์ถ•์†Œ
24+
์ตœ์ข… ๊ฒฐ๊ณผ: "BANC" (๊ธธ์ด 4)
25+
26+
Output: "BANC"
27+
28+
์‹œ๊ฐ„ ๋ณต์žก๋„: O(|s| + |t|)
29+
๊ฐ ๋ฌธ์ž๊ฐ€ ์ตœ๋Œ€ 2๋ฒˆ ๋ฐฉ๋ฌธ๋จ (right ํฌ์ธํ„ฐ๋กœ 1๋ฒˆ, left ํฌ์ธํ„ฐ๋กœ 1๋ฒˆ)
30+
t๋ฅผ ํ•œ ๋ฒˆ ์ˆœํšŒํ•˜์—ฌ ํ•ด์‹œ๋งต ์ƒ์„ฑ: O(|t|)
31+
์ „์ฒด์ ์œผ๋กœ ์„ ํ˜• ์‹œ๊ฐ„ ๋ณต์žก๋„
32+
33+
๊ณต๊ฐ„ ๋ณต์žก๋„: O(|s| + |t|)
34+
t_count ํ•ด์‹œ๋งต: O(|t|)
35+
window_counts ํ•ด์‹œ๋งต: ์ตœ๋Œ€ O(|s|)
36+
๊ธฐํƒ€ ๋ณ€์ˆ˜๋“ค: O(1)
37+
'''
38+
39+
class Solution:
40+
def minWindow(self, s: str, t: str) -> str:
41+
# t๊ฐ€ ๋นˆ ๋ฌธ์ž์—ด์ด๋ฉด ๋นˆ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜
42+
if not t:
43+
return ""
44+
45+
# t์˜ ๊ฐ ๋ฌธ์ž ๊ฐœ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ํ•ด์‹œ๋งต
46+
t_count = {}
47+
for char in t:
48+
t_count[char] = t_count.get(char, 0) + 1
49+
50+
# ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ณ ์œ  ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜
51+
required = len(t_count)
52+
53+
# ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ์˜ ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ํฌ์ธํ„ฐ์™€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฌธ์ž ๊ฐœ์ˆ˜ ์ดˆ๊ธฐํ™”
54+
left = 0
55+
right = 0
56+
57+
# ํ˜„์žฌ ์œˆ๋„์šฐ์—์„œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜
58+
formed = 0
59+
60+
# ํ˜„์žฌ ์œˆ๋„์šฐ์˜ ๋ฌธ์ž ๊ฐœ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ํ•ด์‹œ๋งต
61+
window_counts = {}
62+
63+
# ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜๋“ค
64+
min_len = float('inf')
65+
min_left = 0
66+
min_right = 0
67+
68+
# ์˜ค๋ฅธ์ชฝ ํฌ์ธํ„ฐ๋กœ ์œˆ๋„์šฐ ํ™•์žฅ
69+
while right < len(s):
70+
# ์˜ค๋ฅธ์ชฝ ๋ฌธ์ž๋ฅผ ์œˆ๋„์šฐ์— ์ถ”๊ฐ€
71+
char = s[right]
72+
window_counts[char] = window_counts.get(char, 0) + 1
73+
74+
# ํ˜„์žฌ ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜๊ฐ€ t์—์„œ ์š”๊ตฌํ•˜๋Š” ๊ฐœ์ˆ˜์™€ ๊ฐ™์•„์ง€๋ฉด formed์— 1์„ ๋”ํ•จ
75+
if char in t_count and window_counts[char] == t_count[char]:
76+
formed += 1
77+
78+
# ๋ชจ๋“  ๋ฌธ์ž์˜ ์กฐ๊ฑด์ด ๋งŒ์กฑ๋˜๋ฉด ์™ผ์ชฝ ํฌ์ธํ„ฐ๋กœ ์œˆ๋„์šฐ๋ฅผ ์ตœ์†Œํ™” ์‹œ๋„
79+
while left <= right and formed == required:
80+
char = s[left]
81+
82+
# ํ˜„์žฌ ์œˆ๋„์šฐ๊ฐ€ ์ง€๊ธˆ๊นŒ์ง€์˜ ์ตœ์†Œ ๊ธธ์ด๋ณด๋‹ค ์ž‘์œผ๋ฉด ๊ฒฐ๊ณผ ์—…๋ฐ์ดํŠธ
83+
if right - left + 1 < min_len:
84+
min_len = right - left + 1
85+
min_left = left
86+
min_right = right
87+
88+
# ์™ผ์ชฝ ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š๊ฒŒ ๋˜๋ฉด formed์—์„œ 1์„ ๋บŒ
89+
window_counts[char] -= 1
90+
if char in t_count and window_counts[char] < t_count[char]:
91+
formed -= 1
92+
93+
# ์™ผ์ชฝ ํฌ์ธํ„ฐ ์ด๋™
94+
left += 1
95+
96+
# ์˜ค๋ฅธ์ชฝ ํฌ์ธํ„ฐ ์ด๋™
97+
right += 1
98+
99+
# ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜
100+
return "" if min_len == float('inf') else s[min_left:min_right + 1]
101+
102+
103+

0 commit comments

Comments
ย (0)