일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- lv4
- coding test
- Level2
- lambda
- 시간복잡도
- 파이썬
- 연습문제
- coding
- python
- 코딩
- collections
- itertools
- CodingTest
- counter
- time complexity
- Queue
- join
- 완전탐색
- 프로그래머스
- 코딩테스트
- sql
- level4
- 조합
- programmers
- Stack
- import re
- mysql
- 데이터분석
- BFS
- 코테
- Today
- Total
ror_coding
[Programmers] 약수의 개수와 덧셈 - 77884 본문
728x90
약수 출력이 아닌 개수만 세고 음/양 결정만 하면 되는 것이기 때문에 숏코드 뿐만 아니라 시간 복잡도, 메모리를 줄일 수 있는 방법이 있다 !
Question
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
Point
- ( n ** 0.5 ) % 1 로 완전 제곱인지 (약수 홀수) 판별 : Code 1
- int(n**0.5)==(n**0.5) 로 완전 제곱인지 판별 : Code 2
Code 1 : 완전 제곱 판별
( n ** 0.5 ) % 1
def solution(left, right):
return sum(n if (n ** 0.5) % 1 else -n for n in range(left, right + 1))
Code 2 : 완전 제곱 판별
int(n**0.5)==(n**0.5)
def solution(left, right):
return sum(-n if int(n**0.5)==(n**0.5) else n for n in range(left, right + 1))
def solution(left, right):
answer = 0
for i in range(left,right+1):
if int(i**0.5)==i**0.5:
answer -= i
else:
answer += i
return answer
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/017.gif)
now me
On my github
728x90
'Algorithm > Python' 카테고리의 다른 글
[Programmers] 행렬의 덧셈 - 12950 (0) | 2024.10.03 |
---|---|
[Programmers] 문자열 다루기 기본 - 12918 (1) | 2024.10.03 |
[Programmers] 나누어 떨어지는 숫자 배열 - 12910 (0) | 2024.09.30 |
[Programmers] 하샤드 수 - 12947 (0) | 2024.09.29 |
[Programmers] 정수 내림차순으로 배치하기 - 12933 (0) | 2024.09.29 |