포시코딩

[프로그래머스][Lv.0] 짝수의 합 본문

자료구조알고리즘/문제풀이

[프로그래머스][Lv.0] 짝수의 합

포시 2022. 12. 25. 18:29
728x90

문제

https://school.programmers.co.kr/learn/courses/30/lessons/120831

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

내 풀이 A

def solution(n):
    if n % 2 == 1:
        n -= 1
    answer = n * (n/2+1) / 2
    return answer

a 부터 b까지 c만큼 증가하는 값들을 모두 더한 값을 구하는 공식은 아래와 같다.

(a+b) * ((b-a)/c+1) / 2

피라미드식으로 증가하게 만들어 직각 삼각형을 만든 후 가로*세로/2 를 하면 원하는 값을 얻게되는 원리

n까지의 짝수의 합이니 n이 만약 9라면 0~8이여야 하니 홀수라면 -1을 해준다음

0부터 n까지 2만큼 증가하는 값의 합을 구하면 된다.

공식을 외우기 힘들지만 아래에서 사용하는 for문보다는 식 하나로 끝나기 때문에 훨씬 효율이 좋다.

 

내 풀이 B

def solution(n):
    return sum([x for x in range(n+1) if x % 2 == 0])

for문을 썼다면 이렇게 풀었을듯

 

다른 풀이

def solution(n):
    return sum(filter(lambda v: v % 2 == 0, [_ for _ in range(n+1)]))

lambda가 나왔고 [_ for _ in range(n+1)] 이라는 알 수 없는 식이 나왔다.

일단 이게 뭔지 알아야 나중에 써먹을 수 있을 것 같아 따로 공부를 해봤고, 

 

언더바(_)에 대해서는 다음 출처를 통해 값을 무시하고 싶은 경우에 해당하는 사용법인걸 알 수 있었다.

https://mingrammer.com/underscore-in-python/

 

파이썬 언더스코어(_)에 대하여

파이썬에서 언더스코어(underscore, _)는 특별하다. 타 언어에서 언더스코어(_)는 단지 스네이크 표기법의 변수나 함수명을 위해서만 사용되어지

mingrammer.com

즉, 위 코드에서의 사용법은 아래와 같이 썼다는 것

result = [ _ for _ in range(5) ]
print(result)  # [0, 1, 2, 3, 4]

 

lambda에 대해서도 더이상 미룰 수 없다 생각되어 공부했는데 생각보다 단순했다.

lambda 표현식 : 매개변수

이렇게 사용되는 익명함수인건데 

filter()를 통해 _ for _ ranget()의 결과물에 대해 lambda 함수로 필터링한걸 리턴하라는 뜻.

 

결국 보기에만 어려워보였지 내가 푼 리스트 컴프리헨션 방법과 별반 다를게 없었다.

728x90