미경이 스터디 6.7

코변·2022년 6월 7일
0
post-thumbnail

Photo by Pietro Mattia on Unsplash

소수 찾기

def solution(n):
    answers = [True] * (n+1)
    answers[0],answers[1] = False, False
    for i in range(2, int(n**0.5)+1):
        if answers[i] == True:
            for j in range(i+i,n+1, i):
                answers[j] = False
    return sum(answers)

2부터 n까지의 소수의 갯수를 반환하는 문제 에라토스테네스의 체를 활용하여 소수가 아닌 수를 다 걸러냈다. 흔히 알려진 코드를 가져와 작성하였지만 좀 더 눈에 들어오는 코드로 변경하여 작성해보았다. 또 일일히 더하는 것 보다 파이썬에서 True를 1로 False를 0으로 인식하는 점을 활용하여 sum 내장함수를 통해 결과를 도출하였다.

체육복

def solution(n, lost, reserve):
    dup_check_lost = sorted(list(filter(lambda x: x not in reserve, lost)))
    dup_check_reserve = sorted(list(filter(lambda x: x not in lost, reserve)))
    for lost_num in dup_check_lost:
        if lost_num - 1 in dup_check_reserve:
            dup_check_reserve.remove(lost_num-1)
        elif lost_num + 1 in dup_check_reserve:
            dup_check_reserve.remove(lost_num+1)
        else:
            n-=1
    return n

잃어버린 체육복은 앞 뒤 사람들에게만 줄 수 있으므로 앞과 뒤를 if문으로 검사한 뒤 reserve에서 제거한다. 만약에 일치하는 값이 없다면 그 사람은 체육복을 빌릴 수 없으므로 n에서 1을 빼준다.

개인적으로 코딩테스트에서도 TDD를 적용해보자고 했던 마음가짐을 그새 까먹고 더 좋은 코드에 처음부터 집착하다 시간을 엄청나게 끌어버린 문제 그래서 그냥 간단하게 접근해서 풀었다.

profile
내 것인 줄 알았으나 받은 모든 것이 선물이었다.

0개의 댓글