๋ฐ์ํ
Notice
Recent Posts
Recent Comments
Link
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- ๋คํธ์ํฌ ํต์ ์์ฒญ
- styled-components ์ค์น ์ค๋ฅ
- fetch()
- styled-compoents
- reading 'edgesOut'
- Code Splitting
- styled components ์ค์น ์๋จ
- carouselButton
- react-native-snap-carousel
- java
- react immer
- likelion
- javascript ๋น๋๊ธฐ
- use-immer
- ์ต๋จ๊ฑฐ๋ฆฌ์๊ณ ๋ฆฌ์ฆ
- React ๊ณต์๋ฌธ์
- Call Stack
- react
- ๋จ์ผ๋งํฌ๋๋ฆฌ์คํธ
- Javascript
- styled-components extension
- git branch -m
- styled-components ๋ฒ์ ๋ฌธ์
- Styled Components
- reading 'useDebugValue'
- js fetch
- ๋ธ๋์น ์ด๋ฆ ๋ณ๊ฒฝ ๋ช ๋ น์ด
- ํ ์คํฌ ํ
- vscode extension
- 1966 ํ๋ฆฐํฐํ
Archives
- Today
- Total
Keep Going
๋ฐฑ์ค 2531. ํ์ ์ด๋ฐฅ ๋ณธ๋ฌธ
๋ฐ์ํ
๐ก๋ฌธ์ ๋ถ์ ์์ฝ
- ํ์ ์ด๋ฐฅ ๋ฒจํธ์๋ ๊ฐ์ ์ข ๋ฅ์ ์ด๋ฐฅ์ด 2๊ฐ ์ด์ ์์ ์ ์๋ค.
- ๋ฒจํธ ์์ ์์์ ํ ์์น๋ถํฐ k๊ฐ ์ ์๋ฅผ ์ฐ์ํด์ ๋จน์ ๊ฒฝ์ฐ → ํ ์ธ๋ ์ ์ก ๊ฐ๊ฒฉ์ผ๋ก ์ ๊ณตํ๋ค.
- ์ด๋ฐฅ ์ข
๋ฅ ์ค 1๊ฐ๊ฐ ์ ํ ์ฟ ํฐ์ด ๋ฐํ๋๊ณ , k๊ฐ ์ฐ์์ผ๋ก ๋จน๋ ํ์ฌ ์ฐธ์ฌํ๋ฉด, ์ฟ ํฐ์ ์ ํ ์ด๋ฐฅ 1๊ฐ๊ฐ ๋ฌด๋ฃ๋ก ์ ๊ณต๋๋ค.
- ๋ง์ฝ ๊ทธ ์ฟ ํฐ ์ด๋ฐฅ์ด ๋ฒจํธ์ ์์ผ๋ฉด ๋ฐ๋ก ๋ง๋ค์ด์ ์ฃผ๊ฒ ๋๋ค.
- ์๋์ด ๋จน์ ์ ์๋ ์ด๋ฐฅ ๊ฐ์ง์์ ์ต๋๊ฐ์ ๊ตฌํด๋ผ.
<์์ด๋์ด>
ํ์ ํ๋ ๋ฒจํธ์ ์๋ ์ด๋ฐฅ์ด๋๊น ์ผ๋จ ๋ฆฌ์คํธ์ ๋ฃ์ด (์ธ๋ฑ์ค : 0~n-1)
์ฐ์๋ k๊ฐ ์ด๋ฐฅ ์ ํํ๊ธฐ
- ์ฐ์ํด์ k๊ฐ๋ฅผ ์ ํํ ๊ฑฐ์ผ.
- ์์์ ํ ์ง์ ์์ ๋ง์ด์ผ??
- ๊ทธ๋ฌ๋ฉด ๋๋ ์ด n๊ฐ์ ์์ ์ง์ ์ ์ ํํ ์ ์์ง.
- i๋ถํฐ i+k-1๋ฒ์งธ ๊น์ง ํฌํจ๋๊ฒ ์ง?
- ๊ทผ๋ฐ ํ์ ์ด๋ฐฅ์ด์ผ.
- 0,1,2,3,4,5 ์ด๋ ๊ฒ ์์ ๋, k=3
- 0,1,2 / 1,2,3 / .. / 4,5,0 / 5,0,1 /
- ์์ ์ธ๋ฑ์ค๊ฐ m์ผ ๋, ๋ ์ธ๋ฑ์ค๋ (m+k-1)%n
- ๊ทผ๋ฐ ๋๋ ํ์ ์ด๋ฐฅ ๊ธธ์ด๋ฅผ ๊ทธ๋๋ก ์ ์งํ๋ฉด์ ํ ๋ฐํด๋ง ๋๋ฉด์ k๊ฐ๊ฐ ์๋ ์ฐ์๋ ์์ด์ ๋ง๋ค๋ฉด ๋๋๊น arr ๋์๋ค๊ฐ arr ์์์๋ถํฐ k-1๊ฐ๋ฅผ ๋ถ์ด๋ฉด ๊ทธ๋ฅ ์ ํ ์ํํ ์ ์๋ค
⇒ left, right ์ฌ์ฉํด์ O(N)๋ง์ ํ์ํ๊ธฐ
์ ํํ ์ฐ์๋ k๊ฐ ์ด๋ฐฅ์ด max ๊ฐ์ง์์ธ์ง ๋ณด๊ธฐ
⇒ ๊ฐ O(N)์ ๋ด๋ถ ๋ก์ง์ผ๋ก ์กด์ฌํ๋ค.
- ์ค๋ณต๋ ์ซ์๋ค์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ํ์ธํด์ ์ ํํ k๊ฐ์ ์ด๋ฐฅ ๊ฐ์ง์ ๊ณ์ฐํ๊ธฐ
- setํด์ ํฌ๊ธฐ ๋ง๋ค๊ธฐ
- ์ฟ ํฐ์ ์๋ ์ด๋ฐฅ์ด ๊ฐ์ง์+1 ํ๊ฒ ๋ง๋๋์ง ํ์ธํ๊ธฐ
- ์ต์ข ๊ฐ์ง์๋ฅผ hq์ ๋ฃ๊ธฐ
์ต์ข ๊ฐ์ง์ ์ถ๋ ฅ
2 ≤ ๋ฒจํธ ์ ํ์ ์ด๋ฐฅ ์ ์ ์ N ≤ 3*10^4
2 ≤ ์ด๋ฐฅ ๊ฐ์ง ์ d ≤ 3*10^3
2 ≤ ์ฐ์ํด์ ๋จน๋ ์ ์ ์ k ≤ 3*10^3 (k≤N)
1 ≤ ์ฟ ํฐ ๋ฒํธ c ≤ d
1 ≤ ์ด๋ฐฅ ์ข ๋ฅ ๋ํ๋ด๋ ์ ์ ≤ d
์๊ฐ ์ ํ : 1์ด
์ ์ถ๋ ฅ
- ์ ๋ ฅ
8 30 4 30 # N, d, k, c 7 # ํ ์์น์์ ํ์ ๋ฐฉํฅ ๋ฐ๋ผ๊ฐ ๋ ๋์ฌ์ง ์ด๋ฐฅ ๋ฒํธ 9 7 30 2 7 9 25
- ์ถ๋ ฅ
5
๐ก์๊ณ ๋ฆฌ์ฆ ์ค๊ณ (์๋ ์ฝ๋)
- ํ์ ํ๋ ๋ฒจํธ์ ์๋ ์ด๋ฐฅ์ด๋๊น ์ผ๋จ ๋ฆฌ์คํธ์ ๋ฃ์ด (์ธ๋ฑ์ค : 0~n-1)
- ์ํ ๋ฆฌ์คํธ๋ก ์ฌ์ฉํ๋ ๊ฒ ์ฒ๋ผ ์ ํ ๋ฆฌ์คํธ๋ก ๋ง๋ค๊ธฐ
- ์ฐ์๋ k๊ฐ ์ด๋ฐฅ ์ ํํ๊ธฐ
- left๋ 0๋ถํฐ n๊น์ง ๋๋ค.
- right = left+k
- k_arr = set(dishes[left:right])
: ์ค๋ณต๋ ์ซ์๋ค ์ ๊ฑฐ - k_arr.add(c) ์ฟ ํฐ์ ์๋ ์ด๋ฐฅ์ด ๊ฐ์ง์+1 ํ๊ฒ ๋ง๋๋์ง ํ์ธํ๊ธฐ
- ์ต์ข ๊ฐ์ง์ len(k_arr)๋ฅผ hq์ ๋ฃ๊ธฐ
- left๋ 0๋ถํฐ n๊น์ง ๋๋ค.
- ⇒ left, right ์ฌ์ฉํด์ O(N)๋ง์ ํ์ํ๊ธฐ
- ์ต์ข ๊ฐ์ง์ ์ถ๋ ฅ
๐ก์ฝ๋
35772 KB | 2820 ms |
---|
import sys
import heapq
n,d,k,c = map(int, sys.stdin.readline().strip().split())
dishes = []
for _ in range(n): #O(N)
dishes.append(int(sys.stdin.readline().strip()))
dishes += dishes[:k-1]
res = []
for left in range(n): #O(N)
right = left+k
k_arr = set(dishes[left:right]) #O(k)
k_arr.add(c)
heapq.heappush(res, -len(k_arr)) #O(logk)
print(-res[0])
๐ก์๊ฐ ๋ณต์ก๋
O(Nk) = O(910^8)
⇒ ์ฅ ๊ทผ๋ฐ .. ์ ์๊ฐ ์ด๊ณผ๊ฐ ์ ๋์ง?
๐ก ๋ค๋ฅธ ํ์ด
ํ๋ฆฌ์ง ์์์ง๋ง ์๊ฐ ๋ณต์ก๋ ๊ณ์ฐ ์ ์์ด๊ฐ ๋ ํ๋ฅ ์ด ๋๊ธฐ ๋๋ฌธ์ ์๋ก์ฐ ํ์ด๋ฅผ ์๊ฐํด๋ณด์.
import sys
n, d, k, c = map(int, sys.stdin.readline().strip().split())
dishes = [int(sys.stdin.readline().strip()) for _ in range(n)]
dishes += dishes[:k-1] # ์ํ์ ์ ํ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด
sushi_count = {c: 1} # ์ฟ ํฐ ์ด๋ฐฅ์ ํญ์ ํฌํจ
max_types = 1
# ์ด๊ธฐ ์๋์ฐ ์ค์
for i in range(k):
sushi_count[dishes[i]] = sushi_count.get(dishes[i], 0) + 1
max_types = len(sushi_count)
# ์ฌ๋ผ์ด๋ฉ ์๋์ฐ ์ด๋
for i in range(1, n):
left = i - 1
right = i + k - 1
# ์ผ์ชฝ ๋ ์ด๋ฐฅ ์ ๊ฑฐ
sushi_count[dishes[left]] -= 1
if sushi_count[dishes[left]] == 0:
del sushi_count[dishes[left]]
# ์ค๋ฅธ์ชฝ ๋ ์ด๋ฐฅ ์ถ๊ฐ
sushi_count[dishes[right]] = sushi_count.get(dishes[right], 0) + 1
# ์ต๋ ์ข
๋ฅ ๊ฐ์ ๊ฐฑ์
max_types = max(max_types, len(sushi_count))
print(max_types)
๐ก ๋๋์ or ๊ธฐ์ตํ ์ ๋ณด
- ์ํ ๋ฆฌ์คํธ๋ฅผ k์ฉ ๋ฌถ์ด์ 1๋ฒ๋ง ์ํํ ๋ ์ ํ ๋ฆฌ์คํธ๋ก ๋ฐ๊พธ๋ ๋ฐฉ๋ฒ
- dishes += dishes[:k-1]
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ ์๊ณ ๋ฆฌ์ฆ๊ณผ ํฌํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฐจ์ด
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ
- ๊ฐ๋
- ๋ฆฌ์คํธ์ ํญ๋ชฉ์ ์์ฐจ์ ์ผ๋ก ํ์ํ ๋, ๊ณ ์ ๋ ํฌ๊ธฐ์ ์๋์ฐ๋ฅผ ์ด๋์ํค๋ฉด์ ์ฃผ์ด์ง ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ถ๋ถ์ ์ฐพ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
- ์๋์ฐ์ ํฌ๊ธฐ๋ ๊ณ ์ ๋์ด ์๊ฑฐ๋ ๊ฐ๋ณ์ ์ผ ์ ์์ต๋๋ค.
- ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ฃผ๋ก ์ฐ์๋ ๋ฐ์ดํฐ์ ์ต๋ํฉ, ์ต์๊ฐ, ์ค๊ฐ๊ฐ ๋ฑ์ ํจ์จ์ ์ผ๋ก ๊ณ์ฐํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- ์์
:๊ตฌ๊ฐ
์ ์ฌ์ฉํ ๋- ์ต๋ ํฉ ๊ตฌํ๊ธฐ: ๊ณ ์ ๋ ํฌ๊ธฐ์ ์๋์ฐ๋ฅผ ์ด์ฉํด ๋ฐฐ์ด ๋ด ์ฐ์๋ ํญ๋ชฉ๋ค์ ์ต๋ ํฉ์ ๊ตฌํ ์ ์์ต๋๋ค.
-
# ์์: ์ฃผ์ด์ง ๋ฐฐ์ด์์ ํฌ๊ธฐ๊ฐ k์ธ ๋ชจ๋ ์ฐ์ ๋ถ๋ถ ๋ฐฐ์ด์ ์ต๋ ํฉ์ ์ฐพ๋ ๋ฌธ์ def maxSum(arr, k): n = len(arr) if n < k: print("Invalid") return -1 # ์๋์ฐ์ ์ฒซ ๋ถ๋ถ์ ๊ณ์ฐ window_sum = sum(arr[:k]) max_sum = window_sum # ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ฅผ ์ด๋ for i in range(n - k): # ํ์ฌ ์๋์ฐ์์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ ๊ฑฐํ๊ณ ๋ค์ ์์๋ฅผ ์ถ๊ฐ window_sum = window_sum - arr[i] + arr[i + k] # ์ต๋ ํฉ ๊ฐฑ์ max_sum = max(max_sum, window_sum) return max_sum # ์ฌ๋ผ์ด๋ฉ ์๋์ฐ: ๊ณ ์ ๋ ํฌ๊ธฐ์ ์๋์ฐ๋ฅผ ์ด๋์ํค๋ฉฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ
- ์ค๋ณต ๋ฌธ์ ์๋ ๊ฐ์ฅ ๊ธด ๋ถ๋ถ ๋ฌธ์์ด ์ฐพ๊ธฐ: ๊ฐ๋ณ์ ์ธ ํฌ๊ธฐ์ ์๋์ฐ๋ฅผ ์ด์ฉํด ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ต๋ ๊ธธ์ด๋ฅผ ์ฐพ์ต๋๋ค.
- ๊ฐ๋
- ํฌ ํฌ์ธํฐ
- ๊ฐ๋
- ์ด ๋ ํฌ์ธํฐ๋ ๋ณดํต ๋ฐฐ์ด์ ์์๊ณผ ๋์์ ์์ํ๊ฑฐ๋ ๊ฐ์ ์์น์์ ์์ํ์ฌ ์๋ก๋ฅผ ํฅํด ์ด๋ํ๊ฑฐ๋ ๋ฉ์ด์ง๋ฉด์ ์ฃผ์ด์ง ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์๋ฅผ ์ฐพ์ต๋๋ค.
- ์ฃผ๋ก ์ ๋ ฌ๋ ๋ฐฐ์ด์์ ๋ ์์ ํฉ, ์ฐจ์ด, ๋น์จ ๋ฑ์ ๋ง์กฑํ๋ ์์๋ฅผ ์ฐพ์ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- ์์
:๋ ์
๋ฅผ ์ฌ์ฉํ ๋- ํฉ์ด ํน์ ๊ฐ์ ํด๋นํ๋ ๋ ์์ ์ฐพ๊ธฐ: ์ ๋ ฌ๋ ๋ฐฐ์ด์์ ๋ ํฌ์ธํฐ๋ฅผ ์ด์ฉํด ํฉ์ด ํน์ ๊ฐ์ ํด๋นํ๋ ์์๋ฅผ ํจ์จ์ ์ผ๋ก ์ฐพ์ ์ ์์ต๋๋ค.
-
# ์์: ์ ๋ ฌ๋ ๋ฐฐ์ด์์ ๋ ์์ ํฉ์ด ํน์ ๊ฐ์ ๋๋ฌํ๋ ์์ ์ฐพ๋ ๋ฌธ์ def twoSum(numbers, target): left, right = 0, len(numbers) - 1 # ๋ฐฐ์ด์ ์ ๋์์ ์์ํ๋ ๋ ํฌ์ธํฐ while left < right: current_sum = numbers[left] + numbers[right] # ํ์ฌ ๋ ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ์์์ ํฉ if current_sum == target: # ๋ชฉํ๊ฐ์ ๋๋ฌํ ๊ฒฝ์ฐ return [left + 1, right + 1] elif current_sum < target: # ํฉ์ด ๋ชฉํ๊ฐ๋ณด๋ค ์์ ๊ฒฝ์ฐ, ์ผ์ชฝ ํฌ์ธํฐ ์ด๋ left += 1 else: # ํฉ์ด ๋ชฉํ๊ฐ๋ณด๋ค ํฐ ๊ฒฝ์ฐ, ์ค๋ฅธ์ชฝ ํฌ์ธํฐ ์ด๋ right -= 1 return [] # ํฌ ํฌ์ธํฐ: ์กฐ๊ฑด์ ๋ฐ๋ผ ํฌ์ธํฐ๋ฅผ ์ด๋์ํค๋ฉฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ, ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฒ์์ ํฌ๊ธฐ๋ ๋ณํ ์ ์์
- ๋ฐฐ์ด์์์ ์ต์ ์ฐจ์ด ์ฐพ๊ธฐ: ๋ ํฌ์ธํฐ๋ฅผ ์ด์ฉํด ๋ฐฐ์ด ๋ด ๋ ์์ ๊ฐ์ ์ต์ ์ฐจ์ด๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
- ๊ฐ๋
- ์์ฝ
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ ์ฐ์๋ ๋ฐ์ดํฐ์ ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ถ๋ถ์ ์ฐพ์ ๋ ์ฌ์ฉ๋๋ฉฐ, ์๋์ฐ์ ํฌ๊ธฐ๊ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
ํฌ ํฌ์ธํฐ๋ ์ฃผ๋ก ์ ๋ ฌ๋ ๋ฐฐ์ด์์ ๋ ์์์ ๊ด๊ณ(ํฉ, ์ฐจ์ด ๋ฑ)๋ฅผ ๋ง์กฑํ๋ ์์๋ฅผ ์ฐพ์ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
์ฆ, ์๋์ฐ์ ํฌ์ธํฐ์ ์ฐจ์ด !
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ ์ฐ์๋ ๋ฐ์ดํฐ์ ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ถ๋ถ์ ์ฐพ์ ๋ ์ฌ์ฉ๋๋ฉฐ, ์๋์ฐ์ ํฌ๊ธฐ๊ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ
๋ฐ์ํ
'Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1644๋ฒ ์์์ ์ฐ์ ํฉ (0) | 2024.08.05 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ํฌ ํฌ์ธํฐ (0) | 2024.07.15 |
๋ฐฑ์ค 1744๋ฒ. ์ ๋ฌถ๊ธฐ (0) | 2024.07.01 |
[์ต๋จ๊ฑฐ๋ฆฌ] ํ๋ก์ด๋ ์์ฌ ์๊ณ ๋ฆฌ์ฆ (0) | 2024.06.17 |
[์ต๋จ๊ฑฐ๋ฆฌ] ๋ฒจ๋ง ํฌ๋ (3) | 2024.06.10 |