모두를 위한 컴퓨터 과학🧐_기초내용

10993 단어 OSCSCS

⏰ 최종 업데이트 : @2020년 1월 18일

🧐2진법

컴퓨터 과학

컴퓨터 과학은 문제 해결에 대한 학문이다. 문제 해결은 입력(input) → 컴퓨터 과학 → 출력(output) 의 단계로 이루어진다.

입출력을 표현하기 위해서는 약속(표준)이 필요하며, 컴퓨터가 사용하는 표현 방법에는 2진법이 있다.

이진법

표현 방법에는 2진법, 8진법, 10진법, 16진법 등이 있다. 이 중 10진법이 우리가 일상에서 사용하는 것이며, 2진법이 컴퓨터가 사용하는 표현 방법이다.

2진법은 0과 1로만 데이터를 표현하며, 이 두가지의 숫자를 이용해서 글자, 사진, 영상, 소리 등을 저장할 수 있다. 10진법은 각 자리수를 10의 거듭제곱으로 표현하고, 2진법은 각 자리수를 2의 거듭제곱으로 표현한다.

  • 10진법 3을 2진법으로 표현하면 11로 표현할 수 있다.
  • 10진법 7을 2진법으로 표현하면 111로 표현할 수 있다.
  • 10진법 8을 2진법으로 표현하면 1000로 표현할 수 있다.

2진법은 on/off 상태를 통해 0과 1을 표현하며, 2진법에서 하나의 자릿수를 표현하는 단위를 비트(bit)라고 한다.

비트(bit)

정보의 저장, 연산 및 수행을 위해 컴퓨터는 비트라는 측정 단위를 쓴다. 이는 binary digit(이진숫자)의 줄임말로, 0과 1 두가지 값만 가질 수 있는 측정 단위이다.

비트열(=바이트(byte))

비트 한 개는 많은 양의 데이터를 표현하기에는 많이 부족하다. 때문에 비트열을 사용하는데, 이는 즉 바이트(byte)8개의 bit가 모여 만들어진 것이다. 즉 1byte8bit가 있고, 1bit에는 0과 1로 표현 가능하므로 총 256종류의 표현을 할 수 있다.

데이터의 표현


🧐정보의 표현

문자의 표현

컴퓨터는 문자를 숫자로 표현할 수 있다. 이 때 정해진 약속(표준)이 있고, 이것이 바로 ASCII(아스키코드, American Standard Code for Information Interchange)이다. 이는 총 128개(0~127)의 부호로 정의되어 있다.

2진법으로 A를 표현하면, 10진법 기준으로 65 이므로, 2^6x1 + 2^5x0 + 2^4x0 + 2^3x0 + 2^2x0 + 2^1x0 + 2^0(=1) = (64+1) 로 나타내어 1000001로 표현할 수 있다.

ASCII 코드 외에도 Unicode라는 표준에서는 더 많은 비트를 사용해서 보다 다양한 문자들뿐만 아니라 이모티콘 까지도 표현할 수 있다.

그림, 영상, 음악의 표현

스크린 속 작은 점들은 R(Red), G(Green), B(Blue) 총 3가지로 이루어져 있다. 이 작은 점 하나를 픽셀(pixel)이라고 부르고 각각의 픽셀은 3가지 색을 서로 다른 비율로 조합해서 특정 색을 갖는다. 이 숫자들을 표현하는 방식을 RGB(Red, Green, Blue)라고 하며, RGB로 표현된 그림 여러 개가 연속적으로 이어지면 영상이 된다.


🧐알고리즘

어떻게 입력에서 출력을 얻을 수 있을까? 컴퓨팅은 입력을 받아 그 입력을 처리한 후, 출력하는 과정이다. 알고리즘 입력값을 출력값의 형태로 바꾸기 위해 어떤 명령들이 수행되어야 하는지에 대한 규칙들의 순서적 나열을 말한다.

→ 일련의 순서적 규칙들을 나열하는 방법에 따라 알고리즘의 종류가 달라지며, 출력값이 같아도 출력까지의 시간이 다를 수도 있다.

정확한 알고리즘

연락처에서 minsik이를 찾는다고 해보자. 연락처 공책의 첫 페이지를 펴서 찾는 것을 시작으로 minsik이가 나올때까지 or 연락처가 끝날 때 까지 이를 반복한다.

→ 알고리즘 평가 시 정확성도 중요하지만, 효율성도 중요하다. 즉 작업 완료까지 얼마나 시간과 노력을 덜 들일 수 있는지에 대한 것이다.

앞에서부터 한 페이지씩 찾는 방법은 정확성은 높아도 효율성은 떨어지는 알고리즘일 것이다.

한 장을 넘긴 다음 또 다른 한 장을 넘기는 규칙들의 순서적 나열

정확하고 효율적인 알고리즘

우선 연락처의 가운데를 펴본다. 펼친 이 가운데에서 minsik를 찾으면 알고리즘은 끝이 나지만, 만약 찾지 못한다면 연락처는 이름순으로 정렬되어 있으므로 minsik는 이 중간 페이지를 기준으로 앞에 있는지 뒤에 있는지를 알 수 있다. 만약 뒷부분에 있다면 그 뒷부분에서 또 나머지 절반에 대해 이와 같은 알고리즘을 계속 수행해나가면 훨씬 효율적인 알고리즘이 된다.

반을 줄이고, 다음 또 반을 줄이는 규칙들의 순서적 나열


🧐C기초

#include <stdio.h>
int main (void) 
{
	printf("C언어를 다시 배우고 있어요...\n");
}

int main (void)시작한다의 의미를 가지고 있다. #include <stdio.h>는 "stdio.h"라는 이름의 파일을 찾아서 "printf()"함수에 접근할 수 있도록 해준다.


🧐문자열

scanf 함수

scanf함수는 값을 입력받는 함수이다.

#define _CRT_SECURE_NO_WARNINGS // scanf 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>

int main(void) {
	char name[10];
	printf("이름을 입력하세요.\n");
	scanf("%s", name);
	printf("안녕하세요. 당신의 이름은 %s이군요?\n", name);
	return 0;
}

위 코드는 크기가 10인 char형 배열을 선언한 후, scanf()를 통해 사용자가 입력한 값을 name에 저장한다. 그 후 내가 입력한 이름이 무엇인지 출력을 통해 알려주는 코드이다. 결과는 다음과 같이 출력됨을 확인할 수 있다.


🧐조건문과 루프

조건문 if

조건문의 대표적인 예로는 if문이 있다. if문은 if ~ else구문이나 if~ else if구문으로 표현할 수 있다. if ~ else if 구문은 조건이 여러개 일 때 사용한다. 작성 예시는 다음과 같다.

int x = 2;
int y = 5;
if(x < y) {
	printf("x is less than y\n");
} else if(x = y) { 
	printf("x is equal to y\n");
} else { //x > y
	printf("x is more than y\n");
}

x<y이면 if구문이, x=y이면 else if 구문이, x>y이면 else 구문이 실행된다.

루프(반복문) while, for

루프는 무언가를 계속 반복하는 것을 의미한다. 보통 while문을 이용하여 루프문을 구현하고자 할 때에는 while문의 조건 안에 (true)를 넣어주면 된다. 그럼 코드에서 항상 참이 되는 조건을 통해 while문이 영원히 수행되게끔 한다.
특정 횟수만큼 반복할 수 있게 값을 정해줄 수 있다. 조건 횟수를 알아보기 위해 i를 선언한 후 i가 50보다 커지면 종료하는 코드를 작성해보자.

int i = 0;
while(i < 50) {
	printf("hello, world\n");
    i = i + 1; // i++와 같음

while문은 for문으로도 나타낼 수 있다. for문은 ()안에 변수 초기화; 변수 조건; 변수 증감)을 넣어주면 된다. 위의 while문과 똑같은 코드를 작성해보자. for문은 while문에 비해 더 간단하게 코드를 표현할 수 있다.

for (int i = 0; i < 50; i++) {
	printf("%d번째 반복중! \n", i);

🧐자료형, 형식 지정자, 연산자

데이터 타입

변수의 데이터 타입으로 사용할 수 있는 것들은 다음과 같다.

  • bool : 불리언 표현ex). T or F, 1 or 0, yes, no)
  • char : 문자 하나 ex). 'a', 'Q' '?'
  • string : 문자열
  • int : 특정 크기 or 특정 비트까지의 정수 ex). 100, 34.15
  • float : 부동 소수점을 갖는 실수 ex). 3.141592...
  • double : 부동소수점을 포함한 더 큰 실수

형식 지정자

printf함수에서는 각 데이터 타입을 위한 '형'을 사용할 수 있다.

  • %c : char
  • %f : float, double
  • %i : int
  • %li : long
  • %s : string

  • 이진법이미지 <출처. boostcourse <모두를 위한 컴퓨터 과학>>
  • 데이터의 표현 이미지 <출처. boostcourse <모두를 위한 컴퓨터 과학>>
  • 아스키코드 이미지 <출처. https://shaeod.tistory.com/228>

좋은 웹페이지 즐겨찾기