💡
Python 한 줄 코딩 하기 외 - 파이썬(Python), 알고리즘
December 14, 2021
Part 1. Python 한 줄 코딩 하기
-
한줄 if 문
# one line for if num = 4 result = ('even' if num % 2 == 0 else 'odd') print(f"{num}은 {result}입니다")
-
한 줄 for문
# one line for for old_list = [1, 3, 2, 5, 1, 2] new_list = [a*2 for a in old_list] print(new_list)
-
filter - list의 모든 원소 중 특별한 것만 뽑기
people = [ {'name': '강아지', 'age': 20}, {'name': '송아지', 'age': 38}, {'name': '고양이', 'age': 7}, {'name': '라이언', 'age': 17}, ] result = filter(lambda x: x['age'] > 20, people) print(list(result))
-
*args 매개변수
- 매개변수명 변경가능, 여러 매개 변수 list에 담기
def call(*args): for name in args: print(f"{name}야 집에 가자~") call('쿠니', '벼리', '달이')
- 매개변수명 변경가능, 여러 매개 변수 list에 담기
-
**kwargs 매개변수
-
매개변수명 변경가능, 여러 매개 변수 dict에 담기
def call(**kwargs): print(kwargs) call(name='bob', age=30, height=180)
-
Part 2. 이렇게 접근 하는 거였어? 🙄 (Feat. 알고리즘 문제)
-
알고리즘 강의를 듣다 아래와 같은 문제를 만났다.
Q. 다음과 같이 0 혹은 양의 정수로만 이루어진 배열이 있을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 숫자 사이에 '✕' 혹은 '+' 연산자를 넣어 결과적으로 가장 큰 수를 구하는 프로그램을 작성하시오. 단, '+' 보다 '✕' 를 먼저 계산하는 일반적인 방식과는 달리, 모든 연산은 왼쪽에서 순서대로 이루어진다.
[0, 3, 5, 6, 1, 2, 4]
-
문제를 처음 보았는 때 내 머릿속 사고
- 모든 수를 곱셈으로 연산하면 가장 큰 수 나오는 거 아닌가?
- 0을 보며 ‘그렇게는 쉽게 안 되겠네’ 라고 깨달음
- 그렇다면 모든 경우의 수를 비교 하여 구해야 되나? ($2^6$번..?)
- 저렇게 많은 연산을 하려면 어떻게..? (for문 덕지덕지? 재귀함수?)
- 모르겠다.
-
정답을 보고 난 후
-
모든 수를 곱할 때가 가장 큰 수가 나오는 것은 맞다.
-
그런데, 0과 1을 곱할 때 문제가 생긴다.
3 * 0 = 0 # 최악이다. 3 * 1 = 3 # 그대로 나온다. -> 3 + 1 = 4가 낫다
-
위와 같은 경우는 더 해주고 나머지 수에 대해서 곱해주면 가장 큰 수를 구할 수 있다.
-
알고리즘 문제에 경우 접근 자체를 어떻게 할 지 모를 경우
-
무려 Facebook에서 낸 문제라고 한다. (역시 어려울 수 밖에 라고 스스로 위로 해 본다)
-
-
정답 코드
input = [0, 3, 5, 6, 1, 2, 4] def find_max_value(array): multiply_sum = 0 for number in array: if number <= 1 or multiply_sum <= 1: multiply_sum += number else: multiply_sum *= number return multiply_sum result = find_max_value(input) print(result)