from itertools import combinations
def solution(nums):
count = 0
for a, b, c in combinations(nums, 3): #for a in combinations(nums, 3):
if len([i for i in range(2, int((a+b+c)**0.5)+1) if (a+b+c) % i == 0]) == 0: # a+b+c 대신 sum(a)
count += 1
return count
기존 코드에 리스트 축약식에서 (i,a+b+c//i)를 쓰는 대신 나누는 수 i의 범위를 2부터 시작하는 걸로 바꿔서 제곱근까지 하나도 약수가 없는 경우로 바꿔봤다 나눗셈을 한 번 덜하고 범위가 줄어들어서 그런지 시간이 좀 더 단축됐다
여기서 sum(a)를 사용해봤는데 더 느려졌다
def solution(nums):
from itertools import combinations as cb
answer = 0
for a in cb(nums, 3):
cand = sum(a)
for j in range(2, cand):
if cand%j==0:
break
else:
answer += 1
return answer
이건 그냥 나랑 거의 같은 풀이방식인데 for-else 구문을 처음봐서 가져왔다
for-else
: for을 실행해서 if조건에 만족해서 break로 탈출하지 않는다면 answer+=1이 실행된다
from itertools import combinations
def prime_number(x):
answer = 0
for i in range(1,int(x**0.5)+1):
if x%i==0:
answer+=1
return 1 if answer==1 else 0
def solution(nums):
return sum([prime_number(sum(c)) for c in combinations(nums,3)])
이것도 비슷한데, 뒤로 갈수록 이렇게 함수를 정의해서 푸는 사람들이 많아지는 것 같다
그리고 다시한번 보는 return 값 if 조건 else 다른 값
에라토스테네스의 체
소수를 구하는 방법 중 하나
어떤 소수(p)의 제곱 범위 내에서 소수를 찾고 그의 배수를 모두 지워가면 남아있는 수가 소수가 된다
→
p미만의 소수의 배수들을 모두 지우게 된다
def solution(s):
letters=['zero','one','two','three','four','five','six','seven','eight','nine']
for letter in letters:
if letter in s:
for i in range(s.count(letter)):
s=s.replace(letter,str(letters.index(letter)))
return int(s)
두번째 for문에서 i를 사용하지 않기도 하고 for 문이 중첩되기도해서 아래 방법이 더 나은 것 같다.
문자열 메소드 replace를 쓰면 꼭 다시 그 변수에 넣어줘야 적용이 된다 ⭐⭐⭐
def solution(s):
letters=['zero','one','two','three','four','five','six','seven','eight','nine']
for letter in letters:
if letter in s:
s=s.replace(letter,str(letters.index(letter)),s.count(letter))
return int(s)
str.replace(변경 전 문자, 변경 후 문자, 횟수)
횟수는 지정하지않으면 해당하는 문자 다 바뀜(v3.10.10)