728x90
반응형
1. 문제 설명
2. 풀이과정
- 구매할 무기의 공격력을 저장할 리스트를 생성하고 최소 값인 1로 초기화한다. result = [1] * number
- 1은 약수가 1 자기 자신으로 1개이다. 하여 약수의 개수를 구할 필요가 없으므로 다음 숫자인 2부터 시작하여 기사단원의 수만큼 각 약수의 개수를 구한다. for i in range(2, number + 1)
- 각 수별로 약수를 저장할 리스트를 생성한다. li = list()
- 약수는 1부터 자기 자신까지 수 중에 나누어 떨어지는 수인데, 여기서 자기 자신까지 모두 확인하여 약수를 구하면 시간 초과를 피할 수 없게 된다.
- 이때 약수는 나누는 수와 나누었을 때 몫, 이렇게 두 개의 약수를 한 번에 구할 수 있다. 하여 해당 수의 절반까지만 반복하여 약수를 구하면 되는데, 여기서 또 한 가지 나누는 수는 해당 수를 소수인지 판별할 때처럼 제곱근까지만 판별하면 된다. for j in range(1, int(i ** 0.5) + 1)
- 만약 해당 수가 나누어 떨어지면 if (i % j == 0)
- 나누는 수를 약수에 추가하고 li.append(j)
- 나누고 난 몫의 결과 또한 약수이므로 추가해 준다. li.append(i // j)
- 해당 수의 약수를 모두 구했으면 약수 리스트에서 중복된 원소를 제거한 세트로 바꾼 결과의 원소 개수가 제한수치를 초과했다면 if (len(set(li)) > limit)
- 해당 기사는 지정한 공격력을 가진 무기를 구매해야 한다. result[i - 1] = power
- 초과하지 않았다면 else
- 약수의 개수와 동일한 값의 공격력을 가진 무기를 구매할 수 있다. result[i - 1] = len(set(li))
반응형
3. 소스코드
def solution(number, limit, power):
answer = 0
result = [1] * number
for i in range(2, number + 1):
li = list()
for j in range(1, int(i ** 0.5) + 1):
if (i % j == 0):
li.append(j)
li.append(i // j)
if (len(set(li)) > limit):
result[i - 1] = power
else:
result[i - 1] = len(set(li))
answer = sum(result)
return answer
728x90
반응형
'프로그래머스 > Python' 카테고리의 다른 글
[프로그래머스] [3차] n진수 게임 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.11 |
---|---|
[프로그래머스] [1차] 다트 게임 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.10 |
[프로그래머스] 야근 지수 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.09 |
[프로그래머스] [3차] 압축 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.08 |
[프로그래머스] 네트워크 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.06 |
[프로그래머스] k진수에서 소수 개수 구하기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.05 |
[프로그래머스] 최고의 집합 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.04 |
[프로그래머스] 전화번호 목록 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.03 |