Computer Science/알고리즘 31

[4.17] 문제 18. 최대 수익 알고리즘

어려움 나중에 복습해야겠다 문제 18. 최대 수익 알고리즘 입력 : 리스트 출력 : max - min 알고리즘 1 def max_profit(prices): n = len(prices) max_profit = 0 for i in range(0, n-1): for j in range(i+1, n): profit = prices[j] - prices[i] if profit > max_profit: max_profit = profit return max_profit stock = [1, 2, 3] print(max_profit(stock)) 알고리즘 2 파는 날을 중심으로 생각함. 오.. def max_profit(prices): n = len(prices) max_profit = 0 min_price = p..

[4.17] 응용 문제 1. 미로 찾기 알고리즘

모두의 알고리즘 with 파이썬 다섯째 마당 응용 문제 문제 16. 미로 찾기 알고리즘 1. 그래프로 모델링 그림 생략.. 2. 딕셔너리 maze = { "a" : ["e"], "e" : ["a", "i"], "i" : ["e", "m"], "m" : ["i", "n"], "n" : ["j", "m"], "j" : ["n", "f", "k"], "f" : ["b", "g", "j"], "b" : ["f", "c"], "c" : ["b", "d"], "d" : ["c"], "g" : ["f", "h"], "h" : ["g", "l"], "l" : ["h", "p"], "p" : ["l"], "k" : ["j", "o"], "o" : ["k"] } 3. 출구 탐색 알고리즘 입력 : maze, 출발점 star..

[4.17] 문제 15. 친구의 친구 찾기 - 그래프

문제 15. 친구의 친구 찾기 -그래프 그래프 * 꼭짓점 - vertex, 선 - edge 파이썬으로 그래프 표현하기 딕셔너리, 리스트 이용함 graph = { 'Summer' = ['Mike', 'John', 'Justin'], 'Mike' = ['Summer', 'Justin'], 'Justin' = ['Summer', 'Mike', 'John', 'May'], 'John' = ['Summer', 'Justin'], 'May' = ['Justin', 'Kim'] 'Kim' = ['May'] 'Tom' = ['Jerry'] 'Jerry' = ['Tom'] } 모든 친구 찾기 알고리즘 1차 시도 - 앞으로 처리할 사람을 qu에 추가한다. - 이미 qu에 추가한 사람의 집합을 done이라고 한다. - 출발..

[4.16] 문제 14. 동명이인 찾기(딕셔너리)

문제 14. 동명이인 찾기 - 딕셔너리 딕셔너리 딕셔너리 dictionary : 기준이 되는 key와 value의 대응관계를 저장하는 자료 구조 * 해시 테이블 hash table : key - value를 대응시켜 자료를 보관하는 자료 구조 #리스트 만들기 a = {} a = dict() #key : value a = {"key1": "value1", "key2":"value2", "key3":"value3"} #key 불러오기 print(a["key1"]) #새 값을 추가하기 a["key4"] = "value4" len(a) a[key] a[key] = value del a[key] a.clear() key in a 동명이인 찾는 알고리즘 def find_same_name(a): name_dict =..

[4.16] 문제 13. 회문 찾기(큐와 스택)

넷째 마당 - 자료구조 문제 13. 회문 찾기(큐와 스택) 회문 : 뒤집어도 똑같은 글자, 문장(일요일, 스위스, 기러기 등) 큐queue : '줄 서기' 앞 [A B C D] 뒤 인큐 enqueue : 앞 [A B C D E] 뒤 디큐 dequeue : 앞 [B C D E] 뒤 (A) 스택 stack : '접시 쌓기' Last in First Out 푸시 push 처음 [A B C D E] 끝 팝 pop 처음 [A B C D] 끝 (E) 리스트로 큐/스택 만들기 queue : qu.append(x), qu.pop(0) stack : st.append(x), st.pop() Q. 주어진 문장은 회문인가? def palindrome(s): qu = [] st = [] for x in s: #주어진 글자가 ..

[4.16] 문제 12. 이분 탐색 Binary search

문제 12. 이분 탐색 이분 탐색은 찾는 값을 향한 '방향'으로만 탐색하는 것이다. 입력 리스트는 이미 정렬되어 있음. 알고리즘 생각중.. 입력 : (리스트, 찾는 값) 새로 정의 : (리스트, 찾는 값, i) 0. 종료 조건 - len 리스트 == 1 ? 1. 중간 위치 도출해서 값을 비교한다. - mid = len(a) // 2 - i = mid - 중간값 = 찾는 값이면 -> return mid - 중간값 재귀함수 [:중간값] - 중간값 > 찾는 값이면 -> 재귀함수 [중간값:] 값 말고 위치를 기억해야 한다. 그래서 return i를 해야함. 이렇게 끄적끄적 적고 만들어봐도 절대 혼자 못한다. 첨엔 걍 예시코드 봐야함. 이분 탐색 알고리즘 def binary_search(a,..