tryhelloworld / programmers 공략하기 [2] - lambda 활용법

     


알고리즘 문제를 풀면서 느끼는 경험 중에 가장 보람찬 경험은 무엇일까요?


문제를 풀고 정답을 맞추는 순간..? 다른 사람의 답과 비교했을 때, 내가 더 코드를 잘 만들었다고 생각하는 순간..?


제가 이 사이트에 있는 문제들을 풀면서 가장 좋았던 경험은 바로 '학습'입니다.

열심히 머리를 굴려 내놓은 답안이, 다른 사람들로 인해 '한줄공략'되었을 때...

한편으로는 허무함이 들 수 있지만, 한편으로는 어떻게 '한줄공략'이 가능한지 코드를 분석하며 학습하게 됩니다.


Level 1단계에서 가장 많이 배운 것은 Lambda의 활용이라고 말하고 싶네요. 

그렇게 오래된 개념이 아니므로 생소한 사람들도 있지만, 최근에 나오는 언어들은 대부분 Lambda를 지원합니다!!

자세한 뜻은 구글링과 Wiki에 맡기고 ㅎㅎ

간단히 설명하면 함수를 쉽게 정의해 바로 사용하는 것이에요.


Level 1에서 Lambda의 활용을 느낀 문제들을 간략히 소개해 볼까 합니다.

먼저 Python을 사용하면서 문제를 풀 때, 가장 많이 헷갈리는 것이 for문과 if문의 사용입니다. 

기본적인 사용이야 물론 알고 있지만, 변수 뒤에 for문과 if문이 써질때, 혹은 []에 둘러싸일 때가 있습니다.


예를 들어 아래 그림과 같이 사용할 수 있습니다.



이 알고리즘 문제는 dictionary 타입의 자료를 리스트로 변환 후 key 값으로 정렬하여 출력하는 것입니다. 

저는 일단 dictionary 데이터에서 리스트를 뽑아낼 필요가 있었어요.

이때 사용한 것이 [i for i in dic.items()]입니다. 

변수 바로 뒤에 for가 오는 경우, for문 앞에 오는 정규식을 for 문을 돌면서 만드는 역할을 합니다

이게 처음 보면 생각보다 이해가 안 되는데, 사용하다 보면 이렇게 편할 수가 없어요!

만약 평범한 문법을 사용한다면 다음과 같이 쓸 수도 있어요.

dicList = []

for i in dic.items():

    dicList += i

그나마 python은 간결하니까 3줄로 끝나지만,

C나 JAVA를 사용하면 최소 5줄 이상일 것 같습니다.


또 뒤에 보면 lambda의 활용이 보입니다.

python에서 sorted 함수는 특정 리스트를 정렬하는 정렬함수입니다.

보통 1번째 인자에 정렬한 리스트를 넣고, 그다음엔 조건들을 넣습니다.

key는 정렬할 조건을 입력하는 인자값인데, 저는 처음에 숫자 n을 입력하면 리스트 안에 n번째 값을 리턴하는 함수를 만들어서 호출했습니다.

하지만 굳이 함수를 만들어서 호출하지 않고, lambda를 통해 바로 만들고 바로 적용했습니다. 보기에도 깔끔하고, 이해도 쉽지 않나요?


이런 활용은 python뿐만 아니라 자바에서도 있습니다.



위 코드는, 숫자로 이루어진 배열과 임의의 숫자 n이 입력으로 들어올 때, 배열 안에서 n의 배수들만 출력하게 만드는 알고리즘입니다.

저는 일일이 for 문으로 n의 배수인지 찾고, 임시 리스트에 넣고, 그걸 다시 출력 리스트에 옮기는 아주 긴 코드를 작성했는데....



답안중에 위처럼 간단하게 만드신 분도 있더라고요...

물론 짧다고 다 좋은 코드인 것은 아닌 게 분명하지만, '너의 복잡한 사고는 나한테는 별것 아니다'라는 느낌을 받았습니다. ㅇㅅㅇ

알지못하는 레퍼런스들도 있고요. 이런것을 발견할 때마다 역시 공부의 끝은 없구나... 라고 생각하고 더 열심히 하는 계기가 되고 있습니다.


반응형

댓글

Designed by JB FACTORY