CS기초
-
도커를 공부하다보면 마주치게 되는 가상화란, 가상화의 종류CS기초/OS,HW 2022. 12. 18. 22:34
가상화는 이해하기 어렵다. 그 이유는 추상적이고 눈에 보이지 않는 개념이기 때문이다. 수학을 잘하는 사람이 물리를 못하는 이유와 같다 (=나). 4차원, 5차원 공간이 나오고 중력에 대해 이야기 하는데, 나는 그것을 본적이 없어서 그저 머리로 상상해서 그려야하기 때문이다. 그래서 자료를 많이 보고, 실제로 사용해보는 수 밖에 없다. 그러니 처음 공부하는 사람들이 가상화 자료를 몇 번 읽어 봤다 해서 이해가 안 되는 것은 당연하니, 이 글이 위안이 되었으면 좋겠다 (사실 나도 아직 잘 모르겠다). 가상화는 말 그대로 하나의 물리 리소스를 여러 개인 것 처럼 나누는 것이다. 맥에서 도커를 띄우려면 Docker Desktop이라는 것을 설치해야하는데, Docker desktop 환경 설정에 보면 하드웨어 리소..
-
네트워크: 초보도 이해하길 바라는 CIDR블록이란?CS기초/Network 2022. 12. 4. 00:33
CS는 추상적일수록 어려운데, 그래서 운영체제와 네트워크가 정말 어렵다. 공부할 수록 어려움. 근데 설명되어있는 자료도 무슨말인지 모르겠어서 차라리 내가 적어보자하는 취지에서 적는 포스팅 (위키백과는 언제나 함께보면 좋습니다.) IPv4기준, IP주소는 사람이 볼 때는 10진수 4자리로 표기되지만, 컴퓨터가 이해할 때는 2진수 32자리로 처리되며, 비트단위로 끊어서 10진수를 2진수로 변환한다. 즉, 10진수.10진수.10진수.10진수 -> 2진수 8자리.2진수 8자리.2진수 8자리.2진수 8자리 => 8x4 => 32비트로 변환된다 (참고로 IPv4가 4옥텟이라서 IPv6는 6옥텟이고 48비트인가라고 생각할 수 있는데 IPv6은 16진수를 사용하고 8옥텟으로 표현함. IPv6 위키문서는 안 어려우니 한..
-
[Leet Code] Two Pointers (투포인터): 283. Move Zeroes - EasyCS기초/Coding Test 2022. 11. 14. 01:19
* Two Pointers 알고리즘 설명 문제 / 코드 개인적으로 label은 easy인데 swap하는 방법을 생각을 못해 medium보다 오래 걸렸던 문제. 아직도 a, b = b, a로 구현하는 코드가 익숙하지 않다. 그리고 문제 푸는 시간을 정확하게 기록하는 습관을 들여야하는데 계속 까먹는다.. Description move all zeros in the array to the end of array. Other integers keep it's order, just move foward to keep the length of the original input array. Requirements - Do in-place w/o making a copy of the array. How to solve..
-
[Leet Code] Two Pointers (투포인터): 977.Squares of a sorted array - EasyCS기초/Coding Test 2022. 11. 13. 19:20
* Two Pointers 알고리즘 설명 문제 / 코드 Description Return an array, sorted in non-decreasing order, of the squares of each value in the input array. How to solve The point is if there was/were neg numbers, the order of values can be changed from the input array after squaring. So we can't just return the original order of the input array but we need to compare the square of each value and change the val..
-
[알고리즘] 투포인터(Two pointers)와 슬라이딩 윈도우(Sliding window)CS기초/Algorithm, Data Structures 2022. 11. 13. 17:51
예제문제는 leetcode로 리뷰할 거기도 하고, 이미 다른데서 포스팅을 많이 해 둬서 특정 문제가 아닌 기본 개념에 집중해서 포스팅을 하려고한다. 투 포인터와 슬라이딩 윈도우의 기본 concept은 다음과 같다. 1. 배열의 특정 두 부분에 포인트를 설정한다. 해당 두 포인터의 사이는 "타겟이 있을 법한 범위"이다. 2. 조건에 따라 해당 포인트를 옮겨가며 타겟을 찾는다. 두 알고리즘의 원리는 같지만 투 포인터의 경우 포인터가 가리키는 값 두 개 자체에만 집중하기 때문에 반복문 loop마다 조건에 따라 포인트 사이의 거리가 달라질 수있지만 슬라이딩 윈도우의 경우 반복문 loop간 window사이의 교집합이 알고리즘의 핵심이기 때문에 두 점사이의 거리가 일정(/고정) 되어있다는 점이 특징이다. 시간 복잡..
-
[알고리즘] 선형 검색과 이진 검색CS기초/Algorithm, Data Structures 2022. 11. 13. 13:37
검색의 종류 - 배열 검색 - 연결 리스트 검색 - 트리 검색 1. 선형 검색 (linear search/ sequential search) 특징: 무작위로 늘어놓은 데이터 집합에서 검색 쉽게 말해 배열의 전체 요소를 모두 탐색하는 것을 뜻한다. - 보초법: 선형검색의 비용을 줄이는 방법. 반복을 종료하는 판단 횟수를 줄이는 역할을 하는 것이 보초. 시간 복잡도: O(n) 2. 이진 검색(binary search) (분할정복법(divde and conquer 중 하나) 특징: 일정한 규칙으로 늘어놓은 데이터 집합에서 검색, 즉 시퀀스가 정렬(sort)되어있어야함. 중간 값과 찾으려는 값의 대소비교를 통해 범위를 절반씩 줄여 나감. 시간복잡도: O(logn) 길이가 n인 배열을 이진 탐색하면 n, n/2,..
-
[Leet Code] Binary Search (이진탐색): 704.Binary Search, 278.First Bad Version, 35.Search Insert Position - EasyCS기초/Coding Test 2022. 11. 12. 00:55
* 이진 검색 알고리즘 포스팅 * Binary Search (문제 /코드) * First Bad Version (문제 / 코드) * Search Insert Position (문제 / 코드) 이름에서 느낄 수 있듯이 아주 간단한 이진 탐색 문제인데 푸는데 while문을 언제 종료해야 할지 몰라서, 그리고 두 번째 문제는 도대체 문제가 뭔 뜻인지 이해가 안가서 easy 세 문제 푸는데 무려 네 시간을 소비했다. 알고리즘 2주 쉬었는데 이렇게 감이 떨어질 수 있다는게 놀라웠다. 머리의 문제인가.. 그리고 티스토리 코드에디터 진짜 보기 싫음 Description Binary Search & Search Insert Position The problems ask to find "target" number in ..
-
운영체제 7: 코드를 통한 프로세스 작동 방식의 이해CS기초/OS,HW 2022. 5. 30. 23:59
다음 C코드를 통해 코드를 실행하면 프로세스가 어떻게 동작하는지 이해해보자. //모듈 임포트 #include #include #include #include //main함수 시작 int main() { int fd: fd = open("data.txt".O_RDONLY): //Read only로 data.txt파일을 연 호출값을 fd라는 변수에 담음 if(fd == -1) //파일이 정상적으로 열리지 않았다면 { printf("Error: can not open file\n"); //다음 문장을 출력하고 함수 종료 return 1; } else { printf("File opened and now close_\n"); //다음 문장을 출력하고 파일을 닫은 뒤 함수 종료 close(fd); return (..