절대 경로와 상대 경로는 이야기를 많이 들어보셨을 거에요. 이는 어디를 기준으로 잡느냐에 따라서 차이가 나는데요. 간단하게 실습을 한 번 해 봅시다. 먼저, C 폴더 밑에 있는 User 밑에 있는 cho 폴더를 보면, gahui와 gahui2가 있어요. 여기에는 어떤 녀석들이 들어가 있는지 봅시다. 먼저 gahui에 들어가 봅시다. 그러면 a.c와 실행파일 a가 있어요. 그리고 폴더 f에 들어가 봅시다. 그러면 왠 1.txt가 있는 것을 볼 수 있는데요. 이 파일을 한 번 열어봅시다. 그러면 "abcde"라는 문자열 1줄이 있는 것을 볼 수 있습니다. 그 다음에, cho 밑에 있는 또 다른 폴더인 gahui2를 열어봅시다. 이 안에도 1.txt가 있는데요. 여기에는 저 이름이 내 개라는 문자열이 쓰여져 ..
분류 전체보기 검색 결과
이분 탐색을 할 때 유용한 2가지 함수를 소개해 드리고자 합니다. c++의 헤더에는 lower_bound 함수가 있어요. 그리고 upper_bound 함수가 있는데요. random 접근이 가능한 경우, O(log)에 수행하게 해 주는 함수입니다. lower_bound(first_iter,last_iter,key); upper_bound(first_iter,last_iter,key); 대충 요약하면 [first_iter, last_iter)에 대해서, key값보다 크거나 같은 최초의 위치, key 값보다 큰 최초의 위치를 리턴하는데요. iterator를 리턴해요. 위치를 리턴한다는 것입니다. 물론, Object를 lower_bound, upper_bound를 써야 할 경우도 종종 있는데요. 이러한 경우, ..
오늘은 Java의 Thread 클래스 안에 있는 join 메서드가 어떤 식으로 동작하는지 간단하게 알아봅시다. 아래 예제 프로그램을 실행시켜 봅시다. 어떻게 실행이 될까요? worker a가 실행이 끝난 후에, Main 쓰레드가 종료됩니다. 그러면, join() 함수는 특정한 스레드가 종료될 때 까지 기다릴 때 쓴다는 건데, 어떤 식으로 동작하는지는 천천히 뜯어보도록 하겠습니다. a.run()을 호출하였습니다. 그 순간, worker a가 run() 메소드를 호출하면서 돌아갑니다. 대충 그림과 같은 상황입니다. 그 다음에, Main 스레드에서는 a.join()을 호출하는데요. 여기서 무슨 일이 일어나는지만 간단하게 봅시다. join을 호출할 때, 매개 변수가 없으면 내부적으로 join(0)을 호출합니다...
자기 참조 구조체란, 자기 구조체와 같은 형을 point 하는 필드가 있는 구조체를 말해요. 왜 갑자기 자료구조가 안 나오고, 이것이 먼저 나왔을까요? 이것을 이해해야 List를 이해할 수 있기 때문이에요. 코드를 봅시다. 보시면 struct node 안에, struct node를 가리키는 포인터가 있음을 알 수 있어요. 그렇다면, node 안의 어떠한 필드가 또 다른 node를 가리킬 수 있다는 것을 의미합니다. 이런 식으로 말입니다. 이게 single로 이어져 있으면 모르겠지만, double로 이어져 있다면, 삭제할 위치라던지, 삽입할 위치만 알고 있다면, 삽입과 삭제하는 연산을 금방 할 수 있기 때문에, List를 쓰고요. C언어에서 List를 구현하기 위해서 자기 참조 구조체를 쓰는 셈입니다. "..
정렬 알고리즘 중, 버블 정렬은 서로 이웃한 원소들끼리 비교하면서 우선 순위가 낮은 데이터를 뒤로 보내는 정렬을 합니다. 이것도, insert, selection과 같이 시간 복잡도는 O(n^2)인데요. 따로 처리를 하지 않는 이상, 어떠한 경우에도, 제곱에 비례하기 때문에, merge나 heap에 비해서는 거의 안 쓰인다고 보시면 되어요. 배열 [2, 1, 4, 5, 3]을 오름차순으로 정렬해 볼 겁니다. 그러면 수가 작을수록 우선 순위가 높고, 수가 클수록 우선 순위가 낮다는 이야기가 되겠어요. 인접한 두 수 a와 b가 있다면, a보다 b가 더 작다면, a랑 b를 바꾸는 식으로 동작할 듯 싶습니다. 배열이 이렇게 있어요. 아직 sorting 하기 전이에요. 총 5회전을 돌 건데요. 이것은 1회전입니다..
최근댓글