문제 설명
제한사항
입출력 예
나의 풀이(전체 코드)
def solution(left, right):
answer = 0
for i in range(left, right+1):
count = 0
for j in range(1, i+1):
if i%j == 0:
count += 1
if count%2 == 0:
answer += i
else:
answer -= i
return answer
이 문제는 약수의 개수가 짝수인 수는 더하고(+), 약수의 개수가 홀수인 수는 뺀(-) 값을 모두 더한 값이 return 돼야 한다.
입출력 예 설명을 보면서 이해를 하면 수월하게 풀 수 있는 문제였다.
우선 입력받은 두 정수 left부터 right 까지의 모든 수들 중에서 약수의 개수를 판단해야 하기 때문에 반복문은 left 부터 right+1까지로 조건을 걸고, 약수의 개수를 판단해 줄 count 변수를 선언해준다.
for i in range(left, right+1):
count = 0
이제 중첩 반복문을 선언해주는데 조건은 약수의 조건인 1부터 i+1(첫 번째 반복문의 숫자) 까지로 정의한다.
ex) i = 13일 때, 두 번째 반복문의 조건은 1 ~ 14까지 즉, j가 최대 13까지 늘어난다.
그리고 만약 i를 j로 나눈 나머지가 0일 때 약수이므로, count 변수를 1 증가시켜준다.
마지막으로 조건문을 사용하여 count가 짝수인지 홀수인지를 판단하여 총합(answer)의 결과에 반영해준다.
만약 짝수라면 더하기(+)를, 홀수라면 빼기(-)를 적용한다.
for j in range(1, i+1):
if i%j == 0:
count += 1
if count%2 == 0:
answer += i
else:
answer -= i
결과는 성공!
'문제풀이' 카테고리의 다른 글
[프로그래머스] level1 로또의 최고 순위와 최저 순위(파이썬) (0) | 2022.05.24 |
---|---|
[프로그래머스] Level1 3진법 뒤집기 (파이썬) (0) | 2022.05.23 |
[백준] 1408번 파이썬 풀이 (0) | 2022.04.01 |
[백준] 1173번 파이썬 풀이 (0) | 2022.04.01 |
[백준] 1371번 파이썬 풀이 (0) | 2022.03.28 |