코딩테스트

하루 코테 3개 풀기 - 15일차

songsua 2024. 12. 24. 17:55

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

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


def is_available_to_order(menus, orders):
    orders.sort()
    menus.sort()
    for i in orders :
        if i not in menus:
            return False
    return True


result = is_available_to_order(shop_menus, shop_orders)
print(result)

 

이렇게 하면 시간복잡도가 비효율적이기 때문에 set() 함수를 이용해서 시간복잡도를 줄여나가볼것이다.

  • set(): 단일 변수를 여러 항목으로 저장하는 것이다. 인덱스로 접근할 수 없으며, 중복은 허용하지 않는다.

배달 음식 같이 메뉴에 있는지 없는지만 확인하면 되기 때문에 중복이든 아니든 상관하지 않는다.

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


def is_available_to_order(menus, orders):
    menus_set = set(menus)
    for i in orders :
        if i not in menus_set :
            return False
        return True

result = is_available_to_order(shop_menus, shop_orders)
print(result)

 

 

2. 더하거나 빼거나 
https://school.programmers.co.kr/learn/courses/30/lessons/43165

Q. 음이 아닌 정수들로 이루어진 배열이 있다. 이 수를 적절히 더하거나 빼서 특정한 숫자를 만들려고 한다. 
예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들기 위해서는 다음 다섯 방법을 쓸 수 있다.

-1+1+1+1+1 = 3
+1-1+1+1+1 = 3
+1+1-1+1+1 = 3
+1+1+1-1+1 = 3
+1+1+1+1-1 = 3

사용할 수 있는 숫자가 담긴 배열 numbers, 
타겟 넘버 target_number이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 반환하시오.

 

def solution(numbers, target):
    # 결과를 저장할 변수
    count = [0]  # 리스트를 사용해서 값을 공유할 수 있도록 함

    def get_plus_minus(numbers, current_index, current_sum):
        if current_index == len(numbers):  # 배열 끝에 도달한 경우
            if current_sum == target:  # 합이 target과 같다면
                count[0] += 1  # 경우의 수 증가
            return

        # 현재 숫자를 더하거나 빼는 두 가지 경우의 수를 재귀적으로 탐색
        get_plus_minus(numbers, current_index + 1, current_sum - numbers[current_index])
        get_plus_minus(numbers, current_index + 1, current_sum + numbers[current_index])

    # 초기 호출
    get_plus_minus(numbers, 0, 0)

    # 결과 반환
    return count[0]

 

 

3. 문자 수 세기

https://school.programmers.co.kr/learn/courses/30/lessons/181902

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

def solution(my_string):
    answer = [0] * 52

    for idx in range(len(my_string)) :
        #대문자인 경우
        
        if 'A' <= my_string[idx] <= 'Z' :
            num_idx = ord(my_string[idx]) - ord("A")
            answer[num_idx] += 1

        elif 'a' <= my_string[idx] <= 'z' :
            num_idx = ord(my_string[idx]) - ord("a") +26
            answer[num_idx] += 1
        
    return answer