[๋ฌธ์ ๋งํฌ] ๐
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก, ์ฑ์ฉ๊น์ง Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
ํ์ด ๋ฐฉ๋ฒ
์ฝ์ ๊ตฌํ๊ธฐ
์ฝ์๋ ์ผ๋ฐ์ ์ผ๋ก 1๋ถํฐ sqrt(i)๊น์ง๋ง ํ์ธํ๋ฉด ๋๋ค. ์๋ฅผ ๋ค์ด, i๊ฐ 36์ด๋ผ๋ฉด 1 x 36, 2 x 18, 3 x 12, 4 x 9, 6 x 6 ๋ฑ์ ์ฝ์๋ฅผ ๊ฐ์ง๋ฉฐ, sqrt(36) ์ดํ๋ก๋ ์ค๋ณต ๊ณ์ฐ์ด ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฝ์์ ๊ฐ์ ๊ณ์ฐ์ด ํจ์ฌ ๋นจ๋ผ์ ธ ์๊ฐ ํจ์จ์ฑ์ ๊ฐ์ ํ ์ ์๋ค.
- 6์ ์ฝ์๋ [1, 2, 3, 4, 6, 9, 12, 18, 36] ์ด ์๋ค.
- ์ฝ์ 6 ์ดํ๋ก๋ ๋ค์ ์์ ์์ ๊ณฑํ๋ฉด์ ํ์ธํ๋๋ฐ ์ด๋ฏธ ์์์ ๊ณ์ฐ์ ํ๊ธฐ ๋๋ฌธ์ ์ค๋ณต ๊ณ์ฐ์ด ๋๋ค๋ ๊ฒ์ด๋ค.
- ๋ฐ๋ผ์ ์ ๊ณฑ๊ทผ์ ํตํด ์ค๋ณต์ ์ ๊ฑฐํด์ ์๊ฐ ๋จ์ถ์ ํด์ผ ํ๋ค.
์ ๊ณฑ๊ทผ ๊ตฌํ๋ ๋ฐฉ๋ฒ
1๏ธโฃ 1. math.sqrt()
import math
math.sqrt(36) # 6.0
2๏ธโฃ 2. ์ ๊ณฑ(**)
36**0.5 # 6.0
โ ์์
for i in range(1, number + 1):
for j in range(1, int(i**0.5) + 1):
...
Solution
def solution(number, limit, power):
answer = 0
for i in range(1, number + 1):
divisor_cnt = 0
# ์ฝ์ ๊ฐ์ ๊ณ์ฐ์ 1๋ถํฐ sqrt(i)๊น์ง๋ง ์งํ
for j in range(1, int(i**0.5) + 1):
if i % j == 0:
divisor_cnt += 1
if j != i // j: # ์ ๊ณฑ์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ง ๋ค๋ฅธ ์์ ์ถ๊ฐ
divisor_cnt += 1
if divisor_cnt > limit: # ์ ํ ์์น๋ฅผ ์ด๊ณผํ๋ฉด ์ค๋จ
divisor_cnt = power
break
answer += divisor_cnt if divisor_cnt <= limit else power
return answer
- j๋ฅผ 1๋ถํฐ sqrt(i)๊น์ง๋ง ์ํํ์ฌ ์ฝ์๋ฅผ ๊ตฌํ๋ค.
- ์ฝ์ j๊ฐ ๋ฐ๊ฒฌ๋๋ฉด, i // j๋ ์ฝ์๊ฐ ๋๋ค. ์ด๋, j์ i // j๊ฐ ๊ฐ์ง ์์ผ๋ฉด ์ฝ์ ๊ฐ์๋ฅผ ๋ ๋ฒ ์ถ๊ฐํ๋ค.
- divisor_cnt๊ฐ limit์ ์ด๊ณผํ๋ฉด power๋ก ์ค์ ํ๊ณ break๋ก ๋ฃจํ๋ฅผ ์ค๋จํ๋ค.
- ์ต์ข answer์ ์ฝ์ ๊ฐ์ ๋๋ power๋ฅผ ๋ํด ๋ฌด๊ฒ๋ฅผ ๊ณ์ฐํ๋ค.
์ถ๊ฐ ์ค๋ช
if j != i // j: # ์ ๊ณฑ์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ง ๋ค๋ฅธ ์์ ์ถ๊ฐ
divisor_cnt += 1
- ์ ์กฐ๊ฑด๋ฌธ์ ์ค๋ณต ์ฝ์๋ฅผ ํผํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ถ๋ถ์ด๋ค.
- ์๋ฅผ ๋ค์ด, i = 36์ผ ๋, ์ฝ์์์ ํตํด ์ฐพ์ ์ ์๋ ์ฝ์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ฝ์์์ ํ์ธํ ๋, j๊ฐ 1๋ถํฐ sqrt(i)๊น์ง ํ์๋๋ค.
- j = 1 ์ผ ๋, i // j = 36. ๋ฐ๋ผ์ ์ฝ์๋ 1๊ณผ 36.
- j = 2 ์ผ ๋, i // j = 18. ๋ฐ๋ผ์ ์ฝ์๋ 2์ 18.
- j = 3 ์ผ ๋, i // j = 12. ๋ฐ๋ผ์ ์ฝ์๋ 3๊ณผ 12.
- j = 4 ์ผ ๋, i // j = 9. ๋ฐ๋ผ์ ์ฝ์๋ 4์ 9.
- j = 6 ์ผ ๋, i // j = 6. ์ด๋ j์ i // j๊ฐ ๊ฐ์ 6์ด๋ฏ๋ก ์ ๊ณฑ์์ด๋ฉฐ, ์ค๋ณตํด์ ์นด์ดํธํ์ง ์๋๋ค.
- ๋ฐ๋ผ์ j๊ฐ i // j์ ๊ฐ์ ๋๋ ์ค๋ณต ์ฝ์์ด๋ฏ๋ก, ์ถ๊ฐํ์ง ์๊ธฐ ์ํด if j != i // j ์กฐ๊ฑด์ ์ฌ์ฉํ๋ค.
๐ฉ๐ป ํ๊ณ
์๊ฐ ์ด๊ณผ ๋ ์ฝ๋
answer = 0
for i in range(1, number + 1):
divisor_cnt = 0 # ์ฝ์ ๊ฐ์ ์ด๊ธฐํ
for j in range(1, i + 1): # ์ฝ์ ๊ตฌํ๊ธฐ
if i % j == 0:
divisor_cnt += 1 # ์ฝ์ ๊ฐ์
if divisor_cnt > limit:
break
if divisor_cnt > limit: # ์ ํ ์์น ์ด๊ณผ์
answer += power
else:
answer += divisor_cnt
์ฝ์ ๊ตฌํ ๋๋ ์ ๊ณฑ๊ทผ์ ํญ์ ์ฌ์ฉํ๋๋ก ํ์..
โ 2024.11.09 ์ฌํ์ด
๋ง์ง๋ง์ ๊ณต๊ฒฉ๋ ฅ์ ๊ฒฐ๊ณผ๊ฐ์ ๋์ ํ ๋ ๋จ์ํ cnt๋ง ๋ํด๋ ๋๋ค๋ ๊ฑธ ์์๋ค.
answer += cnt
'๐งฉ Algorithm > SWEA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [SWEA] 2005. ํ์ค์นผ์ ์ผ๊ฐํ (Python/D2) (0) | 2024.11.10 |
|---|---|
| [SWEA] 20551. ์ฆ๊ฐํ๋ ์ฌํ ์์ด (Python/D3) (0) | 2024.11.08 |
| [SWEA] 4676. ๋์ด์ง๋ ์๋ฆฌ ๋ง๋ค๊ธฐ (Python/D3) (0) | 2024.11.04 |
| [SWEA] 12004. ๊ตฌ๊ตฌ๋จ 1 (Python/D3) (0) | 2024.11.04 |
| [SWEA] 4299. ํํ์ด์ ์ฌ๋์ ํ์ด๋ฐ (Python/D3) (0) | 2024.11.04 |