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('쿠니', '벼리', '달이')
  • **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]
  • 문제를 처음 보았는 때 내 머릿속 사고

    1. 모든 수를 곱셈으로 연산하면 가장 큰 수 나오는 거 아닌가?
    2. 0을 보며 ‘그렇게는 쉽게 안 되겠네’ 라고 깨달음
    3. 그렇다면 모든 경우의 수를 비교 하여 구해야 되나? ($2^6$번..?)
    4. 저렇게 많은 연산을 하려면 어떻게..? (for문 덕지덕지? 재귀함수?)
    5. 모르겠다.

  • 정답을 보고 난 후

    1. 모든 수를 곱할 때가 가장 큰 수가 나오는 것은 맞다.

    2. 그런데, 0과 1을 곱할 때 문제가 생긴다.

      3 * 0 = 0 # 최악이다.
      3 * 1 = 3 # 그대로 나온다. -> 3 + 1 = 4가 낫다
    3. 위와 같은 경우는 더 해주고 나머지 수에 대해서 곱해주면 가장 큰 수를 구할 수 있다.

    4. 알고리즘 문제에 경우 접근 자체를 어떻게 할 지 모를 경우

    5. 무려 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)