알고리즘 (아침스터디)

김하진·2022년 7월 19일
0

주문 가능한 음식

shop_menus = ["만두", "떡볶이", "오뎅", "사이다", "콜라"]
shop_orders = ["오뎅", "콜라", "만두"]


def is_available_to_order(menus, orders):
    menus_set = set(menus)
    for order in orders:
        if order not in menus_set:
            return False
    return True
result = is_available_to_order(shop_menus, shop_orders)
print(result)

shop_menus = ["만두", "떡볶이", "오뎅", "사이다", "콜라"]
shop_orders = ["오뎅", "콜라", "만두"]

처음에 리스트 정렬하고, for 문으로 돌리고 하다가.. 잘 안돼서 실패

생각해보니깐 set함수로 집합으로 만들면 중복검사를 편하게 할 수 있다.

더하거나 빼거나

numbers = [2, 3, 1]
target_number = 0
result_count = 0  # target 을 달성할 수 있는 모든 방법의 수를 담기 위한 변수


def get_count_of_ways_to_target_by_doing_plus_or_minus(array, target, current_index, current_sum):
    if current_index == len(array):  # 탈출조건!
        if current_sum == target:
            global result_count
            result_count += 1  # 마지막 다다랐을 때 합계를 추가해주면 됩니다.
        return
    get_count_of_ways_to_target_by_doing_plus_or_minus(array, target, current_index + 1,
                                                    current_sum + array[current_index])
    get_count_of_ways_to_target_by_doing_plus_or_minus(array, target, current_index + 1,
                                                    current_sum - array[current_index])


get_count_of_ways_to_target_by_doing_plus_or_minus(numbers, target_number, 0, 0)
# current_index 와 current_sum 에 0, 0을 넣은 이유는 시작하는 총액이 0, 시작 인덱스도 0이니까 그렇습니다!
print(result_count)  # 2가 반환됩니다!

요즘 자료규조랑, 알고리즘에 대해서 공부하는 시간을 늘리고 있는데, 재미는 있지만

아직은 이해가 안되고 어려운 부분들이 많이 있다.

알고리즘도 상황에 따라서 맞는 선택을 하는 연습을 해야 할 것 같다.

이문제라면 완전탐색, 이문제라면 이진탐색, 아니면 구현문제 등등

종류도 많고, 익숙해지려면 문제를 최대한 많이 풀어보는 수 밖에 없을 것 같다.

profile
진킴

0개의 댓글