전체 글(155)
-
순열 (Permutation) - 삽입방식 | (+중복순열, +함수사용)
- 순열 (Permutation) - n개의 수를 중복을 허용하지 않고(visited) r개를 나열할 수 있는 모든 경우의 수 (1 ≤ r ≤ n) 문제인식) 0부터 9(n)까지의 수가 있다. 이들을 이용하여 4(r)개의 수를 중복없이 나열하고자 할 때 가능한 모든 경우를 각각 한 줄씩 출력하고자 한다면 어떻게 해야할까? int n=9, r=4; 해결과정) 1) 출력에 이용할 배열(a[4]-주황)과 숫자의 중복방지를 위한 방문여부배열(visited[10]-파랑)을 준비한다. 2) 이 배열의 인덱스(idx)마다 0~9까지 삽입하는 반복문을 실행한다. idx는 재귀를 위한 인덱스. 3) 현재 인덱스(idx)에서 사용한 수(i)를 다음 인덱스(idx+1)에서 사용하지 않기 위해 방문처리(visited[i]=1..
2022.04.10 -
삽입정렬 (Insertion Sort)
- 삽입정렬(Insertion Sort) - 정렬을 수행할 위치(i)의 값을 저장(tmp)하고 미리 정렬된 왼쪽 부분(j) 중 적절한 위치에 삽입하는 정렬 문제인식) 다음 그림과 같은 수(數)의 배열이 있다. int a[10] = {10, 2, 1, 9, 7, 4, 5, 8, 6, 3}; 이 배열을 오름차순 정렬, 즉 가장 작은 수부터 차례대로 정렬하기 위해선 어떻게 프로그래밍 해야할까? 해결과정) 0) 아래 그림은 이미 4번의 정렬이 이뤄졌다고 가정한 상태이다. 즉, 5번째의 정렬이 이뤄져야 할 상태이며, 4번째 원소까지는 이미 오름차순 정렬이 되어있는 부분이다. 1) 정렬을 수행할 위치를 선정하고 그 값을 저장한다. 2) 왼편에 있는 원소들이 저장한 값보다 크다면 한 칸씩 뒤로 밀어둔다. 3) 적절..
2022.03.29 -
버블정렬 (Bubble Sort) | (+Special Sort)
- 버블정렬(Bubble Sort) - 탐색해나갈 경계(i)를 정하고 현재 위치(j)의 바로 옆 위치(j+1)의 원소들과 비교, 맞바꾸는 정렬 문제인식) 다음 그림과 같은 수(數)의 배열이 있다. int a[10] = {10, 2, 1, 9, 7, 4, 5, 8, 6, 3}; 이 배열을 오름차순 정렬, 즉 가장 작은 수부터 차례대로 정렬하기 위해선 어떻게 프로그래밍 해야할까? 해결과정) 1) 탐색해나갈 범위의 경계를 잡는다. 2) 범위를 잡았으면 현재 위치의 바로 옆 원소와 비교, 맞바꾸기를 경계전까지 연속적으로 실행해나간다. (※ [더보기]를 클릭하면 C/C++ 소스코드를 참조할 수 있습니다.) 더보기 int n, i, j, idx, tmp; int a[10] = {10, 2, 1, 9, 7, 4, ..
2022.03.28 -
선택정렬 (Selection Sort)
- 선택정렬(Selection Sort) - 기준 위치(i)에서 나머지 원소들을 탐색(j)하여 가장 작은 값의 위치(idx)를 선택하고 맞바꾸는 정렬 문제인식) 다음 그림과 같은 수(數)의 배열이 있다. int a[10] = {2, 10, 1, 9, 7, 4, 5, 8, 3, 6}; 이 배열을 오름차순 정렬, 즉 가장 작은 수부터 차례대로 정렬하기 위해선 어떻게 프로그래밍 해야할까? 해결과정) 1) 기준 위치를 배열의 가장 왼쪽부터 차례대로 잡아나갈 것이고, 2) 기준위치를 잡았으면 그 나머지 원소들을 탐색하여 그들 중 가장 작은 값(최솟값)의 위치를 찾을 것이다. (값 자체가 아닌 위치를 찾는 이유는 곧 나온다.) 3) 그리고는 기준 위치의 원소랑 최솟값 위치의 원소랑 맞바꾸는 것이다. (※ [더보기]..
2022.03.28 -
[虛實(허실)편 7장] - 손자병법
夫兵形象水 부병형상수 무릇 군대의 형태는 물의 형태를 띄어야 한다. 象: 본뜨다, 코끼리 [상] 水之形避高而趨下 수지형피고이추하 물의 형태는 높은 곳을 피해 아래로 향한다. 避: 피하다 [피] 趨: 달리다, 향하다 [추] | 서두르다, 재촉하다 [촉] 兵之形 병지형 군대의 형태란 避實而擊虛 피실이격허 견실한 곳을 피해 허술한 곳을 공격하는 것이다. 擊: 치다 [격] 水因地而制流 수인지이제류 물이 땅으로 인해 흐름이 제어되듯 兵因敵而制勝 병인적이제승 군대로 인해 적이 승리하는 것이 제어된다. 故兵無常勢 고병무상세 그러므로 군대의 영원한 형세(勢)가 없고 常: 항상 [상] 水無常形 수무상형 물은 영원한 형태가 없다. 能因敵變化而取勝者 능인적변화이취승자 적이 변화함에 따라 승리를 얻는 것은 取: 취하다 [취]..
2022.03.23 -
[虛實(허실)편 6장] - 손자병법
故形兵之極 고형병지극 본디 군대의 배치(形)의 끝은 極: 다하다, 극진하다 [극] 至於無形 지어무형 형태가 없음(無形)에 다다르는 것이다. 無形則深間不能窺 무형즉심간불능규 형태가 없으면 깊이 간첩(間)이 있어도 엿볼 수 없다. 窺: 엿보다 [규] 智者不能謀 지자불능모 현명한 자라도 꾀할 수 없다. 智: 슬기, 지혜 [지] 因形而錯勝於衆 인형이조승어중 이러한 배치(形)로 인하여 사람들은 이겼다고만 하지 錯: 어긋나다, 섞이다 [착] | 그만두다 [조] 이 문구는 [形(형)편 3장] 포스트와 참조하면 비슷한 내용임을 알 수 있다. 衆不能知 중불능지 그들은 알 수는 없다. 人皆知我所以勝之形 인개지아소이승지형 사람들 모두 내가 이길 수 있는 형태에 있었다고 알지 皆: 다, 모두 [개] 而莫知吾所以制勝之形 이막지..
2022.03.23