728x90

memoization 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
import time
memo = [01]
 
def fibo_memoi(num):
    global memo
    if num >= 2 and len(memo) <= num:
        memo.append(fibo_memoi(num-1+ fibo_memoi(num-2))
    return memo[num]
 
start_time = time.time()
res = fibo_memoi(34)
end_time = time.time()
spent_time = end_time - start_time
print(res, "time:", spent_time * 1000"ms")
cs


0.0ms 걸림


그렇다고 모든 문제에 memoization을 사용할 수는 없음


이분탐색

이분탐색 기법을 이용해 효율적으로 값을 찾아보세요


오름차순으로 정렬된 배열에서 원하는 숫자(target)을 찾는 알고리즘


1. 배열 전체의 중간 값을 target 값과 비교

2. 중간 값이 target 값보다 크면 왼쪽 부분만 비교

3. 왼쪽 부분의 중간 값을 다시 target과 비교


이분탐색 방법에는 2가지가 있다.

반복, 재귀


반복


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
target = 25
m_list = [30942792213372547539819327]
length = len(m_list)
m_list.sort()
print(m_list)
 
#반복
left = 0
right = length - 1
while left <= right:
    mid = (right+left)//2
    if m_list[mid] == target:
        print(mid+1)
        break
    elif m_list[mid] > target:
        right = mid - 1
    else:
        left = mid + 1
cs


재귀


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#재귀
def binarySearch(array, target_value, left_index, right_index):
    mid_index = (left_index + right_index)//2
    print(mid_index)
    mid_value = array[mid_index]
    if target_value == mid_value:
        print("answer(index):", mid_index+1)
    elif target_value < mid_value:
        binarySearch(array, target_value, left_index, mid_index-1)
    else:
        binarySearch(array, target_value, mid_index+1, right_index)
 
target = 25
m_list = [30942792213372547539819327]
length = len(m_list)
m_list.sort()
print(m_list)
 
 
left = 0
right = length - 1
binarySearch(m_list, target, left, right)
cs


그래프

엣지를 지나 그래프의 노드를 탐험해봅시다.


dfs, bfs, 완전탐색, 그리디도 사실 그래프다.

그래서 출제 빈도가 낮다고 표시되어 있는 것


프로그래머스 문제 풀이


해시 문제

완주하지 못한 선수




내 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
def solution(participant, completion):
    dictmp = {}
    
    for i in participant:
        try:dictmp[i] += 1
        except:dictmp[i] = 1
    
    for i in completion:
        if i in dictmp:
            dictmp[i] -= 1
    
    for i in dictmp:
        if dictmp[i]==1:
            return i
cs


남의 코드 1


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def solution(participant, completion):
    answer = ''
    playerList = {}
    
    for i in participant:
        if i in playerList:
            playerList[i] = playerList.get(i)-1
        else:
            playerList[i] = 0
        
    for i in completion:
        if i in playerList:
            playerList[i] = playerList.get(i)+1
    
    for i in participant:
        if playerList.get(i) <= 0:
            answer=i
            break
    
    return answer
cs


남의 코드 2


1
2
3
4
5
6
7
8
9
def solution(participant, completion):
    mydict={}
    for i in participant:
        mydict[i]=mydict.get(i,0)+1
    for i in completion:
        mydict[i]-=1
    answer=[x for x in mydict if mydict.get(x)>0]
    
    return answer[0]
cs


남의 코드 3


1
2
3
4
5
6
7
8
9
def solution(participant, completion):
    participant.sort()
    completion.sort()
    for i in range(len(participant)):
        try:
            if participant[i] != completion[i]:
                return participant[i]
        except:
            return participant[i]
cs


스택/큐 문제

기능개발







728x90
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기