๋ฌธ์ ์ค๋ช
์์ฐ๋ ์ฒํ์ ์ผ ์์ฐ๋ํ๋ฅผ ์๋๊ณ ์์ต๋๋ค. ์์ฐ๋ณด๋ค๋ ์๊ธฐ์ ์ผ๊ฐ๊ฒฌ์ด ์๋ ์์ฐ๋ ๊ตฌ๊ตฌ๋จ์ ํ์ฅํ์ฌ ์ต์ต๋จ์ ๋ง๋ค๊ณ ์ธ์๋ฒ๋ฆฌ๊ธฐ๋ก ํ์์ต๋๋ค.
์ต์ต๋จ์ 1์ต x 1์ต ํฌ๊ธฐ์ ํ๋ ฌ์
๋๋ค. ์ต์ต๋จ์ ์ธ์ฐ๋ ์์ฐ๋ ์น๊ตฌ ์์ฐ์๊ฒ ํด์ฆ๋ฅผ ๋ด๋ฌ๋ผ๊ณ ๋ถํํ์์ต๋๋ค.
์์ฐ์ ํ๋ฒํ๊ฒ ๋ฌธ์ ๋ฅผ ๋ด๋ด์ผ ์์ฐ๊ฐ ๋๋ฌด ์ฝ๊ฒ ๋งํ๊ธฐ ๋๋ฌธ์ ์ข ์ด๋ ต๊ฒ ํด์ฆ๋ฅผ ๋ด๋ณด๋ ค๊ณ ํฉ๋๋ค. ์ ๋นํ ์ e๋ฅผ ๋จผ์ ์ ํ์ฌ ์๋ ค์ฃผ๊ณ e ์ดํ์ ์์์ ์ s๋ฅผ ์ฌ๋ฌ ๊ฐ ์๊ธฐํฉ๋๋ค. ์์ฐ๋ ๊ฐ s์ ๋ํด์ s๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ e ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์ค์์ ์ต์ต๋จ์์ ๊ฐ์ฅ ๋ง์ด ๋ฑ์ฅํ ์๋ฅผ ๋ตํด์ผ ํฉ๋๋ค. ๋ง์ฝ ๊ฐ์ฅ ๋ง์ด ๋ฑ์ฅํ ์๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด ๊ทธ ์ค ๊ฐ์ฅ ์์ ์๋ฅผ ๋ตํด์ผ ํฉ๋๋ค.
์์ฐ์ ์์ฐ๊ฐ ์ ๋ต์ ๋งํ๋์ง ํ์ธํ๊ธฐ ์ํด ๋น์ ์๊ฒ ํ๋ก๊ทธ๋จ ์ ์์ ์๋ขฐํ์์ต๋๋ค. e์ s์ ๋ชฉ๋ก starts๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋ ๊ฐ ํด์ฆ์ ๋ต ๋ชฉ๋ก์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ ์ฌํญ
- 1 ≤ e ≤ 5,000,000
- 1 ≤ starts์ ๊ธธ์ด ≤ min {e,100,000}
- 1 ≤ starts์ ์์ ≤ e
- starts์๋ ์ค๋ณต๋๋ ์์๊ฐ ์กด์ฌํ์ง ์์ต๋๋ค.
์ ์ถ๋ ฅ ์
e | starts | result |
8 | [1,3,7] | [6,6,8] |
์ ์ถ๋ ฅ ์ ์ค๋ช
์ต์ต๋จ์์ 1 ~ 8์ด ๋ฑ์ฅํ๋ ํ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1๋ฒ ๋ฑ์ฅ : 1
2๋ฒ ๋ฑ์ฅ : 2, 3, 5, 7
3๋ฒ ๋ฑ์ฅ : 4
4๋ฒ ๋ฑ์ฅ : 6, 8
[1, 8] ๋ฒ์์์๋ 6๊ณผ 8์ด ๊ฐ๊ฐ 4๋ฒ์ฉ ๋ฑ์ฅํ์ฌ ๊ฐ์ฅ ๋ง์๋ฐ 6์ด ๋ ์์ ์์ด๋ฏ๋ก 6์ด ์ ๋ต์
๋๋ค.
[3, 8] ๋ฒ์์์๋ ์์ ๊ฐ์ผ๋ฏ๋ก 6์ด ์ ๋ต์
๋๋ค.
[7, 8] ๋ฒ์์์๋ 7์ 2๋ฒ, 8์ 4๋ฒ ๋ฑ์ฅํ๋ฏ๋ก 8์ด ์ ๋ต์
๋๋ค.
ํ์ด
- ํ๋ก๊ทธ๋๋จธ์ค ์๊ณ ๋ฆฌ์ฆ ์ฝ๋ฉํ ์คํธ ์ฐ์ต ๋ฌธ์ ๋ค์ด ํ๋ค๋ณด๋๊น ๋ซ๋ซ๊ฐ ๋๋ ํ๋ฅ ์ด๋ ์์๋? ์๋๋ฉด ์ฝ์๋? ๊ฐ์ ๋ฌธ์ ๋ค์ด ๋ง์ด ๋์ค๊ณ , ์ด๊ฑด ๊ทธ๋ฅ ์ํ ๋ฌธ์ ์๋๋? ๊ฐ์ ์๊ฐ์ ํ๊ฒ ๋จ.
- ์ง์ง ์ฝ๋ฉ ์ค๋ ฅ์ผ๋ก ํ ์คํธํ๋ ๊ฑฐ๋ฉด, ์ต์ต๋จ ๋ง๋ ๋ค์์ ์ํ๋ ์นด์ดํ ํด์ ๊ฒฐ๊ณผ๋ฅผ ๋ฝ์๋ด๊ฒ ์ง๋ง, ์ง๊ธ ์ด๋ฐ ๋ฌธ์ ๋ค์ ๊ทธ์ชฝ๋ณด๋ค๋ ์ํ์ผ๋ก ํ์ด์ผ ์๋๋ ๋ ์๋์ค๊ณ , ์ฝ๋๋ ๋ ์งง์์ง๊ณ ๊ทธ๋ ์ง ์์๊น? ์๊ฐ๋๋ค.
- ์ด๊ฑฐ ๋ฑ ๋ด๋... ๋ญ์ง ์ ๊ฒ ๊ฐ์ง ์๋? ์ํฌ์๋ผ ์ซ์๋ก๋ ์ค๋ช ๋ชปํด๋ ๊ทธ๋ฆผ์ผ๋ก๋ ์ค๋ช ํ ์ ์๋ค.
- ๊ทผ๋ฐ ๋ฌธ์ ์ ํ์ฌํญ์ ๋ณด๋ฉด ์ต์ต๋จ์ด๋ผ๊ธธ๋ ์ตx์ต์ธ ์ค ์์๋๋ฐ,
- 1 ≤ e ≤ 5,000,000
- e๋ 500๋ง๊น์ง๋ค. ์ฆ, ์ต์ต๋จ์ด ์๋๋ผ 5๋ฐฑ๋งx5๋ฐฑ๋ง๋จ
- ๊ทธ๋ฆฌ๊ณ starts ๋ฐฐ์ด์ ๊ธธ์ด๋ ์ต์ 10๋ง.
- 1 ≤ starts์ ๊ธธ์ด ≤ min {e,100,000}
- 10๋ง๊ฐ์ ๋ฐฐ์ด์ ์นด์ดํ ํ๋ค? ๋น๊ทผ ์๊ฐ ์ด๊ณผ๋ค.
- ๊ทธ๋ฌ๋ฉด ๋ฐฉ๋ฒ์ ๋ญ๋ค? ์ผ๋ฐํญ์ ์ฐพ๋ ์ ๋ฐ์ ์๋ค.
- 1๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ : 1x1
- 2๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ : 1x1,2x2
- 3๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ : 1x1,2x2,3x2
- 4๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ : 1x1,2x2,3x2,4x3
- 5๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ : 1x1,2x2,3x2,4x3,5x2
- 6๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ : 1x1,2x2,3x2,4x3,5x2,6x4
- 7๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ : 1x1,2x2,3x2,4x3,5x2,6x4,7x2
- 8๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ : 1x1,2x2,3x2,4x3,5x2,6x4,7x2,8x4
- 9๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ : 1x1,2x2,3x2,4x3,5x2,6x4,7x2,8x4,9x3
- 10๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ : 1x1,2x2,3x2,4x3,5x2,6x4,7x2,8x4,9x3,10x4
- ๊ท์น์ ๋ชจ๋ฅด๊ฒ ์ด.... ใ
.ใ
- 1, 2, 2, 3, 2, 4, 2, 4, 3, 4, ....
- ์ฝ์์ ๊ฐฏ์๋ฅผ ๊ตฌํ๋ ๊ณต์ ๊ฐ์ ๊ฑด ์๋...?
- ๋ณผํ๋ ์ํ... ๋์์ค์.
- ์๋ค. ๋๋ฆฌํด๋ ์์ฑ ํจ์
- https://kr.mathworks.com/help/signal/ref/diric.html
- ํ์ง๋ง ์ฝ์ง ์๋ค. ใ ใ ใ
- ์ํฌ์๋ ์๋๋ค. ใ .ใ
- ํ์ด์ฌ ์ฝ๋๋ ์์ผ๋ ๋๊ฐ๋ง, ๋ก๊ทธ๊ฐ๋ง ๋ชจ๋์ ์ํฌํธํด์ผ ํฉ๋๋ค.
- ์ผ๋ฐ ์์ฑ ๊ธฐ๋ฅ
- ์ฌ๊ธฐ๋ ψ๊ธฐํธ์, (0) ๊ฐ์ ์๋ฏธ๋ฅผ ์ด๋ป๊ฒ ์ฝ๋๋ก ์ฎ๊ฒจ์ผ ํ ์ง ๋ชจ๋ฅด๊ฒ ์ผ๋... ๊ฑฐ์ ํฌ๊ธฐ ์ํ.
- sum_(n=0)^∞a_nx^n = (ψ_x^(0)(1) + log(1 - x))/log(x)
- ๋ํ์ด๋ ์ฌ์ดํ์ด๋ฅผ ์ฐ์ง ์๊ณ ํ ์ ์ ๋ฐฉ๋ฒ์ ์์๊น?
- ์ ๊น? ํ๋ก๊ทธ๋๋จธ์ค์์ ๋ํ์ด ์ฐ๋ ์ฌ๋ ๋ดค๋๋ฐ? ํ ...
- ๋๋ฆฌํด๋ ํ๋ฅ ๋ถํฌ๋ง ๋๋ค... ๊ทธ๋ฅ ๋๋คํ ๊ฐ์ด ๋์จ๋ค.
- ์ํผ ๊ณต๋ถ๊ฐ ๋์๋ค.
- ์๊ทธ๋ง ์ํธ์ค, ํ์ฐ ์ํธ์ค ๋ฑ์ผ๋ก ๋ถ๋ฆฌ๊ณ ,
- ์์ด An = DivisorSum[n, 1&]
- ์ฆ, n์ ์ฝ์์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ ์์ด์ด๋ผ๊ณ ํ๋ค.
- ์ ๊น? ํ๋ก๊ทธ๋๋จธ์ค์์ ๋ํ์ด ์ฐ๋ ์ฌ๋ ๋ดค๋๋ฐ? ํ ...
- ํฌ๊ธฐ๋ค.
- ์ญ์ ๋๋ ๋ญ๋ค?
- ๋ฌด์ง์ฑ์ด๋ค!
def divisor_sum(n):
divisors = set()
divisors.add(1)# 1์ ๋ชจ๋ ์์ ์ฝ์์ด๋ฏ๋ก ๋ฏธ๋ฆฌ ์ถ๊ฐํด๋๋ค
for i in range(2, int(n**0.5)+1):
if n % i == 0:
divisors.add(i)
if i != n // i:
divisors.add(n // i)
divisors.add(n) # ์๊ธฐ ์์ ๋ ์ฝ์์ด๋ฏ๋ก ์ถ๊ฐํด์ค๋ค
return len(divisors)
def solution(e, starts):
answer = []
sequence_of_numbers_of_divisors = []
m = min(starts)
leng = e+1 - m
for i in reversed(range(m, e+1)):
sequence_of_numbers_of_divisors.append(divisor_sum(i))
#print(sequence_of_numbers_of_divisors)
for s in starts:
temp, tmax = 0, 0
for i in range(e-s+1):
if tmax <= sequence_of_numbers_of_divisors[i]:
temp = e-i
tmax = sequence_of_numbers_of_divisors[i]
#print(e-i,":",sequence_of_numbers_of_divisors[i],end=", ")
#print("")
answer.append(temp)
return answer
ํ
์คํธ 1
์
๋ ฅ๊ฐ ใ 8, [1, 3, 7]
๊ธฐ๋๊ฐ ใ [6, 6, 8]
์คํ ๊ฒฐ๊ณผ ใ ํ
์คํธ๋ฅผ ํต๊ณผํ์์ต๋๋ค.
- ์ ์ง ์๋ ์๋์ฌ ๊ฒ ๊ฐ๋ค.
- ์ญ์...
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (0.02ms, 10.1MB)
ํ
์คํธ 2 ใ ํต๊ณผ (0.03ms, 10.4MB)
ํ
์คํธ 3 ใ ํต๊ณผ (0.18ms, 10.3MB)
ํ
์คํธ 4 ใ ํต๊ณผ (1.71ms, 10.1MB)
ํ
์คํธ 5 ใ ํต๊ณผ (6.53ms, 10.4MB)
ํ
์คํธ 6 ใ ํต๊ณผ (186.16ms, 10.2MB)
ํ
์คํธ 7 ใ ํต๊ณผ (292.61ms, 10.3MB)
ํ
์คํธ 8 ใ ํต๊ณผ (9071.45ms, 11.1MB)
ํ
์คํธ 9 ใ ์คํจ (์๊ฐ ์ด๊ณผ)
ํ
์คํธ 10 ใ ์คํจ (์๊ฐ ์ด๊ณผ)
- ๋์ถฉ ์ด๋ ๊ฒ ํ๋ฉด ๋ ๊น ์ถ์์ง๋ง (์๋๋ง ์๊ณ ์ถ์์) ๋ง์ฐฌ๊ฐ์ง๋ก ์๊ฐ ์ด๊ณผ
def divisor_sum(n):
divisors = set()
divisors.add(1)# 1์ ๋ชจ๋ ์์ ์ฝ์์ด๋ฏ๋ก ๋ฏธ๋ฆฌ ์ถ๊ฐํด๋๋ค
for i in range(2, int(n**0.5)+1):
if n % i == 0:
divisors.add(i)
if i != n // i:
divisors.add(n // i)
divisors.add(n) # ์๊ธฐ ์์ ๋ ์ฝ์์ด๋ฏ๋ก ์ถ๊ฐํด์ค๋ค
return len(divisors)
def solution(e, starts):
answer = []
sequence_of_numbers_of_divisors = []
m = min(starts)
leng = e+1 - m
for i in reversed(range(m, e+1)):
sequence_of_numbers_of_divisors.append(divisor_sum(i))
#print(sequence_of_numbers_of_divisors)
copied_starts = starts.copy()
copied_starts.sort(reverse=True)
#print(copied_starts) ํฐ ์๋ถํฐ
x, temp, tmax = 0, 0, 0
for i in range(e-m+1):
if tmax <= sequence_of_numbers_of_divisors[i]:
temp = e-i
tmax = sequence_of_numbers_of_divisors[i]
if copied_starts[x] == e-i:
answer.append(temp)
x += 1
#print(copied_starts, starts)
return answer
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (0.02ms, 10.4MB)
ํ
์คํธ 2 ใ ์คํจ (0.05ms, 10.2MB)
ํ
์คํธ 3 ใ ์คํจ (0.17ms, 10.2MB)
ํ
์คํธ 4 ใ ์คํจ (0.88ms, 10.1MB)
ํ
์คํธ 5 ใ ์คํจ (3.59ms, 10.2MB)
ํ
์คํธ 6 ใ ์คํจ (21.55ms, 10.2MB)
ํ
์คํธ 7 ใ ์คํจ (73.95ms, 10.5MB)
ํ
์คํธ 8 ใ ์คํจ (435.30ms, 10.9MB)
ํ
์คํธ 9 ใ ์คํจ (์๊ฐ ์ด๊ณผ)
ํ
์คํธ 10 ใ ์คํจ (์๊ฐ ์ด๊ณผ)
- ๋ชจ๋ ์ฝ์์ ๊ฐฏ์๋ฅผ ๊ตฌํ๋ ๋ฐฉ์์ผ๋ก ํ๋ฉด ์๋๋ ๋ด...
- ์ฌ๊ธฐ๊น์ง 11์ 50๋ถ.
- ์ฝ์์ ๊ฐฏ์ ๊ตฌํ๋ ๋ฌธ์ ๊ทธ๋ง ์ข ๋์์ผ๋ฉด ์ข๊ฒ ๋ค...
- ๊ฒฐ๊ตญ ๊ฒ์์, ๊ฒ์์, ๊ฒ์์...
- ์ฝ์์ ๊ฐฏ์๋ฅผ ํต์ผ๋ก ๋น ๋ฅด๊ฒ ๊ตฌํ๋ ๋ฐฉ๋ฒ.
def solution(e, starts):
divisor=[0 for i in range(e+1)]
for i in range(2,e+1):
for j in range(1,min(e//i+1,i)):
divisor[i*j]+=2
for i in range(1,int(e**(1/2))+1):
divisor[i**2]+=1
- ์ ์ฝ๋๋ก ์ฝ์์ ๊ฐฏ์๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์๋๊ณ ,
- starts๋ฅผ ์ญ์ผ๋ก ์ ๋ ฌํด์ ํฐ ๊ฐ๋ถํฐ ์์ ๊ฐ์ผ๋ก ๋ด๋ ค์ค๋ฉด์ ์ฐพ๋๋ค.
- ๋ค ๋๋๊ณ ์์น ๋ง์ถ๊ธฐ ํด์ผํจ. ์ค๋ณต ๋๋ ์์๊ฐ ์๋ค๋๊น max๋ก ๊ฐ์ ์ฐพ๊ณ , ๊ทธ ๊ฐ์ index๋ฅผ ์ฐพ์์, ์์น ๋ง์ถฐ์ฃผ๋ฉด ๋ ๋ฏ? ์ด์ฐ์ผ... ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์๋? ๋ฐฐ์ด ์ ๋ ฌํ ๋ ์์น๋ฅผ ๊ธฐ๋กํด์ฃผ๊ฑฐ๋...
- ๋ ๋ํ์ด์ ์๊ทธ์ํธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์!
- ์คํจํ๊ธด ํ๋๋ฐ ์๊ฐ ์ด๊ณผ๋ก ํฐ์ง์ง๋ ์๋๋ค.
- ํฐ ์ ๋ถํฐ ์ฐพ์ง ์๊ณ ๊ทธ๋ฅ ํด๋ณผ๊น?
import numpy as np
def solution(e, starts):
answer = []
divisors = [0 for i in range(e+1)]
for i in range(2, e+1): # ๊ฐ๋น ๋ฆ
for j in range(1,min(e//i+1,i)):
divisors[i*j] += 2
for i in range(1, int(e**0.5)+1):
divisors[i**2] += 1
reversed_starts = np.sort(starts)[::-1]
reversed_index = np.argsort(starts)[::-1]
x, temp, tmax, m = 0, 0, 0, min(reversed_starts)
for i in reversed(range(m,e+1)):
if tmax <= divisors[i]:
temp = i
tmax = divisors[i]
if reversed_starts[x] == i:
answer.append(temp)
x += 1
answer_sorted = [answer[i] for i in reversed_index]
return answer_sorted
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (0.04ms, 28.2MB)
ํ
์คํธ 2 ใ ์คํจ (0.06ms, 28.3MB)
ํ
์คํธ 3 ใ ์คํจ (0.14ms, 28.3MB)
ํ
์คํธ 4 ใ ์คํจ (0.46ms, 28.5MB)
ํ
์คํธ 5 ใ ์คํจ (1.01ms, 28.2MB)
ํ
์คํธ 6 ใ ์คํจ (4.70ms, 28.4MB)
ํ
์คํธ 7 ใ ์คํจ (12.22ms, 28.6MB)
ํ
์คํธ 8 ใ ์คํจ (53.17ms, 28.8MB)
ํ
์คํธ 9 ใ ์คํจ (1724.01ms, 40.1MB)
ํ
์คํธ 10 ใ ์คํจ (9404.31ms, 74.7MB)
- ๊ทธ๋ฅ ๋งจ ์ฒ์ ๋ฐฉ๋ฒ์ผ๋ก ํด๋ณด๊ธฐ
- ์๋. ์๊ฐ ์ด๊ณผ๋จ.
import numpy as np
def solution(e, starts):
answer = []
divisors = [0 for i in range(e+1)]
for i in range(2, e+1): # ๊ฐ๋น ๋ฆ
for j in range(1,min(e//i+1,i)):
divisors[i*j] += 2
for i in range(1, int(e**0.5)+1):
divisors[i**2] += 1
for s in starts:
temp, tmax = 0, 0
for i in reversed(range(s,e+1)):
if tmax <= divisors[i]:
temp = i
tmax = divisors[i]
answer.append(temp)
return answer
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (0.01ms, 28.5MB)
ํ
์คํธ 2 ใ ํต๊ณผ (0.02ms, 28.1MB)
ํ
์คํธ 3 ใ ํต๊ณผ (0.09ms, 28.2MB)
ํ
์คํธ 4 ใ ํต๊ณผ (1.40ms, 28.2MB)
ํ
์คํธ 5 ใ ํต๊ณผ (4.22ms, 28.2MB)
ํ
์คํธ 6 ใ ํต๊ณผ (83.54ms, 28.4MB)
ํ
์คํธ 7 ใ ํต๊ณผ (269.83ms, 28.4MB)
ํ
์คํธ 8 ใ ํต๊ณผ (7996.83ms, 29.3MB)
ํ
์คํธ 9 ใ ์คํจ (์๊ฐ ์ด๊ณผ)
ํ
์คํธ 10 ใ ์คํจ (์๊ฐ ์ด๊ณผ)
- ๋งํ ใ ใ
- ํํธ ํํธ ํํธ ใ .ใ
- ํํธ ์ต๋ํ ์๋ณด๋ ค๊ณ ํ๋๋ฐ ๋๋ฌด์ง ๊ฐํผ๋ฅผ ๋ชป ์ก๊ฒ ๊ณ , ์ ์ ์๊ณ ์ถ๊ณ ...
- ๊ทธ๋ฌ๋ค๊ฐ DP๋ก ํ์ด์ผ ํ๋ค๋ ๊ฑธ ๋ณด๊ณ ... ์... ํ๋ฐ.
def solution(e, starts):
answer = []
divisors = [0 for i in range(e+1)]
answers = [0 for i in range(e+1)]
temp = 0
for i in range(2, e+1):
for j in range(1,min(e//i+1,i)):
divisors[i*j] += 2
for i in range(1, int(e**0.5)+1):
divisors[i**2] += 1
for i in reversed(range(e+1)):
if divisors[i] >= temp:
temp = divisors[i]
answers[i] = i
else:
divisors[i] = temp
answers[i] = answers[i+1]
for i in starts:
answer.append(answers[i])
return answer
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (0.01ms, 10.1MB)
ํ
์คํธ 2 ใ ํต๊ณผ (0.03ms, 10.1MB)
ํ
์คํธ 3 ใ ํต๊ณผ (0.12ms, 10.2MB)
ํ
์คํธ 4 ใ ํต๊ณผ (0.37ms, 10.2MB)
ํ
์คํธ 5 ใ ํต๊ณผ (1.36ms, 10.2MB)
ํ
์คํธ 6 ใ ํต๊ณผ (6.35ms, 10.3MB)
ํ
์คํธ 7 ใ ํต๊ณผ (16.73ms, 10.3MB)
ํ
์คํธ 8 ใ ํต๊ณผ (47.26ms, 11.1MB)
ํ
์คํธ 9 ใ ํต๊ณผ (1497.45ms, 28.5MB)
ํ
์คํธ 10 ใ ํต๊ณผ (8128.52ms, 91.6MB)
- ํ๊ณ ๋๋ ๋ ๋ฒจ 3 ๋ฌธ์ ์๋ค?
- ๋ ๋ฒจ2 ์นด์นด์ค ๋ธ๋ผ์ธ๋ ์ฑ์ฉ ๋ฌธ์ ์ง๊ฒจ์์ ๋์ด๋ ์ฒดํฌ ๋ฐ๊พธ๋ค๊ฐ ํ๋ฆฐ ๋ฏ... ํฌํก...
- ๊ณ ์๋ค์ ํ์ด๋ฅผ ๋ณด๋๋ก ํ์.
- ์ด๊ฑด ํต๊ณผ๋ ์ฝ๋์ธ๋ฐ ์ง๊ธ์ ์๊ฐ์ด๊ณผ ๋๋ค.
def solution(e, starts):
arr = [1]*(e+1)
ans = [0]*(e+1)
i = 2
for i in range(2,e+1):
for j in range(i*2,e+1,i):
arr[j] += 1
ans[e] = e
for i in reversed(range(0,e)):
if arr[i] >= arr[ans[i+1]]:
ans[i] = i
else:
ans[i] = ans[i+1]
return [ans[i] for i in starts]
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (0.01ms, 10.1MB)
ํ
์คํธ 2 ใ ํต๊ณผ (0.01ms, 10.3MB)
ํ
์คํธ 3 ใ ํต๊ณผ (0.10ms, 10.1MB)
ํ
์คํธ 4 ใ ํต๊ณผ (0.68ms, 10.2MB)
ํ
์คํธ 5 ใ ํต๊ณผ (1.52ms, 10.1MB)
ํ
์คํธ 6 ใ ํต๊ณผ (7.90ms, 10.1MB)
ํ
์คํธ 7 ใ ํต๊ณผ (16.89ms, 10.4MB)
ํ
์คํธ 8 ใ ํต๊ณผ (103.20ms, 11MB)
ํ
์คํธ 9 ใ ํต๊ณผ (2114.45ms, 28.4MB)
ํ
์คํธ 10 ใ ์คํจ (์๊ฐ ์ด๊ณผ)
- ๋ฉ๋ชจ์ด์ ์ด์
๋ฐฉ์, ์์ฒญ ๋น ๋ฆ. ์ค์ผ ๋น ๋ฅด์ง?
- e_sqrt ํ๋ฒ๋ง ๊ณ์ฐ? (๊ทผ๋ฐ ๋ด ์ฝ๋์์ ์ด๊ฑธ ๋ฐ๋ก ๋นผ๋ฉด ๋ ๋๋ ค์ง)
- ๋ฉ๋ชจ์ด์ ์ด์ ์ผ๋ก ์ฝ์ ๊ฐฏ์ ๊ตฌํจ.
- ์ฝ์๊ฐฏ์๊ฐ ๋ง์ ์ซ์๋ก ๊ฐฑ์ ํ๋ ์ฝ๋๋ ์ด์๋ค. ๊ทผ๋ฐ ์๋๋ ์๊ด์์ด ๋ณด์ด๋๋ฐ...
- ๋ง์ง๋ง์ answer ๋ฆฌ์คํธ์ append( )ํ์ง ์๊ณ start์ ๊ฐ ๋ฎ์ด์์.
- ๊ฑฐ๊ธฐ๋ memo[start] ๊ฐ์ ๋ฃ์ด๋ฒ๋ฆฌ๋ค... ํ ์ค ํ ์ค์ด ์์ ์ด๋ค. ๊ทผ๋ฐ ์๋๋ ๊ด๋ จ์๋?
def solution(e, starts):
memo = [0] * (e+1)
e_sqrt = int(pow(e, 0.5))
for n in range(1, e_sqrt+1):
memo[n*n] += 1
for i in range(n*(n+1), e+1, n):
memo[i] += 2
max_val = max_num = 0
for i in range(e, 0, -1):
if memo[i] >= max_val:
max_val, max_num = memo[i], i
memo[i] = max_num
for i, start in enumerate(starts):
starts[i] = memo[start]
return starts
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (0.01ms, 10.1MB)
ํ
์คํธ 2 ใ ํต๊ณผ (0.02ms, 10.2MB)
ํ
์คํธ 3 ใ ํต๊ณผ (0.06ms, 10.1MB)
ํ
์คํธ 4 ใ ํต๊ณผ (0.26ms, 10.1MB)
ํ
์คํธ 5 ใ ํต๊ณผ (0.56ms, 10.1MB)
ํ
์คํธ 6 ใ ํต๊ณผ (2.54ms, 10.3MB)
ํ
์คํธ 7 ใ ํต๊ณผ (7.40ms, 10.2MB)
ํ
์คํธ 8 ใ ํต๊ณผ (39.25ms, 10.6MB)
ํ
์คํธ 9 ใ ํต๊ณผ (947.92ms, 19.9MB)
ํ
์คํธ 10 ใ ํต๊ณผ (5627.77ms, 52.7MB)
- ์ฝ์๋ฅผ ๊ตฌํ๋ ๋ถ๋ถ์ด ๋ ๋น ๋ฅธ ๊ฑฐ์๊ตฌ๋?
- ์ฝ์ ๊ตฌํ๋ ๋ถ๋ถ๋ง ๊ต์ฒดํ๋๊น ๋ ๋นจ๋ผ์ง
def solution(e, starts):
answer = []
divisors = [0 for i in range(e+1)]
answers = [0 for i in range(e+1)]
temp = 0
'''
for i in range(2, e+1):
for j in range(1,min(e//i+1,i)):
divisors[i*j] += 2
for i in range(1, int(e**0.5)+1):
divisors[i**2] += 1
'''
e_sqrt = int(pow(e, 0.5))
for n in range(1, e_sqrt+1):
divisors[n*n] += 1
for i in range(n*(n+1), e+1, n):
divisors[i] += 2
for i in reversed(range(e+1)):
if divisors[i] >= temp:
temp = divisors[i]
answers[i] = i
else:
divisors[i] = temp
answers[i] = answers[i+1]
for i in starts:
answer.append(answers[i])
return answer
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (0.01ms, 10.3MB)
ํ
์คํธ 2 ใ ํต๊ณผ (0.03ms, 10.2MB)
ํ
์คํธ 3 ใ ํต๊ณผ (0.09ms, 10.1MB)
ํ
์คํธ 4 ใ ํต๊ณผ (0.20ms, 10.2MB)
ํ
์คํธ 5 ใ ํต๊ณผ (0.62ms, 10.1MB)
ํ
์คํธ 6 ใ ํต๊ณผ (4.71ms, 10.2MB)
ํ
์คํธ 7 ใ ํต๊ณผ (6.59ms, 10.5MB)
ํ
์คํธ 8 ใ ํต๊ณผ (30.91ms, 11.2MB)
ํ
์คํธ 9 ใ ํต๊ณผ (805.40ms, 28.4MB)
ํ
์คํธ 10 ใ ํต๊ณผ (5287.40ms, 91.4MB)
- ๊ทธ๋ฆฌ๊ณ e_sqrt๋ผ๋ ๋ณ์๋ฅผ ํ๋ ๋ง๋ค์ด์ for๋ฌธ์ ์ฌ์ฉํ๋ ๋ฐฉ์์ ๋ ๋๋ฆผ.
- ๊ทธ๋ฅ int(e**0.5)๋ก ์์ ์ ์กฐ๊ธ ๋ ๋นจ๋ผ์ง.
def solution(e, starts):
answer = []
divisors = [0 for i in range(e+1)]
answers = [0 for i in range(e+1)]
temp = 0
for n in range(1, int(e**0.5)+1):
divisors[n*n] += 1
for i in range(n*(n+1), e+1, n):
divisors[i] += 2
for i in reversed(range(e+1)):
if divisors[i] >= temp:
temp = divisors[i]
answers[i] = i
else:
divisors[i] = temp
answers[i] = answers[i+1]
for i in starts:
answer.append(answers[i])
return answer
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (0.01ms, 10.3MB)
ํ
์คํธ 2 ใ ํต๊ณผ (0.03ms, 10.2MB)
ํ
์คํธ 3 ใ ํต๊ณผ (0.05ms, 10.1MB)
ํ
์คํธ 4 ใ ํต๊ณผ (0.20ms, 10.3MB)
ํ
์คํธ 5 ใ ํต๊ณผ (0.42ms, 10.3MB)
ํ
์คํธ 6 ใ ํต๊ณผ (2.47ms, 10.3MB)
ํ
์คํธ 7 ใ ํต๊ณผ (4.68ms, 10.4MB)
ํ
์คํธ 8 ใ ํต๊ณผ (26.23ms, 11.2MB)
ํ
์คํธ 9 ใ ํต๊ณผ (713.76ms, 28.5MB)
ํ
์คํธ 10 ใ ํต๊ณผ (4508.23ms, 91.5MB)
- ์ข์ ๊ฑฐ ๋ง์ด ์์๋ฐ...
'๊ฒ์ ํ๋ก๊ทธ๋๋ฐ > Python ํ๋ก๊ทธ๋๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค ํํ ๊ฐ๋ฅํ ์ด์งํธ๋ฆฌ (ํฌํ์ด์งํธ๋ฆฌ) (0) | 2023.02.22 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค ํ๋ณดํค (0) | 2023.02.22 |
ํ๋ก๊ทธ๋๋จธ์ค [1์ฐจ] ํ๋ ์ฆ4๋ธ๋ก (1) | 2023.02.21 |
ํ๋ก๊ทธ๋๋จธ์ค [1์ฐจ] ๋ด์คํด๋ฌ์คํฐ๋ง (0) | 2023.02.21 |
ํ๋ก๊ทธ๋๋จธ์ค k์ง์์์ ์์ ๊ฐ์ ๊ตฌํ๊ธฐ (0) | 2023.02.21 |