๐ก ๋ฌธ์ ์์ฝ
1๋ถํฐ N๊น์ง์ ์์ด์ด ์ฃผ์ด์ง๋ค.
์๋ก ๋ค๋ฅธ ๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ง ์ฐ์ ๋ถ๋ถ ์์ด(subarray)์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
- ์์ด A์ i๋ฒ์งธ ์์๋ถํฐ j๋ฒ์งธ ์์๊น์ง, ๋ชจ๋ ์๊ฐ ์๋ก ๋ค๋ฅด๋ฉด ํด๋น ๊ตฌ๊ฐ์ ํ๋๋ก ์ผ๋ค.
- X ≤ Y๋ฅผ ๋ง์กฑํ๋ ๋ชจ๋ (X, Y) ์์ ๋ํด ๊ตฌ๊ฐ์ ํ์ํ์ฌ, ์ค๋ณต ์๋ ๊ฒฝ์ฐ๋ง ์ธ์ผ ํ๋ค.
๐ง ๋ฌธ์ ๋ฐฐ๊ฒฝ
์ด ๋ฌธ์ ๋ ํฌ ํฌ์ธํฐ(two pointers) ๋๋ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ(sliding window) ์๊ณ ๋ฆฌ์ฆ์ ๋ํ์ ์ธ ์ ํ์ด๋ค.
- ์ฐ์๋ ๊ตฌ๊ฐ ๋ด์์ ์ค๋ณต์ด ์๋ ์ต๋ ๋ฒ์๋ฅผ ๋น ๋ฅด๊ฒ ํ์ํด์ผ ํ๋ค.
- ๋จ์ ์ด์ค ๋ฐ๋ณต๋ฌธ์ ์ฐ๋ฉด O(N²)์ผ๋ก ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ฏ๋ก,
- ํฌ์ธํฐ๋ฅผ ์ด๋์ํค๋ฉด์ ์ค๋ณต์ ๊ด๋ฆฌํ์ฌ O(N)์ผ๋ก ์ต์ ํํด์ผ ํ๋ค.
๐ ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ
๐ด ์ ์ฝ๋ (๋นํจ์จ์ )
import sys
input = sys.stdin.readline
N = int(input())
number_lst = list(map(int, input().split()))
count = 0
new_lst = []
flag = 0
for i in range(len(number_lst)):
if number_lst[i] in new_lst:
if flag == 0:
for j in range(len(new_lst) + 1):
count += j
flag = 1
else:
for j in range(len(new_lst)):
count += j
else:
new_lst.append(number_lst[i])
if flag == 0:
for j in range(len(new_lst) + 1):
count += j
else:
for j in range(len(new_lst)):
count += j
print(count)
๐ข ํ ์ฝ๋ (์ต์ ํ๋ ๋ฐฉ์)
import sys
input = sys.stdin.readline
N = int(input())
A = list(map(int, input().split()))
last_seen = {}
ans = 0
l = 0
for r in range(N):
x = A[r]
if x in last_seen and last_seen[x] >= l:
l = last_seen[x] + 1
last_seen[x] = r
ans += (r - l + 1)
print(ans)
โ ์๊ฐ ๋ณต์ก๋ ๋ถ์
| ๋จ๊ณ | ์ฐ์ฐ๋ | ๋ณต์ก๋ |
|---|---|---|
| ์ ๋ ฅ ์ฒ๋ฆฌ | N๊ฐ ์ฝ๊ธฐ | O(N) |
| last_seen ๊ด๋ฆฌ | ์ซ์๋ง๋ค 1ํ ์กฐํ ๋ฐ ๊ฐฑ์ | O(N) |
| ํฌ์ธํฐ ์ด๋ ๋ฐ ๋ต ๊ณ์ฐ | ๊ฐ ์์ 1ํ ์ฒ๋ฆฌ | O(N) |
์ต์ข ์๊ฐ ๋ณต์ก๋: O(N)
๐ ์ ๋ฆฌ
- ์ฒ์์๋ ๋ฆฌ์คํธ๋ก ์ค๋ณต ์ฒดํฌ๋ฅผ ํ์ฌ ์๊ฐ ๋ณต์ก๋๊ฐ ๋์๋ค.
- ์ดํ ๋์ ๋๋ฆฌ๋ก ๋ง์ง๋ง ๋ฑ์ฅ ์์น๋ฅผ ๊ธฐ๋กํ๋ ๋ฐฉ์์ผ๋ก ์ต์ ํํ์๋ค.
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ฅผ ํตํด ๊ตฌ๊ฐ์ ๊ด๋ฆฌํ๋ฉด ์๋ก ๋ค๋ฅธ ์์๋ก ๊ตฌ์ฑ๋ ๊ตฌ๊ฐ์ ๋น ๋ฅด๊ฒ ํ์ํ ์ ์๋ค.
- ์ด ๊ธฐ๋ฒ์ ๋ฌธ์์ด, ๋ฐฐ์ด, ํด์๋ฅผ ๋ค๋ฃจ๋ ๋ค์ํ ๋ฌธ์ ์๋ ์์ฉํ ์ ์๋ค.
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๋ฐฑ์ค 1043๋ฒ: ๊ฑฐ์ง๋ง(java) (1) | 2025.05.07 |
|---|---|
| ๋ฐฑ์ค 2075: N๋ฒ์งธ ํฐ ์(JAVA) (0) | 2025.05.06 |
| 22251๋ฒ: ๋น๋ฐ ํธ์(ํ์ด์ฌ) (0) | 2025.04.26 |
| ๋ฐฑ์ค 4179: ๋ถ!(ํ์ด์ฌ) (0) | 2025.04.26 |
| ๋ฐฑ์ค 1253: ์ข๋ค(ํ์ด์ฌ) (0) | 2025.04.25 |