카타
<문제 33. 약수의 개수와 덧셈>
작성한 답
def solution(left, right):
result = 0
for x in range(left, right+1, 1):
if len([n for n in range(1, x+1, 1) if x%n==0])%2 == 0:
result += x
else:
result -= x
return result
맞을까 맞을까 조마조마했는데 한 번에 맞아서 스스로도 조금 당황하고 신기했던 문제. 이제 나도 파이썬에 함수 작성하는 기초는 좀 생긴듯?
더 간단한 답 : 역시 고수는 다르다
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
포인트 정리
- i**0.5 : i의 제곱근 구하는 식
- 약수의 성질
- 제곱근이 정수로 표현 가능 : 약수의 개수 홀수 => i의 제곱근에서 정수만 취한 부분 = i제곱근
- 제곱근이 정수로 표현 불가능 : 약수의 개수 짝수 => i의 제곱근에서 정수만 취한 부분 != i 제곱근
<문제28. 없는 숫자 더하기>
작성한 답
def solution(numbers):
temp = [x for x in range(0, 10)]
for n in numbers:
temp.remove(n)
return sum(temp)
더 간단한 답
def solution(numbers):
return sum([x for x in range(0, 10) if x not in numbers])
졸린다고 해도 이정도는 이제 생각해낼 줄 알아야 할 때다.
'찢은' 답 : 세상에 천재는 많다ㄷㄷ
def solution(numbers):
return 45 - sum(numbers)
<문제 32. 내적>
작성한 답
def solution(a, b):
sum = 0
for x in range(0, len(a)):
sum += a[x]*b[x]
return sum
def solution(a, b):
sum = 0
for i, x in enumerate(a):
sum += a[i]*b[i]
return sum
아래의 경우, enumerate을 워낙 오랜만에 쓰는지라 용법 때문에 잠깐 헷갈렸지만 챗지피티의 도움으로..ㅎ그럭저럭 잘 작성했다.
고수의 답
def solution(a, b):
return sum([x*y for x, y in zip(a,b)])
포인트
- for문에서 요소 두 개 이상 할당 가능
- zip 함수
- 둘 이상의 배열을 '순서대로' 짝지어줌
- 배열의 길이가 다를 경우 짧은 쪽 기준으로 맞춰짐
'TIL 통합 > Python' 카테고리의 다른 글
ZIP()함수 활용, ISNUMERIC() 매서드, ISDIGIT() 매서드 (0) | 2024.02.07 |
---|---|
SORTED() 매서드, SORT() 매서드, ''.JOIN() 함수 (0) | 2024.02.06 |
Python - Index(), OR (0) | 2024.02.02 |
F-String, 문자열 포맷(FORMAT()), INDEX(), OR (0) | 2024.02.01 |
1/23 리스트와 반복문 활용 (0) | 2024.01.23 |