0205 TIL

looggi·2023년 2월 5일
0

TILs

목록 보기
18/114
post-thumbnail

프로그래머스 문제풀기

➡️소수 만들기 다시

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)

profile
looooggi

0개의 댓글