https://school.programmers.co.kr/learn/courses/30/lessons/136798
๋ฌธ์
๋ฌธ์ ์ค๋ช
์ซ์๋๋ผ ๊ธฐ์ฌ๋จ์ ๊ฐ ๊ธฐ์ฌ์๊ฒ๋ 1๋ฒ๋ถํฐ number๊น์ง ๋ฒํธ๊ฐ ์ง์ ๋์ด ์์ต๋๋ค. ๊ธฐ์ฌ๋ค์ ๋ฌด๊ธฐ์ ์์ ๋ฌด๊ธฐ๋ฅผ ๊ตฌ๋งคํ๋ ค๊ณ ํฉ๋๋ค.
๊ฐ ๊ธฐ์ฌ๋ ์์ ์ ๊ธฐ์ฌ ๋ฒํธ์ ์ฝ์ ๊ฐ์์ ํด๋นํ๋ ๊ณต๊ฒฉ๋ ฅ์ ๊ฐ์ง ๋ฌด๊ธฐ๋ฅผ ๊ตฌ๋งคํ๋ ค ํฉ๋๋ค. ๋จ, ์ด์๋๋ผ์์ ํ์ฝ์ ์ํด ๊ณต๊ฒฉ๋ ฅ์ ์ ํ์์น๋ฅผ ์ ํ๊ณ , ์ ํ์์น๋ณด๋ค ํฐ ๊ณต๊ฒฉ๋ ฅ์ ๊ฐ์ง ๋ฌด๊ธฐ๋ฅผ ๊ตฌ๋งคํด์ผ ํ๋ ๊ธฐ์ฌ๋ ํ์ฝ๊ธฐ๊ด์์ ์ ํ ๊ณต๊ฒฉ๋ ฅ์ ๊ฐ์ง๋ ๋ฌด๊ธฐ๋ฅผ ๊ตฌ๋งคํด์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, 15๋ฒ์ผ๋ก ์ง์ ๋ ๊ธฐ์ฌ๋จ์์ 15์ ์ฝ์๊ฐ 1, 3, 5, 15๋ก 4๊ฐ ์ด๋ฏ๋ก, ๊ณต๊ฒฉ๋ ฅ์ด 4์ธ ๋ฌด๊ธฐ๋ฅผ ๊ตฌ๋งคํฉ๋๋ค. ๋ง์ฝ, ์ด์๋๋ผ์์ ํ์ฝ์ผ๋ก ์ ํด์ง ๊ณต๊ฒฉ๋ ฅ์ ์ ํ์์น๊ฐ 3์ด๊ณ ์ ํ์์น๋ฅผ ์ด๊ณผํ ๊ธฐ์ฌ๊ฐ ์ฌ์ฉํ ๋ฌด๊ธฐ์ ๊ณต๊ฒฉ๋ ฅ์ด 2๋ผ๋ฉด, 15๋ฒ์ผ๋ก ์ง์ ๋ ๊ธฐ์ฌ๋จ์์ ๋ฌด๊ธฐ์ ์์ ๊ณต๊ฒฉ๋ ฅ์ด 2์ธ ๋ฌด๊ธฐ๋ฅผ ๊ตฌ๋งคํฉ๋๋ค. ๋ฌด๊ธฐ๋ฅผ ๋ง๋ค ๋, ๋ฌด๊ธฐ์ ๊ณต๊ฒฉ๋ ฅ 1๋น 1kg์ ์ฒ ์ด ํ์ํฉ๋๋ค. ๊ทธ๋์ ๋ฌด๊ธฐ์ ์์ ๋ฌด๊ธฐ๋ฅผ ๋ชจ๋ ๋ง๋ค๊ธฐ ์ํด ํ์ํ ์ฒ ์ ๋ฌด๊ฒ๋ฅผ ๋ฏธ๋ฆฌ ๊ณ์ฐํ๋ ค ํฉ๋๋ค.
๊ธฐ์ฌ๋จ์์ ์๋ฅผ ๋ํ๋ด๋ ์ ์ number์ ์ด์๋๋ผ์ ํ์ฝ์ผ๋ก ์ ํด์ง ๊ณต๊ฒฉ๋ ฅ์ ์ ํ์์น๋ฅผ ๋ํ๋ด๋ ์ ์ limit์ ์ ํ์์น๋ฅผ ์ด๊ณผํ ๊ธฐ์ฌ๊ฐ ์ฌ์ฉํ ๋ฌด๊ธฐ์ ๊ณต๊ฒฉ๋ ฅ์ ๋ํ๋ด๋ ์ ์ power๊ฐ ์ฃผ์ด์ก์ ๋, ๋ฌด๊ธฐ์ ์ ์ฃผ์ธ์ด ๋ฌด๊ธฐ๋ฅผ ๋ชจ๋ ๋ง๋ค๊ธฐ ์ํด ํ์ํ ์ฒ ์ ๋ฌด๊ฒ๋ฅผ return ํ๋ solution ํจ์๋ฅผ ์์ฑํ์์ค.
์ ํ ์ฌํญ
- 1 ≤ number ≤ 100,000
- 2 ≤ limit ≤ 100
- 1 ≤ power ≤ limit
์ ์ถ๋ ฅ ์
number | limit | power | result |
5 | 3 | 2 | 10 |
10 | 3 | 2 | 21 |
์์ค ์ฝ๋
# 1 (์๊ฐ ์ด๊ณผ)
def solution(number,limit,power):
answer = 0
knights = list(range(1,number+1))
for knight in knights:
cnt = 0
for n in range(1,knight+1):
if knight%n == 0:
cnt += 1
if cnt > limit:
answer += power
else:
answer += cnt
return answer
ํ์ด # 1
- knights ๋ฆฌ์คํธ์ ๊ฐ ๊ธฐ์ฌ๋ค์ ๋ฒํธ ๋ด๊ธฐ
- knights ๋ฆฌ์คํธ๋ฅผ ๋๋ฉด์ ๊ฐ ๊ธฐ์ฌ ๋ฒํธ์ ์ฝ์ ๊ฐฏ์๋ฅผ cnt ๋ณ์์ ๋ฃ๊ธฐ
- cnt๊ฐ limit๋ณด๋ค ํฌ๋ค๋ฉด ์ ํด์ง power๋ฅผ answer์ ๋ํ๊ธฐ
- cnt๊ฐ limit๋ณด๋ค ์๋ค๋ฉด cnt๋ฅผ answer์ ๋ํ๊ธฐ
# 2
def solution(number,limit,power):
knights = list(range(1,number+1))
knights_score = []
for knight in knights:
cnt = 0
for n in range(1,int(knight**(1/2))+1):
if knight%n == 0:
cnt += 1
if n**2 != knight:
cnt += 1
if cnt > limit:
cnt = power
break
knights_score.append(cnt)
return sum(knights_score)
ํ์ด #2
- knights ๋ฆฌ์คํธ์ ๊ฐ ๊ธฐ์ฌ๋ค์ ๋ฒํธ ๋ด๊ธฐ
- knights ๋ฆฌ์คํธ๋ฅผ ๋๋ฉด์ ๊ฐ ๊ธฐ์ฌ ๋ฒํธ์ ์ฝ์ ๊ฐฏ์๋ฅผ cnt ๋ณ์์ ๋ฃ๊ธฐ
- ์ด ๋, ๊ธฐ์ฌ ๋ฒํธ์ ์ ๊ณฑ๊ทผ๊น์ง์ ๋ฒ์ ์ฌ์ฉ (์ฝ์๋ ์ง์ด ์์ผ๋ฏ๋ก ์ ๊ณฑ๊ทผ๊น์ง๋ง ๋ฐ๋ณตํ์ฌ ์ดํ์ ์ ๊ณฑ)
- ์ฝ์์ ๊ฐฏ์๊ฐ limit์ ๋์ด๊ฐ๋ฉด for๋ฌธ์ ์ข ๋ฃํ์ฌ ์ฐ์ฐ์ ์ ์ค์ด๊ธฐ
- knights_score ๋ฆฌ์คํธ์ ๊ฐ ๊ธฐ์ฌ์ ์ ์๋ฅผ ์ ๋ ฅ
- knights_score์ ํฉ์ ๋ฆฌํด
์๊ฐ ๋ณต์ก๋ ๋ฌธ์ ๊ฐ ๋์๋๋ฐ์...? ์ ์ถํ๊ณ ์๊ฐ ์ด๊ณผ ๋จ๋๊น ์์ฐํด์ ์ธ์์ ์ฌ๋ฏธ๋ฅผ ๋๋ ์ ์์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ํ์ด๋ก ํ์ ๋ ํ ์คํธ1์ 3000ms ๊ฑธ๋ ธ๋๋ฐ ๋ ๋ฒ์งธ ํ์ด๋ก ํ๋๊น 50ms๊ฐ ๋์๋ค. ๋ ๋ฒ์งธ ํ์ด๋ ๋ธ๋ก๊ทธ ๊ธ์ ์ฐธ๊ณ ํ๋๋ฐ ์ค๋ช ์ ์ํด์ฃผ์ ์ ์ดํด๊ฐ ์ ๋๋ค.
'์ฝ๋ฉ ๋ฌธ์ ํ์ด ๐ป > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค / ํ์ด์ฌ] Lv.1 [PCCP ๊ธฐ์ถ๋ฌธ์ ] 1๋ฒ / ๋ถ๋ ๊ฐ๊ธฐ (1) | 2024.01.07 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค / ํ์ด์ฌ] Lv.1 ๊ณต์ ์ฐ์ฑ (0) | 2024.01.05 |
[ํ๋ก๊ทธ๋๋จธ์ค / ํ์ด์ฌ] Lv.1 ์ซ์ ์ง๊ฟ (0) | 2023.12.15 |
[ํ๋ก๊ทธ๋๋จธ์ค / ํ์ด์ฌ] Lv.1 ์ฑ๊ฒฉ ์ ํ ๊ฒ์ฌํ๊ธฐ (1) | 2023.12.15 |
[ํ๋ก๊ทธ๋๋จธ์ค / ํ์ด์ฌ] Lv.0 ๊ตฌ์ฌ์ ๋๋๋ ๊ฒฝ์ฐ์ ์ (0) | 2023.12.14 |