Computer Science(28)
-
알고리즘 | 검색 알고리즘
✔ 학습목표 주어진 배열 속에서 특정 값을 찾는 방법을 설명할 수 있다. 배열 본 글에서부터는 이제껏 배운 내용(메모리의 구조, 자료형, 배열 등)을 바탕으로 검색이나 정렬과 같은 문제풀이 알고리즘을 학습할 것이다. 이에 앞서 배열 속에서 특정 값을 찾는 방법을 이해해야 한다. 배열은 한 자료형의 여러 값들이 메모리상에 모여있는 구조다. 컴퓨터는 배열을 볼 때 인덱스 하나하나에 접근하게 된다. 이때 어떤 값이 배열에 들어 있는지 확인하는 데는 정렬 여부에 따라 두 가지 방법이 있다. 선형 검색 선형 검색은 순서대로 하나씩 보는 것이다. 배열의 인덱스를 처음부터 끝까지 하나씩 증가시키며 원하는 값이 들어있는지 확인한다. 50이라는 숫자를 찾는 의사 코드로 예를 들어보자. For i from 0 to n-1..
2021.02.04 -
컴퓨팅 사고 | 코드의 디자인
✔ 학습목표 CS50 IDE에서 코드의 정확성과 디자인을 관리하는 방법을 설명할 수 있다. 규모가 큰 프로그램을 작성할 때에는 보통 여럿이 작업을 진행한다. 이때는 코드의 내용뿐만 아니라 형식도 신경 써야 한다. 같은 내용이라 하더라도 어떻게 표현하느냐에 따라 코드를 이해하고 수정하는 속도가 달라진다. CS50 IDE에서는 check50과 style50이라는 프로그램을 사용할 수 있다. check50 check50은 코드의 정확도를 확인하는 자동 검사 프로그램이다. hello.c라는 프로그램을 검사하고 싶다면 명령창에 'check50 cs50/preblems/hello'를 입력하면 된다. 간단한 깃허브 계정 인증과정을 거치면 검사 결과(피드백)가 나온다. style50 style50은 코드가 심미적으로 ..
2021.02.02 -
컴퓨팅 사고 | 디버깅
✔ 학습목표 디버깅하는 여러 방법을 설명할 수 있다. 버그와 디버깅 버그(bug)는 코드에 들어있는 오류를 말한다. 코드에 있는 버그를 식별하고 고치는 과정이 디버깅(debugging)이다. 프로그래머는 디버거라 불리는 프로그램을 사용해서 디버깅을 한다. 디버깅의 기본 프로그램은 일반적으로 인간보다 훨씬 빠르게 연산을 수행하기 때문에, 프로그램을 실행시켜보는 것만으로는 무엇이 잘못됐는지 찾기 어렵다. 그래서 디버거를 사용한다. 디버거는 프로그램을 특정 행에서 멈출 수 있게 해 주기 때문에 버그를 찾는데 도움이 된다(이때 프로그램이 멈추는 특정 지점을 중지점이라고 한다). 디버거를 사용해 프로그래머는 프로그램을 한 번에 한 행씩 실행할 수 있고, 프로그램이 내리는 모든 결정을 단계별로 따라갈 수 있다. 방..
2021.02.02 -
컴퓨팅 사고 | 컴파일링
✔ 학습목표 컴파일링의 네 단계를 설명할 수 있다. 컴파일링 지금까지는 아무것도 모른 채 코드를 컴파일했다면, 이제부터는 연습과 응용을 통해 동작 원리를 이해할 수 있을 것이다. C 코드로 작성된 쉬운 예시(hello.c)를 보자. #include int main(void) { printf("hello, world\n"); } "hello, world"를 출력하는 프로그램이다. 우선 main 이라는 함수가 있다. 이는 프로그램의 시작점으로 실행 버튼을 클릭하는 것과 같다. main 함수 안의 printf는 출력을 담당하는 함수이다. 이 함수를 사용하기 위해 stdio.h 가 필요하다. stdio.h는 C언어로 작성된 헤더 파일로, printf 함수의 프로토 타입을 담고 있다. C언어 강의에서 우리는 cl..
2021.02.01 -
컴퓨팅 사고 | 하드웨어의 한계
✔ 학습목표 메모리 용량이 프로그램의 구동에 미치는 영향을 설명할 수 있다. 메모리 컴퓨터는 RAM(랜덤 엑세스 메모리)라는 물리적 저장장치를 포함하고 있다. 우리가 작성한 프로그램은 구동 중에 RAM에 저장되는데, 이는 유한한 크기의 비트만 저장할 수 있기 때문에 부정확한 결과를 내기도 한다. #include #include int main(void) { // 사용자에게 x 값 받기 float x = get_float("x: "); // 사용자에게 y 값 받기 float y = get_float("y: "); // 나눗셈 후 출력 printf("x / y = %.50f\n", x / y); } 그중 하나가 부동 소수점의 부정확성이다. 예시 프로그램을 보자. 이는 사용자에게 실수형 데이터 타입(float..
2021.01.31