CS

· CS/Algorithm
1. 분할 정복 - 기본편 그대로 해결할 수 없는 문제를 "작은" 문제로 분할하여 문제를 해결하는 방법. 대표적으로 "병합정렬" 분할 정복에는 3가지 용어로 정리 할 수 있다. Divide 문제를 더 작은 단위로 가능할 때 까지 나눔 Conquer 각 하위 문제를 재귀로 해결, 탈출조건을 설정해 나눌 수 없는 단계에서는 문제를 해결 Combine (merge) conquer가 된 문제들을 합쳐서 점차적으로 원래의 문제의 답을 찾아 나감 쉬운 예시로 1 ~ 8 까지의 합을 생각해보자 1 2 3 4 5 6 7 8 # 1~8의 합 divide (1회) # 1~4의 합, 5~8의 합 1 2 3 4 || 5 6 7 8 divide (2회) # 1~2의 합, 3~4의 합, 5~6의 합, 7~8의 합 1 2 || 3..
CS특강 #3 Bool 연산 & 논리 게이트 ​ Binary(2진표현) 2가지 전기적인 상태로 정보 표현이 가능하다. 위 방법을 Binary라고 부른다. 통상적으로 전기가 통하면 True, 숫자로 1로 표현하고 전기가 통하지 않으면 False, 숫자로 0으로 표현한다. 주의할 점으로 위 표현들은 같은 신호들을 우리가 받아들이기에 표현한 방식이라는 점에 유의해야한다. ​ ++ 전기를 끊거나 연결하는 것 이외에도 다른 수준의 전류를 허용한다고 한다. (초기 전자 컴퓨터에는 3진법을 사용하거나 5진법을 사용할 수도 있었다고 함) 하지만 신호끼리 가까우면 섞일 우려가 있어 가능한 한 두개의 신호를 멀리 배치하여 명확한 신호로서 사용하는 것이 좋은데 그것이 바로 Binary이다. (사실 이 부분은 명확히 무슨 뜻..
1. 메모리 누수란? 개인적으로 필자가 cpp를 처음 공부할 때 이해하기 어려운 개념중에 하나였다. 메모리가 샌다는거 자체가 무슨말인데?? 메모리가 액체야? 그래서 새면 어떻게 되는건데??? 결론부터 말하면 메모리누수란 "프로그램이 동적으로 할당한 메모리를 반환하지 않고 계속해서 쌓이는 현상" 을 말한다. 직관적으로 설명하면 여러분들한테 "배낭" 이라는 메모리가 있다고 가정하자. (여러분은 집에서 출발한다!!!) 정적과 동적은 따로 글을 쓸 필요가 있지만 여기서 간단하게만 설명을 하면 정적으로 배낭에다 물건을 넣는 행위 == 여러분이 집에서 나올 때 필요할 것 같은거 미리 정해서 챙겨나오는 것 동적으로 배낭에다 물건을 넣는 행위 == 길을 걸으면서 그때 그때 상황에 맞춰 길에 있는거 주워다 배낭에다 넣..
1. 하드코딩이란? 하드코딩은 코드내에 직접 값을 고정적으로 지정하는 것을 말한다. 주로 값, 구문, 경로 3가지가 주요하다. 간단한 예시를 통해서 보면 #python print("hello world!") 여기서 우리는 "hello world!" 를 출력하도록 고정적으로 지정해줬다. 이렇게 되면 다른 메세지를 출력하고 싶으면 코드 자체를 수정해줘야한다. (ex) print("goodbye world!") 다른 예시로는 //JAVA int discount = 10; totalPrice = originalPrice - (originalPrice * (discount / 100)); 이런 코드가 있다고 가정하자 여기서 우리는 상품의 할인율을 10%로 강제하여 discount 라는 변수에 할당해주었다. 마찬가..
0. 찾아보게 된 계기 vscode 같은 에디터를 사용하다보면 아래 이미지와 같이 붉은 밑줄등으로 내 코드의 문법상 오류나 도달할 수 없는 값 등을 알려주는 경우가 있다. 컴파일러든 인터프리터든 난 코드를 실행시키거나 컴파일한 적이 없는데, 어떻게 가능한 건지 궁금했었다. 에디터는 어떤 원리로 내 코드를 감시하는 거지? 실시간으로 나 몰래 실행시키나? 찾아보니 린터(linter) 다른 말로는 린트(lint) 라는 도구가 내가 작성한 코드를 정해진 규칙에 맞게 검사해주고 있다는 것을 알았다. 사실 위 경우는 특별한 린터를 설치했다기보다는 vscode가 제공하는 기본 문법검사기가 찾아준 것이지만 위 검사기 또한 간단한 린터로 볼 수 있다고 한다. 1. 린터란? 다양한 정의들이 많지만 결국 요약하면 "코드를 ..
CS특강 #2 초기 컴퓨팅 & 전자 컴퓨팅 ​ 20세기 중반 ~ Harvard Mark I - © 출처 Wikipedia 인구의 증가 ☞ 세계 무역 및 운송 네트워크 연결 ☞ 기술 및 과학적 노력의 지적 수준이 더 높은 안목을 가짐 그래서 데이터의 폭발적인 증가 ☞ 세상이 복잡해짐 ☞ 자동화와 더 뛰어난 계산의 필요성이 증가 = 컴퓨터의 발전 EX) 기계식 전기 컴퓨터 Haravad Mark I (전쟁용) 계전기 ☞ 진공관 ☞ 트랜지스터 © 출처 CrashCourse - Computer Sicence ​ 계전기 © 출처 CrashCourse - Computer Sicence 1. 전류가 코일에 흐를 때 전자기장이 만들어 짐 . 2. 구부러진 금속 부분이 닫히며 회로가 완성됨. 3. 전기가 통함(수도꼭지와..
새벽녹차
'CS' 카테고리의 글 목록