|
์ฝ๋ ์์ฑํ๊ธฐ
def solution(gems) :
answer=[0, len(gems)-1]
gem_cnt=len(set(gems))
gem_dic={gems[0]:1}
start, end=0, 0
while start<len(gems) and end<len(gems) :
if len(gem_dic)==gem_cnt :
if (end-start)<answer[1]-answer[0] :
answer=[start, end]
if gem_dic[gems[start]]==1 :
del gem_dic[gems[start]]
else:
gem_dic[gems[start]]-=1
start+=1
else:
end+=1
if end==len(gems):
break
gem_dic[gems[end]]=gem_dic.get(gems[end], 0)+1
answer[0]+=1
answer[1]+=1
return answer
Python
๋ณต์ฌ
|
์ฝ๋ ์ค๋ช
ํ๊ธฐ
gem_cnt : ๋ณด์ ์ข
๋ฅ ๊ฐ์
gem_dic : ์ ํํ ๊ตฌ๊ฐ์ ์๋ ๋ณด์ ์ข
๋ฅ์ ํด๋น ๋ณด์์ ๊ฐ์
1.
answer ๋ฆฌ์คํธ์ ์ด๊ธฐ๊ฐ์ ์ ์ฒด ๊ตฌ๊ฐ์ผ๋ก ์ค์ ํ๋ค.
2.
gem_dic์ ๊ธธ์ด๊ฐ ๋ณด์ ์ข
๋ฅ ๊ฐ์์ ๊ฐ์ผ๋ฉด ๋ชจ๋ ์ข
๋ฅ์ ๋ณด์์ ๋ค ๊ฐ๊ณ ์๋ ์ํ์ด๋ค.
a.
ํ์ฌ ๊ตฌ๊ฐ์ ๊ธธ์ด๊ฐ answer๋ณด๋ค ์์ผ๋ฉด ๊ฐ์ ๊ฐฑ์ ํด์ค๋ค.
b.
์ต์๊ตฌ๊ฐ์ ์ฐพ๊ธฐ ์ํด start๋ฅผ 1 ์ฆ๊ฐ์ํจ๋ค. ์ฆ๊ฐ์ํค๊ธฐ ์ ์ gem_dic์ start ์์น์ ๋ณด์์ ํ๋ ๋นผ์ค๋ค
3.
gem_dic์ ๊ธธ์ด๊ฐ ๋ณด์ ์ข
๋ฅ์ ๋ค๋ฅด๋ฉด ๋ ํฐ ๊ตฌ๊ฐ์ ํ์ธํด์ผํ๋ฏ๋ก end๋ฅผ 1 ์ฆ๊ฐ์ํจ๋ค,
a.
์ด๋ end๊ฐ gems ๋ฒ์ ๋ฐ์ด๋ฉด ๋ฐ๋ณต๋ฌธ์ ์ข
๋ฃํ๋ค.
b.
end ์์น์ ๋ณด์์ gem_dic์์ 1 ์ฆ๊ฐ์์ผ์ผํ๋ค.
4.
2~3๋ฒ์ start์ end๊ฐ gems ๋ฆฌ์คํธ ๋ฒ์ ์์ ์์ผ๋ฉด ๊ณ์ ๋ฐ๋ณตํ๋ค.
5.
๊ตฌ๊ฐ์ 1๋ถํฐ ์์ํด์ผํ๋ฏ๋ก 1์ฆ๊ฐ์ํค๊ณ ๋ฐํํ๋ค.