TIL: Algorithm

hihyeon_cho·2022년 11월 14일
1

TIL

목록 보기
11/101

Algorithm

global 변수

: 함수내부에서 외부에 있는 변수를 쓸 때 사용.

a = 3

def sum():
   global a
   b = 9
   return a + b

print(sum())

정렬

: 데이터를 순서대로 나열하는 방법

버블정렬

: 첫번째-두번째, 두번째-세번째, 세번째-네번째 ... 이런식으로 비교하여 교환하며 정렬하는 방식

[3, 8, 2]  # 정렬되지 않은 배열

1) 		[3, 8, 2]
        38을 비교!
        순서가 3 < 8 이 맞다면 그대로 두기!

2)		[3, 8, 2]
        82를 비교!
        8 > 2 이므로 둘을 교환!
        
   	 => [3, 2, 8] 
     
    
3)		[3, 2, 8]
       	32를 비교합니다!
        3 > 2 이니까 둘을 교환!
        
    => [2, 3, 8] 정렬 끝!

선택정렬

: 선택해서 정렬하는 방식

[ 8, 6, 1, 3 ]

1)		[ 8, 6, 1, 3 ]
        86, 1, 3을 차례차례 비교하여,
	     그 중 가장 작은 1과 맨 앞 자리인 8을 교체!
       => [1, 6, 8, 3]
       
2)		[1, 6, 8, 3]
        	68, 3을 차례차례 비교
        -> 그 중 가장 작은 3과 두번째 앞 자리인 6을 교체
       
   =>  [1, 3, 8, 6] 


3)	   [1, 3, 8, 6] 
        	  86을 비교
        -> 6 < 8이므로 세번째 앞 자리인 8을 교체
        
   =>  [1, 3, 6, 8] 

삽입정렬

: 하나씩 올바른 위치에 삽입하는 방식. 필요할 때만 위치를 변경하므로 효율적인 방식이다.

[5, 2, 7, 3]
 
1 ) [ 5, 2, 7, 3]
    5를 기준점으로 2를 넣었다는 가정하에 비교하기 시작한다.
    2가 들어왔을때, 5와 비교해서 
 	5 > 2 이므로 2와 자리를 교환하게 된다.
    
  =>  [2, 5, 7, 3]

2 ) [2, 5, 7, 3]
	다음으로 7이 들어왔을 때, 2,5와 비교하게 되는데
    5 > 7, 2 > 7이므로 그대로 둔다.
  
  =>  [2, 5, 7, 3]

3 ) [2, 5, 7, 3]
	3이 들어왔다고 할 때, 앞의 2,5,7과 비교하는데,
    7 > 3이므로 [2, 5, 3, 7] 이 되고,
    5 > 3이므로 [2, 3, 5, 7] 가 된다.
    2 < 3이니까 그대로 둔다.
    
    => [2, 3, 5, 7] 정렬 끝!

병합정렬

: 배열의 앞부분과 뒷부분으로 나누어 각각 정렬하여 병합하는 작업을 반복하는 알고리즘이다.

A : [1,2,4,7] #정렬된 배열 A
B : [3,5,6,8]  #정렬된 배열 B
C : [] #A와 B를 합칠 배열 C

1 ) A : [1,2,4,7]
	B : [3,5,6,8] 
    13을 비교하여 1 < 3이므로 1이 C에 들어간다. 
    C : [1]
    

2 ) A : [1,2,4,7]
	B : [3,5,6,8] 
    23을 비교하여 2 < 3이므로 2가 C에 들어간다. 
    C : [1,2]
    
3 ) A : [1,2,4,7]
	B : [3,5,6,8]  
    43을 비교하여 4 > 3이므로 3이 C에 들어간다. 
    C : [1,2,3]

3 ) A : [1,2,4,7]
	B : [3,5,6,8] 
    45를 비교하여 4 < 5이므로 4가 C에 들어간다. 
    C : [1,2,3,4]
    
4 ) A : [1,2,4,7]
	B : [3,5,6,8] 
    75를 비교하여 7 > 5이므로 5가 C에 들어간다. 
    C : [1,2,3,4,5]
    
5 ) A : [1,2,4,7]
	B : [3,5,6,8]  
    76을 비교하여 7 > 6이므로 6이 C에 들어간다. 
    C : [1,2,3,4,5,6]

6 ) A : [1,2,4,7]
	B : [3,5,6,8]  
    78을 비교하여 7 < 8이므로 7이 C에 들어간다. 
    C : [1,2,3,4,5,6,7]

7) 아직 C에 못들어간 8을 C에 추가해주면
	C : [1,2,3,4,5,6,7,8]

분할정복 ?

: 문제를 작은 2개의 문제로 분리하고 각각 해결한 뒤, 결과를 모아 원래의 문제를 해결하는 전략.

[7,3,4,6,5,2,1,8]라는 배열이 있을 때, 
반으로 나누면 [7,3,4,6][5,2,1,8],
다시 반으로 나누면 [7,3][4,6][5,2][1,8],
다시 반으로 나누면 [7][3][4][6][5][2][1][8]이 된다. 

이때, 이 배열을 2개씩 병합하면 
[7][3] => [3,7]
[4][6] => [4,6]
[5][2] => [2,5]
[1][8] => [1,8]

다시 병합하면 
[3,7][4,6] => [3,4,6,7]
[2,5][1,8] => [1,2,5,8]

다시 병합하면
[3,4,6,7][1,2,5,8] => [1,2,3,4,5,6,7,8]이 된다.

이렇게 문제를 쪼개서 전체를 해결하는 것이 분할정복!

일주일동안 알고리즘 공부로 걱정이 많았는데, 오늘은 해소가 되었던 하루였다. 매니저님의 공감과 격려가 많은 힘이 되었던 하루..🥺 우선순위를 잘 생각해서 공부하고, 알고리즘을 급하게 이해하려고 하지 말아야겠다..! 일단은 개념이해만 ! 🔥

profile
코딩은 짜릿해 늘 새로워 ✨

1개의 댓글

comment-user-thumbnail
2022년 11월 15일

개념정리 굿!
천천히 화이팅입니다! 진심으로 응원해요!

답글 달기