일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- GIT
- 공룡게임
- typeORM
- Queue
- dfs
- game
- JavaScript
- Express
- OCR
- Dinosaur
- class
- TypeScript
- MongoDB
- 정렬
- nodejs
- Bull
- Sequelize
- 자료구조
- nestjs
- jest
- MySQL
- mongoose
- Python
- flask
- Nest.js
- 게임
- cookie
- AWS
- react
- Today
- Total
포시코딩
[프로그래머스][Lv.0] 짝수의 합 본문
문제
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 함수로 필터링한걸 리턴하라는 뜻.
결국 보기에만 어려워보였지 내가 푼 리스트 컴프리헨션 방법과 별반 다를게 없었다.
'자료구조알고리즘 > 문제풀이' 카테고리의 다른 글
[프로그래머스][Lv.0] 문자열 뒤집기 (0) | 2022.12.27 |
---|---|
[프로그래머스][Lv.0] 점의 위치 구하기 (0) | 2022.12.27 |
[프로그래머스][Lv.1] 숫자 문자열과 영단어 (0) | 2022.12.25 |
[프로그래머스][Lv.1][정렬] K번째수 (0) | 2022.12.25 |
[프로그래머스][Lv.1] 행렬의 덧셈 (0) | 2022.12.25 |