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
'코딩테스트' 카테고리의 다른 글
하루 코테 3개 풀기 - 17일차 (1) | 2024.12.28 |
---|---|
하루 코테 3개 풀기 - 16일차 (0) | 2024.12.28 |
하루 코테 3개 풀기 - 14일차 (0) | 2024.12.23 |
하루 코테 3개 풀기 - 13일차 (0) | 2024.12.23 |
하루 코테 3개 풀기 - 12일 차 (0) | 2024.12.20 |