๋ฌธ์ ์ค๋ช
[๋ณธ ๋ฌธ์ ๋ ์ ํ์ฑ๊ณผ ํจ์จ์ฑ ํ ์คํธ ๊ฐ๊ฐ ์ ์๊ฐ ์๋ ๋ฌธ์ ์ ๋๋ค.]
๊ฐ๋ฐ์ ์ถ์ ์ผ๋ก ์ธ๊ณ ์ต๊ณ ์ ๊ฐ๋ถ๊ฐ ๋ ์ดํผ์น๋ ์คํธ๋ ์ค๋ฅผ ๋ฐ์ ๋๋ฉด ์ด๋ฅผ ํ๊ธฐ ์ํด ์คํ๋ผ์ธ ๋งค์ฅ์ ์ผํ์ ํ๋ฌ ๊ฐ๊ณค ํฉ๋๋ค.
์ดํผ์น๋ ์ผํ์ ํ ๋๋ฉด ๋งค์ฅ ์ง์ด๋์ ํน์ ๋ฒ์์ ๋ฌผ๊ฑด๋ค์ ๋ชจ๋ ์น์ธ์ด ๊ตฌ๋งคํ๋ ์ต๊ด์ด ์์ต๋๋ค.
์ด๋ ๋ ์คํธ๋ ์ค๋ฅผ ํ๊ธฐ ์ํด ๋ณด์ ๋งค์ฅ์ ์ผํ์ ํ๋ฌ ๊ฐ ์ดํผ์น๋ ์ด์ ์ฒ๋ผ ์ง์ด๋์ ํน์ ๋ฒ์์ ๋ณด์์ ๋ชจ๋ ๊ตฌ๋งคํ๋ ํน๋ณํ ์๋ ๋ชฉ์ ์ ๋ฌ์ฑํ๊ณ ์ถ์์ต๋๋ค.
์ง์ด๋ ๋ชจ๋ ์ข
๋ฅ์ ๋ณด์์ ์ ์ด๋ 1๊ฐ ์ด์ ํฌํจํ๋ ๊ฐ์ฅ ์งง์ ๊ตฌ๊ฐ์ ์ฐพ์์ ๊ตฌ๋งค
์๋ฅผ ๋ค์ด ์๋ ์ง์ด๋๋ 4์ข ๋ฅ์ ๋ณด์(RUBY, DIA, EMERALD, SAPPHIRE) 8๊ฐ๊ฐ ์ง์ด๋ ์์์ ๋๋ค.
์ง์ด๋ ๋ฒํธ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
๋ณด์ ์ด๋ฆ | DIA | RUBY | RUBY | DIA | DIA | EMERALD | SAPPHIRE | DIA |
์ง์ด๋์ 3๋ฒ๋ถํฐ 7๋ฒ๊น์ง 5๊ฐ์ ๋ณด์์ ๊ตฌ๋งคํ๋ฉด ๋ชจ๋ ์ข ๋ฅ์ ๋ณด์์ ์ ์ด๋ ํ๋ ์ด์์ฉ ํฌํจํ๊ฒ ๋ฉ๋๋ค.
์ง์ด๋์ 3, 4, 6, 7๋ฒ์ ๋ณด์๋ง ๊ตฌ๋งคํ๋ ๊ฒ์ ์ค๊ฐ์ ํน์ ๊ตฌ๊ฐ(5๋ฒ)์ด ๋น ์ง๊ฒ ๋๋ฏ๋ก ์ดํผ์น์ ์ผํ ์ต๊ด์ ๋ง์ง ์์ต๋๋ค.
์ง์ด๋ ๋ฒํธ ์์๋๋ก ๋ณด์๋ค์ ์ด๋ฆ์ด ์ ์ฅ๋ ๋ฐฐ์ด gems๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ์ด๋ ๋ชจ๋ ๋ณด์์ ํ๋ ์ด์ ํฌํจํ๋ ๊ฐ์ฅ ์งง์ ๊ตฌ๊ฐ์ ์ฐพ์์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
๊ฐ์ฅ ์งง์ ๊ตฌ๊ฐ์ ์์ ์ง์ด๋ ๋ฒํธ์ ๋ ์ง์ด๋ ๋ฒํธ๋ฅผ ์ฐจ๋ก๋๋ก ๋ฐฐ์ด์ ๋ด์์ return ํ๋๋ก ํ๋ฉฐ, ๋ง์ฝ ๊ฐ์ฅ ์งง์ ๊ตฌ๊ฐ์ด ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด ์์ ์ง์ด๋ ๋ฒํธ๊ฐ ๊ฐ์ฅ ์์ ๊ตฌ๊ฐ์ return ํฉ๋๋ค.
์ ํ ์ฌํญ
- gems ๋ฐฐ์ด์ ํฌ๊ธฐ๋ 1 ์ด์ 100,000 ์ดํ์
๋๋ค.
- gems ๋ฐฐ์ด์ ๊ฐ ์์๋ ์ง์ด๋์ ๋์ด๋ ๋ณด์์ ๋ํ๋ ๋๋ค.
- gems ๋ฐฐ์ด์๋ 1๋ฒ ์ง์ด๋๋ถํฐ ์ง์ด๋ ๋ฒํธ ์์๋๋ก ๋ณด์์ด๋ฆ์ด ์ฐจ๋ก๋๋ก ์ ์ฅ๋์ด ์์ต๋๋ค.
- gems ๋ฐฐ์ด์ ๊ฐ ์์๋ ๊ธธ์ด๊ฐ 1 ์ด์ 10 ์ดํ์ธ ์ํ๋ฒณ ๋๋ฌธ์๋ก๋ง ๊ตฌ์ฑ๋ ๋ฌธ์์ด์ ๋๋ค.
์ ์ถ๋ ฅ ์
gems | result |
["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"] | [3, 7] |
["AA", "AB", "AC", "AA", "AC"] | [1, 3] |
["XYZ", "XYZ", "XYZ"] | [1, 1] |
["ZZZ", "YYY", "NNNN", "YYY", "BBB"] | [1, 5] |
์ ์ถ๋ ฅ ์ ์ค๋ช
์
์ถ๋ ฅ ์ #1
๋ฌธ์ ์์์ ๊ฐ์ต๋๋ค.
์
์ถ๋ ฅ ์ #2
3์ข
๋ฅ์ ๋ณด์(AA, AB, AC)์ ๋ชจ๋ ํฌํจํ๋ ๊ฐ์ฅ ์งง์ ๊ตฌ๊ฐ์ [1, 3], [2, 4]๊ฐ ์์ต๋๋ค.
์์ ์ง์ด๋ ๋ฒํธ๊ฐ ๋ ์์ [1, 3]์ return ํด์ฃผ์ด์ผ ํฉ๋๋ค.
์
์ถ๋ ฅ ์ #3
1์ข
๋ฅ์ ๋ณด์(XYZ)์ ํฌํจํ๋ ๊ฐ์ฅ ์งง์ ๊ตฌ๊ฐ์ [1, 1], [2, 2], [3, 3]์ด ์์ต๋๋ค.
์์ ์ง์ด๋ ๋ฒํธ๊ฐ ๊ฐ์ฅ ์์ [1, 1]์ return ํด์ฃผ์ด์ผ ํฉ๋๋ค.
์
์ถ๋ ฅ ์ #4
4์ข
๋ฅ์ ๋ณด์(ZZZ, YYY, NNNN, BBB)์ ๋ชจ๋ ํฌํจํ๋ ๊ตฌ๊ฐ์ [1, 5]๊ฐ ์ ์ผํฉ๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก [1, 5]๋ฅผ return ํด์ฃผ์ด์ผ ํฉ๋๋ค.
โป ๊ณต์ง - 2020๋ 7์ 21์ผ ํ ์คํธ์ผ์ด์ค๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
ํ์ด
- ๋ฐ๋ก ์นด์ดํฐ์ for๋ฌธ ์จ์ ํ์๋๋ฐ ํ ์ผ 6,7๋ฒ ์คํจ, ๋ฐ์ฏค ์๊ฐ ์ด๊ณผ ๋ฌ๋ค.
- ์ด๋ ๊ฒ ํธ๋ ๋ฌธ์ ๊ฐ ์๋์๋คใ ใ ใ
import collections
def solution(gems):
cnt_gems = collections.Counter(gems)
unique = len(cnt_gems)
if unique == 1:
return [1,1]
best = [0,0,100000]
for l in range(unique, len(gems)):
for i in range(len(gems)-l+1):
cnt_unique_gems = collections.Counter(gems[i:i+l])
if unique == len(cnt_unique_gems):
if best[2] > l:
best = [i+1,i+l,l]
break
if best == [0,0,100000]:
return [1,len(gems)]
else:
return [best[0],best[1]]
- ์๊ฐ ์ด๊ณผ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํด์ผ ํ๋...
- ์ต์ ํฌ๊ธฐ๋ก ์๋ผ์ ์ด๋ํ๋ฉด์ ๋จน๊ณ ์ธ๊ณ ํด์ผ๋๋?
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (0.41ms, 10.1MB)
ํ
์คํธ 2 ใ ํต๊ณผ (18.30ms, 10.1MB)
ํ
์คํธ 3 ใ ํต๊ณผ (450.13ms, 10.2MB)
ํ
์คํธ 4 ใ ํต๊ณผ (0.12ms, 10.2MB)
ํ
์คํธ 5 ใ ํต๊ณผ (0.05ms, 10.4MB)
ํ
์คํธ 6 ใ ํต๊ณผ (0.05ms, 10.2MB)
ํ
์คํธ 7 ใ ํต๊ณผ (0.11ms, 10.3MB)
ํ
์คํธ 8 ใ ํต๊ณผ (5066.25ms, 10.2MB)
ํ
์คํธ 9 ใ ํต๊ณผ (7630.45ms, 10.3MB)
ํ
์คํธ 10 ใ ํต๊ณผ (5070.61ms, 10.3MB)
ํ
์คํธ 11 ใ ์คํจ (์๊ฐ ์ด๊ณผ)
ํ
์คํธ 12 ใ ์คํจ (์๊ฐ ์ด๊ณผ)
ํ
์คํธ 13 ใ ์คํจ (์๊ฐ ์ด๊ณผ)
ํ
์คํธ 14 ใ ์คํจ (์๊ฐ ์ด๊ณผ)
ํ
์คํธ 15 ใ ์คํจ (์๊ฐ ์ด๊ณผ)
- ์ง๋ ์ด ํ๋จน๊ณ ๋ฅ์ธ๋ ๋ฐฉ์์ผ๋ก ํ๋๋ฐ ๋น ๋ฅด๊ณ ์ ํํ๊ตฐ... ํจ์จ์ฑ์์ ์๋๊ฐ ์กฐ๊ธ ์์ฝ๋ค.
- ์๋, ์ ์๋ช ์นญ์ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ผ๊ณ ํ๋ค.
def solution(gems):
answer = []
unique = len(set(gems))
collected_gems = {}
head, tail = 0, 0
while head < len(gems):
try:
collected_gems[gems[head]] += 1
except:
collected_gems[gems[head]] = 1
if len(collected_gems) == unique: # print(unique,tail,head,collected_gems)
answer.append([tail,head])
while len(collected_gems) == unique and tail <= head - unique:
tail += 1
collected_gems[gems[tail-1]] -= 1
if collected_gems[gems[tail-1]] == 0:
del collected_gems[gems[tail-1]]
if len(collected_gems) == unique: # print(unique,tail,head,collected_gems)
answer.append([tail,head])
head += 1
answer.sort(key=lambda x:(x[1]-x[0],x[0]))
return [answer[0][0]+1,answer[0][1]+1]
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (0.03ms, 10.2MB)
ํ
์คํธ 2 ใ ํต๊ณผ (0.15ms, 10.4MB)
ํ
์คํธ 3 ใ ํต๊ณผ (0.56ms, 10.2MB)
ํ
์คํธ 4 ใ ํต๊ณผ (0.28ms, 10.1MB)
ํ
์คํธ 5 ใ ํต๊ณผ (1.40ms, 10.2MB)
ํ
์คํธ 6 ใ ํต๊ณผ (0.02ms, 9.97MB)
ํ
์คํธ 7 ใ ํต๊ณผ (0.02ms, 10.3MB)
ํ
์คํธ 8 ใ ํต๊ณผ (0.45ms, 10.3MB)
ํ
์คํธ 9 ใ ํต๊ณผ (1.22ms, 10.3MB)
ํ
์คํธ 10 ใ ํต๊ณผ (0.53ms, 10.3MB)
ํ
์คํธ 11 ใ ํต๊ณผ (0.94ms, 10.3MB)
ํ
์คํธ 12 ใ ํต๊ณผ (1.87ms, 10.3MB)
ํ
์คํธ 13 ใ ํต๊ณผ (4.57ms, 10.4MB)
ํ
์คํธ 14 ใ ํต๊ณผ (1.38ms, 10.4MB)
ํ
์คํธ 15 ใ ํต๊ณผ (5.44ms, 11.1MB)
ํจ์จ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (6.33ms, 11.3MB)
ํ
์คํธ 2 ใ ํต๊ณผ (6.86ms, 11.2MB)
ํ
์คํธ 3 ใ ํต๊ณผ (20.44ms, 14.1MB)
ํ
์คํธ 4 ใ ํต๊ณผ (9.97ms, 11.8MB)
ํ
์คํธ 5 ใ ํต๊ณผ (31.76ms, 16.5MB)
ํ
์คํธ 6 ใ ํต๊ณผ (42.48ms, 18MB)
ํ
์คํธ 7 ใ ํต๊ณผ (41.93ms, 19.5MB)
ํ
์คํธ 8 ใ ํต๊ณผ (51.19ms, 20.5MB)
ํ
์คํธ 9 ใ ํต๊ณผ (66.10ms, 22.9MB)
ํ
์คํธ 10 ใ ํต๊ณผ (75.55ms, 24.1MB)
ํ
์คํธ 11 ใ ํต๊ณผ (75.80ms, 25.2MB)
ํ
์คํธ 12 ใ ํต๊ณผ (33.92ms, 16MB)
ํ
์คํธ 13 ใ ํต๊ณผ (50.27ms, 20MB)
ํ
์คํธ 14 ใ ํต๊ณผ (129.32ms, 34.5MB)
ํ
์คํธ 15 ใ ํต๊ณผ (119.82ms, 34.2MB)
- ๊ณ ์์ ํ์ด.
- ๋น ๋ฅด๋ค... ํธ์ฅ... ๋ํดํธ๋ํธ๋ ๊ณต๋ถํด์ผํ๋ ค๋
from collections import defaultdict
def solution(gems):
answer = [0, len(gems)]
left, right = 0, 0
set_gems_len = len(set(gems))
dict = defaultdict(int)
dict[gems[left]] = 1
while left < len(gems) and right < len(gems):
if len(dict) == set_gems_len:
if right - left < answer[1] - answer[0]:
answer = [left, right]
dict[gems[left]] -= 1
if dict[gems[left]] == 0:
del(dict[gems[left]])
left += 1
else:
right += 1
if right >= len(gems):
break
dict[gems[right]] += 1
return [answer[0]+1, answer[1]+1]
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (0.02ms, 10.2MB)
ํ
์คํธ 2 ใ ํต๊ณผ (0.08ms, 10.2MB)
ํ
์คํธ 3 ใ ํต๊ณผ (0.43ms, 10.2MB)
ํ
์คํธ 4 ใ ํต๊ณผ (0.49ms, 10.1MB)
ํ
์คํธ 5 ใ ํต๊ณผ (0.44ms, 10.2MB)
ํ
์คํธ 6 ใ ํต๊ณผ (0.01ms, 10.3MB)
ํ
์คํธ 7 ใ ํต๊ณผ (0.02ms, 10.4MB)
ํ
์คํธ 8 ใ ํต๊ณผ (0.44ms, 10.1MB)
ํ
์คํธ 9 ใ ํต๊ณผ (0.70ms, 10.2MB)
ํ
์คํธ 10 ใ ํต๊ณผ (0.58ms, 10.1MB)
ํ
์คํธ 11 ใ ํต๊ณผ (0.68ms, 10.2MB)
ํ
์คํธ 12 ใ ํต๊ณผ (1.20ms, 10.2MB)
ํ
์คํธ 13 ใ ํต๊ณผ (1.58ms, 10.4MB)
ํ
์คํธ 14 ใ ํต๊ณผ (1.27ms, 10.5MB)
ํ
์คํธ 15 ใ ํต๊ณผ (3.33ms, 10.3MB)
ํจ์จ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (4.35ms, 10.7MB)
ํ
์คํธ 2 ใ ํต๊ณผ (5.88ms, 10.5MB)
ํ
์คํธ 3 ใ ํต๊ณผ (11.67ms, 11.1MB)
ํ
์คํธ 4 ใ ํต๊ณผ (10.05ms, 12MB)
ํ
์คํธ 5 ใ ํต๊ณผ (21.66ms, 11.9MB)
ํ
์คํธ 6 ใ ํต๊ณผ (25.31ms, 12.2MB)
ํ
์คํธ 7 ใ ํต๊ณผ (30.02ms, 12.7MB)
ํ
์คํธ 8 ใ ํต๊ณผ (34.54ms, 12.9MB)
ํ
์คํธ 9 ใ ํต๊ณผ (36.01ms, 13.4MB)
ํ
์คํธ 10 ใ ํต๊ณผ (44.17ms, 13.6MB)
ํ
์คํธ 11 ใ ํต๊ณผ (50.84ms, 14.4MB)
ํ
์คํธ 12 ใ ํต๊ณผ (32.92ms, 15.5MB)
ํ
์คํธ 13 ใ ํต๊ณผ (46.95ms, 16.2MB)
ํ
์คํธ 14 ใ ํต๊ณผ (71.37ms, 17MB)
ํ
์คํธ 15 ใ ํต๊ณผ (75.91ms, 17.8MB)
- ์นด์ดํฐ ์ฌ์ฉ...
- ์ฐใ ์์คใ กใ ์ฐ!
- ๋ ์์ง ๋ฉ์๋ค.
from collections import Counter
def solution(gems):
ans = []
kinds = len(set(gems))
counter = Counter()
start = 0
for end in range(len(gems)):
counter[gems[end]] += 1
end += 1
while len(counter) == kinds:
counter[gems[start]] -= 1
if counter[gems[start]] == 0:
del counter[gems[start]]
start += 1
ans.append([start, end])
return sorted(ans, key = lambda x: (x[1]-x[0], x[0]))[0]
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (0.05ms, 10.3MB)
ํ
์คํธ 2 ใ ํต๊ณผ (0.11ms, 10.2MB)
ํ
์คํธ 3 ใ ํต๊ณผ (0.34ms, 10.1MB)
ํ
์คํธ 4 ใ ํต๊ณผ (0.24ms, 10.3MB)
ํ
์คํธ 5 ใ ํต๊ณผ (0.70ms, 10.3MB)
ํ
์คํธ 6 ใ ํต๊ณผ (0.02ms, 10.2MB)
ํ
์คํธ 7 ใ ํต๊ณผ (0.04ms, 10.3MB)
ํ
์คํธ 8 ใ ํต๊ณผ (0.44ms, 10.4MB)
ํ
์คํธ 9 ใ ํต๊ณผ (0.94ms, 10.4MB)
ํ
์คํธ 10 ใ ํต๊ณผ (0.44ms, 10.2MB)
ํ
์คํธ 11 ใ ํต๊ณผ (0.96ms, 10.5MB)
ํ
์คํธ 12 ใ ํต๊ณผ (1.58ms, 10.5MB)
ํ
์คํธ 13 ใ ํต๊ณผ (2.18ms, 10.6MB)
ํ
์คํธ 14 ใ ํต๊ณผ (1.16ms, 10.5MB)
ํ
์คํธ 15 ใ ํต๊ณผ (8.78ms, 10.9MB)
ํจ์จ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (6.09ms, 11.3MB)
ํ
์คํธ 2 ใ ํต๊ณผ (6.37ms, 11.6MB)
ํ
์คํธ 3 ใ ํต๊ณผ (20.21ms, 14.3MB)
ํ
์คํธ 4 ใ ํต๊ณผ (8.59ms, 11.9MB)
ํ
์คํธ 5 ใ ํต๊ณผ (30.92ms, 16.5MB)
ํ
์คํธ 6 ใ ํต๊ณผ (40.99ms, 18.1MB)
ํ
์คํธ 7 ใ ํต๊ณผ (40.22ms, 19.8MB)
ํ
์คํธ 8 ใ ํต๊ณผ (50.86ms, 20.8MB)
ํ
์คํธ 9 ใ ํต๊ณผ (67.12ms, 23.4MB)
ํ
์คํธ 10 ใ ํต๊ณผ (71.15ms, 24.7MB)
ํ
์คํธ 11 ใ ํต๊ณผ (73.88ms, 25.5MB)
ํ
์คํธ 12 ใ ํต๊ณผ (31.28ms, 15.9MB)
ํ
์คํธ 13 ใ ํต๊ณผ (50.15ms, 20.3MB)
ํ
์คํธ 14 ใ ํต๊ณผ (122.80ms, 35.2MB)
ํ
์คํธ 15 ใ ํต๊ณผ (115.90ms, 34.7MB)