๐ ํ์ด์ฌ ์ผ๋ก ํ์ด
๐ ๋ฌธ์ ๋งํฌ :
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๐ ๋ฌธ์ ์ค๋ช :
์ซ์๋๋ผ ๊ธฐ์ฌ๋จ์ ๊ฐ ๊ธฐ์ฌ์๊ฒ๋ 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
๐ ์ ์ถ๋ ฅ ์
์ถ์ธก)
1. result๋ณ์์ cnt๋ณ์๋ฅผ ์ ์ธํ๋ค.
1. number๋งํผ์ for๋ฌธ(1)์ ๋๋ฆฐ๋ค.
2. ๊ฐ ์ซ์i๋ง๋ค ์ซ์๊ธธ์ด ๋งํผ for๋ฌธ(2)๋ฅผ ๋๋ฆฐ๋ค
3. i๋ฅผ for๋ฌธ(2) ๋๋ฆด๋๋ง๋ค์ ์ธ๋ฑ์ค ๊ฐ์ผ๋ก ๋๋์ด 0์ด ๋์ค๋ฉด cnt += 1 ์ํจ๋ค.
4. for๋ฌธ(2)์ ๋์ cnt๊ฐ limit๋ณด๋ค
- ํฌ๋ฉด power๊ฐ์ result ๊ฐ์ ๋ํ๋ค.
- ํฌ์ง ์๋ค๋ฉด cnt๋ฅผ result ๊ฐ์ ๋ํ๋ค.
5. for๋ฌธ(1)์ ๋์ result ๊ฐ์ ๋ฐํํ๋ค.
์์ค์ฝ๋)
* 1์ฐจ) ์คํจ : 55.6์ (์๊ฐ์ด๊ณผ ์คํจ๋ ์์)
import math
def solution(number, limit, power):
result = 0
cnt = 0
for i in range(1, number+1):
if i == 1:
cnt += 1
continue
for x in range(1, i+1):
if i%x == 0:
cnt += 1
if cnt > limit:
result += power
cnt = 0
else:
result += cnt
cnt = 0
return result
* 2์ฐจ) ์คํจ : 85.2์ ( ์๊ฐ ์ค์ด๋๋ฐ ์ฑ๊ณต์ผ๋ก ์๊ฐ์ด๊ณผ ์คํจ๋ ์ฌ๋ผ์ง) : 17, 18, 21, 22
import math
def solution(number, limit, power):
result = 0
cnt = 0
for i in range(1, number+1):
if i == 1:
cnt += 1
continue
for x in range(1, int(math.sqrt(i))+1):
if i%x == 0:
cnt += 1
if x*x != i:
cnt += 1
if cnt > limit:
result += power
cnt = 0
else:
result += cnt
cnt = 0
return result
* 3์ฐจ) ์ฑ๊ณต : ๋ถํ์ํ ๋ถ๋ถ์ ์ ๊ฑฐํ๋๋ ์ฑ๊ณต (๊ทผ๋ฐ ์???? ์ ์ ๊ฒ ๋ฌธ์ ๊ฐ ๋ฌ์ง)
import math
def solution(number, limit, power):
result = 0
cnt = 0
for i in range(1, number+1):
for x in range(1, int(math.sqrt(i))+1):
if i%x == 0:
cnt += 1
if x*x != i:
cnt += 1
if cnt > limit:
result += power
cnt = 0
else:
result += cnt
cnt = 0
return result
๋ฌธ์ ์ ์ธ์ง: 1์ผ๋์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์์ด ์๋๋ ๋ฌธ์ ๊ฐ ์์ด์ ํต๊ณผ๋ฅผ ๋ชปํ๋ ๊ฒ
import math
def solution(number, limit, power):
result = 0
cnt = 0
for i in range(1, number+1):
if i == 1:
result = 1
continue
for x in range(1, int(math.sqrt(i))+1):
if i%x == 0:
cnt += 1
if x*x != i:
cnt += 1
if cnt > limit:
result += power
cnt = 0
else:
result += cnt
cnt = 0
return result
๋ฆฌ๋ทฐ)
์ฝ์๋ฅผ ํจ์จ์ ์ผ๋ก ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ธ์งํ๊ณ ์์ด์ผํ๋ ๋ฌธ์ .
์ฝ์์์ ๊ทธ ์์ฒด ์x๋ฅผ ์ ์ธํ๊ณ ๊ฐ์ฅ ํฐ์๋ ์ ๊ณฑ๊ทผ์ ํด๋นํ๋ค. ๊ทธ๋์ for๋ฌธ์ ์ ๊ณฑ๊ทผ๊น์ง๋ก ๋๋ ค x๋ฅผ ๋๋ด์๋ 0์ธ ์๋ฅผ ๊ตฌํ๋ค. ์ด ์ซ์๋ค์ ๊ฐ์ ์ง์ด ๋๋ ์๊ฐ ์์ผ๋ฏ๋ก ๋ฐ๋ก +1 ํ๋ค. ๋ค๋ง, ํ๋ ์ ๊ณฑ๊ทผ์ ๊ทธ ๋์ผํ ์๋ฅผ ๊ณฑํ์ฌ x๋ฅผ ๋ง๋๋ฏ๋ก ์ง์ด ๋๋ ์๊ฐ ์๋ค. ๋ฐ๋ผ์ ์ด ๊ฒฝ์ฐ๋ +1๋์ง ์๋๋ค.
๊ทผ๋ฐ ์๋ฌธ์ธ๊ฒ 3์ฐจ ์ฑ๊ณต ๋ถ๋ถ์์ ์ ๊ฒ ๋ฌธ์ ๊ฐ ๋ ๊ฑฐ๋ ์๊ฐ์ ๋ชปํ๊ณ ๋ถํ์ํ ๊ฑธ ๋ฃ์ด์ ์ ๋ฆฌํ๋ ๊ฐ๋ ์ผ๋ก ์ง์ด๊ฑด๋ฐ ๋ชจ๋ ์ฑ๊ณตํ๋ค.
๋๋์ฒด ๋ญ๊ฐ ๋ฌธ์ ์๋ ๊ฑฐ์ง < - ํด๊ฒฐ : 1์ผ๋์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์์ด ์๋๋ ๋ฌธ์ ๊ฐ ์์ด์ ํต๊ณผ๋ฅผ ๋ชปํ๋ ๊ฒ
'Coding Test > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Programmers] ํธ๋ ํ์ดํธ ๋ํ (0) | 2023.02.13 |
---|---|
Programmers] ๊ณผ์ผ ์ฅ์ (1) | 2023.02.13 |
Programmers] ๋ช ์์ ์ ๋น(1) (0) | 2023.01.31 |
Programmers] ๋ฌธ์์ด ๋๋๊ธฐ (2) | 2023.01.31 |
Programmers] ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฐ์ ๊ธ์ (0) | 2023.01.31 |