ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 문제 - 배달의 민족 배달 가능 여부
    개발일지/알고리즘 2021. 12. 27. 20:26

    # 문제 

     

    Q. 배달의 민족 서버 개발자로 입사했다.
    상점에서 현재 가능한 메뉴가 ["떡볶이", "만두", "오뎅", "사이다", "콜라"] 일 때,
    유저가 ["오뎅", "콜라", "만두"] 를 주문했다.
    
    그렇다면, 현재 주문 가능한 상태인지 여부를 반환하시오.

     

    # 풀이과정

     

    해당 문제는 주문 목록 중 주문한 요리가 있으면 되는 문제로 주문을 순회하면서 메뉴에 있는지 파악해도 되지만 시간을 단추하기 위해 정렬 하여 순회하도록 하면 조금 더 빠르게 구할 수 있다고 생각했다. 

     

    shop_menus = ["만두", "떡볶이", "오뎅", "사이다", "콜라"]
    shop_orders = ["오뎅", "콜라", "만두", "햄버거"]
    
    
    def is_available_to_order(menus, orders):
        shop_menus.sort()	# menus 정렬
        shop_orders.sort()	# order 정렬
    
        checker = 0
        k = -1
        temp = menus
        for order in orders:	# order 순회
            temp = temp[k+1:]	# 있다고 판단되는 원소는 제외하고 그 이 후부터 탐색
            for i, menu in enumerate(temp):	# 남은 메뉴들을 순회 함
                if menu == order:	# 주문목록에 있는 메뉴가 있다면
                    k = i	# 현재 인덱스 저장
                    checker += 1	# 갯수 + 1
                    break	# 탈출
        if len(shop_orders) == checker:	# 주문 목록과 일치했던 갯수를 비교
    
            return True	# 일치한다면 메뉴에 전부 있는 메뉴
        else:
            return False	# 일치하지 않는다면 메뉴에 없는 메뉴
    
    
    result = is_available_to_order(shop_menus, shop_orders)
    print(result)

     

    하지만 코드를 다 짜고 몇일 뒤에 다시 확인해보니 정렬을 하는 의미 조금만 있다고 생각이 바꼈는데.

    순회를 반복하면 비교할 대상이 줄어드는 부분 정도 이다 .

    원래대로라면 5 > 5 > 5 > 5 > 5  번순회해야하지만 5 > 4> 3> 2 > 1 순회하기 때문에 속도 저하는 일어났을 것이다 .

     

    하지만 답안 코드를 보면 이거보다 더 쉽고 효율적인 방법으로 작성을 하였다. 

     

    바로 집합 함수인 기존 함수인 set 함수를 이용한 것이다. 

     

     

    # 모범답안 코드

    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	# 내부에 해당 집합이 없다면 False 반환
        return True		# 있다면 True 
    
    
    result = is_available_to_order(shop_menus, shop_orders)
    print(result)

     

    내장 함수를 이용하여 더 빠르게 구할 수 있다. 

     


    '개발일지 > 알고리즘' 카테고리의 다른 글

    문제 - 올바른 괄호  (0) 2021.12.27
    문제 - 쓱 최대로 할인  (0) 2021.12.27
    문제 - 더하거나 빼거나  (0) 2021.12.27
    문제 - 문자열 뒤집기  (0) 2021.12.27
    문제 - 소수 나열하기  (0) 2021.12.27

    댓글

Designed by Tistory.