전체 글(155)
-
[軍爭(군쟁)편 3장] - 손자병법
故軍爭爲利 고군쟁위리 그러므로 군쟁(軍爭)은 이익이 되기도 하지만 軍爭爲危 군쟁위위 군쟁은 위험해지기도 하다. 危: 위태롭다 [위] 擧軍而爭利 거군이쟁리 전군(擧軍)을 통해 이익을 다툰다면 擧(거)에는 '모두'라는 뜻이 있다. [참조] 올인(all-in) 전략이나 마찬가지. 則不及 즉불급 오히려 뒤쳐질 수 있다. 及: 미치다(reach) [급] 委軍而爭利 위군이쟁리 군대는 내버려두고 이익을 다툰다면 委: 맡기다, 쌓다, 버리다 [위] [참조] 자신의 군대를 우선으로 생각하지 않고 이익에만 몰두하는 것이나 마찬가지. 則輜重捐 즉치중연 군수물자(輜重)를 버리는 것이다. 輜: 짐 싣는 수레 [치] 捐: 버리다 [연] 是故卷甲而趨 시고권갑이추 그러므로 갑옷을 말아 올리고(卷) 달려 卷: 책, 두루마리, 말(리)..
2022.04.21 -
[軍爭(군쟁)편 2장] - 손자병법
軍爭之難者 군쟁지난자 군쟁이 어려운 것은 以迂爲直 이우위직 우회하여도 직진하는 것처럼 하고 迂: 멀다, 굽다, 피하다 [우] 以患爲利 이환위리 근심거리를 이익으로 삼아야하기 때문이다. 故迂其途 고우기도 그러므로 우회하여도 途: 길 [도] 而誘之以利 이유지이리 이익으로써 (적을) 꾀어내라. 誘: 꾀다 [유] 後人發 후인발 (적보다) 뒤에 출발하여도 先人至 선인지 (적보다) 먼저 도착할 수 있다. 此知迂直之計者也 차지우직지계자야 이것이 우직지계(迂直之計)를 아는 것이다. 此: 이(this) [차]
2022.04.21 -
[軍爭(군쟁)편 1장] - 손자병법
孫子曰 손자왈 손자가 말하였다. 凡用兵之法 범용병지법 군대를 운용하는 방법은 將受命於君 장수명어군 장군이 군주의 명을 받으면 受: 받다 [수] 合軍聚衆 합군취중 군대를 조합하여 병사(衆)를 모으고 聚: 모이다, 모으다 [취] 交和而舍 교화이사 막사를 적과 대치하여 두는 것이다. 舍: 집 [사] 莫難於軍爭 막난어군쟁 유리한 위치를 얻기 위해 싸우는 것(軍爭)만큼 어려운 것이 없다. 莫: 없다 [막] 군쟁(軍爭)은 적보다 유리한 위치, 상황, 조건 등을 만드는 것으로 보면 된다.
2022.04.21 -
이진트리의 깊이우선탐색(DFS) (+전위순회, +중위순회, +후위순회)
문제인식) 다음과 같은 이진트리가 있다. 위 트리를 전위순회, 중위순회, 후위순회하려면 어떻게 해야할까? 참고로 전위순회, 중위순회, 후위순회에 대한 이름이 붙은 기준은 루트노드에 대한 작업순서를 기준으로 이름이 붙었다고 생각하면 쉬울 것이다. 즉, 루트노드를 먼저 작업한다면 전위순회 (루트노드 → 왼쪽서브트리 → 오른쪽서브트리), 루트노드를 중간에 작업한다면 중위순회 (왼쪽서브트리 → 루트노드 → 오른쪽서브트리), 루트노드를 마지막에 작업한다면 후위순회 (왼쪽서브트리 → 오른쪽서브트리 → 루트노드) 가 되는 것이다. 이렇게 각 순회에 따른 출력 결과는 다음과 같아야 할 것이다. 전위순회 1 2 4 5 3 6 7 중위순회 4 2 5 1 6 3 7 후위순회 4 5 2 6 7 3 1 왜 이렇게 나오는지 전위..
2022.04.21 -
조합 (Combination)
- 조합 (Combination) - n개의 수를 중복을 허용하지 않고(start) r개를 순서 상관없이 나열할 수 있는 모든 경우의 수 (1 ≤ r ≤ n) 문제인식) 0부터 9(n)까지의 수가 있다. 이들을 이용하여 4(r)개의 수를 중복없이, 순서 상관없이 나열하고자 할 때 가능한 모든 경우를 각각 한 줄씩 출력하고자 한다면 어떻게 해야할까? int n=9, r=4; 해결과정) 1) 출력에 이용할 배열(a[4])을 준비한다. 2) 함수의 인수를 idx, start로 설정한다. idx는 a배열에 재귀진입하기위한 인덱스, start는 중복방지와 오름차순을 위한 시작점이다. 만약 1, 2, 3, 4의 네 수를 순열로 처리한다면... (이 경우, n=4, r=4, start=1인 셈) "1 2 3 4" "..
2022.04.20 -
순열 (Permutation) - 교환방식
- 순열 (Permutation) - n개의 수를 중복을 허용하지 않고(visited) r개를 나열할 수 있는 모든 경우의 수 (1 ≤ r ≤ n) 문제인식) 1부터 3(n)까지의 수가 있다. 이들을 이용하여 3(r)개의 수를 중복없이 나열하고자 할 때 가능한 모든 경우를 각각 한 줄씩 출력하고자 한다면 어떻게 해야할까? int n=3, r=3; 해결과정) 1) 현재위치(dpth)와 맞바꿀 위치(i)간에 swap을 진행한다. dpth는 재귀의 깊이이자 맞바꿀 위치의 시작. 2) 맞바꿀 위치(dpth)를 옮기기위해 다음 위치(dpth+1)로 재귀적 진입을 한다. 3) 깊은재귀가 끝나면 윈위치시킨다.(다시 swap) (※ [더보기]를 클릭하면 C/C++ 소스코드를 참조할 수 있습니다.) 더보기 #includ..
2022.04.11