파이썬알고리즘
프로그래머스 카카오 인형 뽑기 파이썬
프로그래머스 카카오 인형 뽑기 def solution(board, moves): box = [] count = 0 for i in moves: for j in range(len(board)): if board[j][i - 1] != 0: box.append(board[j][i - 1]) board[j][i - 1] = 0 break stack = [] while box: if not stack: stack.append(box[0]) box.pop(0) elif stack[-1] != box[0]: stack.append(box.pop(0)) else: stack.pop(-1) box.pop(0) count += 2 return count 마지막에 모든 테스트 10개 다 통과했는데 1개가 자꾸 런타임에러 ..
Python 이분탐색 알고리즘 활용
Python 이분탐색 알고리즘 활용 shop_menus = ["만두", "떡볶이", "오뎅", "사이다", "콜라"] shop_orders = ["오뎅", "콜라", "만두"] def is_available_to_order(menus, orders): shop_menus.sort() # 정렬 for order in orders : # order를 orders에서 하나하나 뽑아서 밑에있는 이분탐색 함수를 돌려보면 될 것 if not is_existing_target_number_binary(order, shop_menus): # 하나라도 존재하지 않는다면 return False return True ## 이분탐색의 코드 def is_existing_target_number_binary(target, arr..
Python 재귀함수 알고리즘 Factorial, 회문 검사
Factorial # Factorial(N) = N*Factorial(N-1) # ... # Factorial(1) = 1 def factorial(n): if n == 1: return 1 return n * factorial(n-1) print(factorial(5)) factorial 예시. 함수에 5를 넣었을때 5x4x3x2x1 이렇게 작동되어 결과값 120이 나온다. 여기서 주의할 점은 탈출 조건을 만들어야 한다. 이 경우는 if를 활용하여 n이 1과 같아질 때 1을 돌려주어 함수가 끝난다. 만약 그렇지 않을 경우엔 계속해서 n * factorial(n-1)이 작동되어 곱셈을 더해간다. 회문 검사 input = "소주만병만주소" def is_palindrome(string): if string[..
Python 이진탐색 알고리즘
Python 이진탐색 알고리즘 1~100 사이에서 숫자 하나를 맞춰야 한다면 알고리즘의 관점에선 가장 효율적인 방법은 범위의 절반인 50을 시도해보는 것이다. 대답이 UP이라면 1~49는 후보에서 없어지고, 대답이 DOWN이라면 51~100이 후보에서 없어지기 때문이다. 이러한 방법을 이진탐색이라 한다. finding_target = 14 finding_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] def is_existing_target_number_binary(target, array): current_min = 0 current_max = len(array) -1 current_guess = current_min + curren..