2024 - lecture 0
CS 수업을 다시 듣지 않아도 스스로 학습하는게 목표인 수업
- 문자, 숫자, 이미지, 영상, 오디오 등 어떻게 표현하는지 학습
- 알고리즘, 코드를 어떻게 쓰는지 학습
unary
Unary는 수학과 컴퓨터 과학에서 "단항"이라는 의미로, 오직 하나의 피연산자를 가지는 연산을 의미합니다. 이 개념은 다양한 맥락에서 사용되며, 몇 가지 주요 용도를 아래에 정리했습니다.
1. 수학에서의 단항 연산
단항 연산은 숫자 하나에만 작용하는 연산을 가리킵니다. 예를 들어, 수학에서 흔히 볼 수 있는 부호 연산(양수, 음수)이 이에 해당합니다.
- -5 (음수화 연산)
- +3 (양수화 연산)
이 외에도 절댓값 연산 등도 단항 연산으로 볼 수 있습니다.
2. 컴퓨터 과학에서의 단항 연산
프로그래밍 언어에서도 단항 연산은 자주 등장하며, 변수 하나에만 작용하는 연산입니다. 다음은 몇 가지 예입니다.
- 부호 연산 (-x 또는 +x): 변수의 부호를 바꾸거나 유지합니다.
- 증감 연산 (++ 또는 --): 변수를 1씩 증가시키거나 감소시키는 연산입니다.
- x++ 또는 ++x: 변수 x를 1 증가
- x-- 또는 --x: 변수 x를 1 감소
- 논리 부정 연산 (!): Boolean 값의 참/거짓을 반대로 만듭니다.
- !true → false
- !false → true
binary
Binary는 수학과 컴퓨터 과학에서 "이항"이라는 의미로, 두 개의 피연산자를 가지는 연산을 의미합니다. 이항 연산은 수학적 연산부터 프로그래밍 연산, 논리 연산에 이르기까지 다양한 맥락에서 쓰입니다.
1. 수학에서의 이항 연산
수학에서 이항 연산은 두 숫자를 대상으로 수행되는 연산을 말합니다. 주요 예는 다음과 같습니다:
- 덧셈: a+ba + b
- 뺄셈: a−ba - b
- 곱셈: a×ba \times b
- 나눗셈: a÷ba \div b
이러한 연산은 두 개의 피연산자(a와 b)를 필요로 하므로 이항 연산에 해당합니다.
2. 컴퓨터 과학에서의 이항 연산
프로그래밍에서 이항 연산은 두 변수 또는 값에 대해 수행하는 연산입니다. 대표적인 이항 연산자에는 다음이 포함됩니다:
- 산술 연산자: +, -, *, /, %
- 예: a + b (a와 b의 합)
- 비교 연산자: ==, !=, <, >, <=, >=
- 예: a == b (a와 b가 같은지 확인)
- 논리 연산자: &&(AND), ||(OR)
- 예: a && b (a와 b가 모두 참인지 확인)
- 비트 연산자: &, |, ^, <<, >>
- 예: a & b (a와 b의 비트 AND 연산)
bit
**비트(Bit)**는 Binary Digit의 약자로, 컴퓨터에서 데이터를 표현하는 가장 작은 단위입니다. 비트는 0과 1 두 가지 값만 가질 수 있으며, 이진수 체계에서 중요한 역할을 합니다. 컴퓨터는 비트들의 조합을 통해 수치 데이터뿐 아니라 문자, 색상, 소리 등의 다양한 정보를 처리하고 저장합니다.
1. 비트와 이진수
비트는 컴퓨터의 기본적인 데이터 단위로, **이진법(Binary System)**에 기반합니다. 이진법은 숫자를 0과 1로 표현하는 체계로, 예를 들어 1101이라는 이진수는 네 개의 비트로 구성되며, 십진수로 변환하면 13이 됩니다.
2. 비트의 조합과 데이터 표현
비트가 여러 개 모이면 더 복잡한 데이터를 표현할 수 있습니다. 여러 비트를 조합해 큰 숫자나 더 많은 정보를 표현할 수 있으며, 대표적으로 다음과 같이 구성됩니다.
- 1비트: 0 또는 1
- 4비트: 0000부터 1111까지 16가지 경우의 수 (4비트를 니블이라고도 함)
- 8비트: 00000000부터 11111111까지 256가지 경우의 수 (1바이트로, 문자 한 개를 표현할 수 있음)
- 16비트: 65536가지 경우의 수로, 더 큰 숫자를 표현 가능
- 32비트, 64비트: 컴퓨터의 데이터 처리 단위에 따라 사용 (32비트나 64비트 프로세서)
3. 비트 연산
컴퓨터 과학에서는 비트 단위로 데이터를 조작하는 비트 연산이 매우 중요합니다. 주요 비트 연산은 다음과 같습니다.
- AND 연산 (&): 두 비트가 모두 1일 때 결과가 1, 그렇지 않으면 0입니다.
- 예: 1010 & 1100 = 1000
- OR 연산 (|): 두 비트 중 하나라도 1이면 결과가 1, 둘 다 0일 때만 0입니다.
- 예: 1010 | 1100 = 1110
- XOR 연산 (^): 두 비트가 다를 때 결과가 1, 같을 때는 0입니다.
- 예: 1010 ^ 1100 = 0110
- NOT 연산 (~): 각 비트를 반전시킵니다 (1을 0으로, 0을 1로).
- 예: ~1010 = 0101
- Shift 연산 (<<, >>): 비트를 왼쪽이나 오른쪽으로 이동하여 곱셈과 나눗셈 효과를 얻습니다.
- 예: 1010 << 1 = 10100 (왼쪽으로 한 칸 이동)
4. 비트의 응용
비트는 다양한 분야에서 사용됩니다. 예를 들어:
- 데이터 압축: 비트 조작을 통해 데이터를 효율적으로 압축하여 저장 공간을 줄입니다.
- 암호화: 비트 연산을 이용하여 데이터를 암호화하고 복호화합니다.
- 그래픽 처리: 비트를 이용해 색상 정보를 조정하거나 이미지 데이터를 표현합니다.
- 네트워크 통신: 비트를 조합해 데이터 패킷을 구성하고 송수신합니다.
5. 비트와 컴퓨터 시스템
컴퓨터의 프로세서와 메모리 역시 비트 단위로 작동합니다. 32비트 또는 64비트 CPU는 한 번에 처리할 수 있는 비트 수를 의미하며, 이는 시스템의 성능과 처리 가능한 데이터의 크기에 영향을 줍니다.
byte
**바이트(Byte)**는 컴퓨터에서 데이터를 저장하고 처리하는 기본적인 단위 중 하나로, **8개의 비트(Bit)**로 구성됩니다. 바이트는 컴퓨터가 한 번에 처리할 수 있는 정보의 기본 단위로 널리 사용되며, 문자, 숫자, 이미지, 비디오 등 모든 데이터는 바이트 단위로 저장됩니다.
1. 바이트와 비트의 관계
- 1바이트 = 8비트: 바이트는 8개의 비트로 구성되기 때문에, 한 바이트는 00000000부터 11111111까지의 256가지 경우의 수를 표현할 수 있습니다.
- 바이트가 클수록 더 많은 정보를 표현할 수 있습니다. 예를 들어, 2바이트(16비트)는 65536가지(0~65535)의 값을 표현할 수 있고, 4바이트(32비트)는 더 큰 숫자를 표현할 수 있습니다.
2. 데이터 저장 단위
바이트는 데이터 크기 단위의 기본이 되며, 컴퓨터에서 데이터를 표현할 때 바이트의 배수 단위를 사용합니다.
- 킬로바이트(KB): 1KB = 1024 바이트
- 메가바이트(MB): 1MB = 1024 KB = 1,048,576 바이트
- 기가바이트(GB): 1GB = 1024 MB
- 테라바이트(TB): 1TB = 1024 GB
3. 바이트의 활용
바이트는 다양한 데이터 형식을 표현하는 데 사용됩니다.
- 문자: 일반적으로 1바이트로 한 문자를 표현할 수 있습니다. 예를 들어, ASCII 코드는 1바이트로 영어와 숫자 등의 기본 문자를 표현합니다.
- 유니코드 문자: 한글이나 이모지 등 다양한 언어 문자를 표현하기 위해 2~4바이트가 필요합니다.
- 숫자 및 소수: 정수형, 부동소수점 등 숫자도 바이트 단위로 표현되며, 크기에 따라 1, 2, 4, 8바이트 등으로 저장됩니다.
4. 바이트의 응용 예시
바이트 단위는 컴퓨터에서 다음과 같은 용도로 사용됩니다.
- 메모리 크기와 저장 용량: 컴퓨터 메모리와 저장 장치는 바이트 단위로 용량을 나타냅니다. 예를 들어, 8GB 메모리는 약 8,589,934,592바이트의 데이터를 저장할 수 있습니다.
- 파일 크기: 각 파일의 크기는 바이트 단위로 표현됩니다. 예를 들어, 5MB의 이미지 파일은 약 5,242,880바이트입니다.
- 네트워크 속도: 인터넷 속도는 일반적으로 초당 비트로 표현되지만, 파일 전송 크기는 바이트 단위로 표현됩니다.
5. 바이트의 중요성
바이트는 컴퓨터가 데이터를 효율적으로 저장하고 처리하는데 핵심적인 역할을 합니다. 모든 데이터는 바이트 단위로 나뉘어 메모리나 저장 장치에 저장되며, 바이트의 수는 컴퓨터의 성능, 처리 속도 및 저장 용량에 직접적인 영향을 미칩니다.
ASCII
ASCII 코드 체계에서 숫자 65는 **대문자 'A'**에 해당합니다. 이를 비트 패턴으로 표현하면 8비트 이진수 형식으로 나타낼 수 있습니다.
65의 비트 패턴 (이진수로 표현)
- 10진수 65를 이진수로 변환하면 01000001입니다.
- 이는 8비트 기준에서 앞의 빈 자리수를 0으로 채워 나타낸 것입니다.
요약
- 10진수: 65
- 16진수: 41 (16진수로는 0x41로 표기됨)
- 2진수 (비트 패턴): 01000001
- 문자 표현 (ASCII): 'A'
ASCII 코드에서 72, 73, 그리고 33은 각각 문자 'H', 'I', 그리고 '!'에 해당합니다. 아래는 각 값의 ASCII 문자와 비트 패턴을 정리한 표입니다.
상세 설명
- 72 (H): 01001000
- 10진수 72는 ASCII 문자 **'H'**에 해당하며, 비트 패턴으로는 01001000입니다.
- 73 (I): 01001001
- 10진수 73은 ASCII 문자 **'I'**에 해당하며, 비트 패턴으로는 01001001입니다.
- 33 (!) - 00100001
- 10진수 33은 ASCII 문자 **'!'**에 해당하며, 비트 패턴으로는 00100001입니다.
ASCII 코드에서 문자 'B', 'O', **'W'**에 해당하는 10진수 값과 8비트 비트 패턴은 다음과 같습니다.
상세 설명
- B (66): 01000010
- ASCII 코드에서 대문자 **'B'**는 10진수 66에 해당하고, 비트 패턴은 01000010입니다.
- O (79): 01001111
- ASCII 코드에서 대문자 **'O'**는 10진수 79에 해당하고, 비트 패턴은 01001111입니다.
- W (87): 01010111
- ASCII 코드에서 대문자 **'W'**는 10진수 87에 해당하고, 비트 패턴은 01010111입니다.
Unicode
유니코드(Unicode)는 전 세계의 문자를 컴퓨터에서 일관되게 처리할 수 있도록 표준화한 문자 인코딩 시스템입니다. 이를 통해 다양한 언어와 기호를 숫자 코드로 표현할 수 있습니다.
유니코드에서 각 문자는 **코드 포인트(code point)**라는 고유한 숫자로 할당됩니다. 예를 들어, 이모지나 특수 문자도 유니코드 코드 포인트를 통해 표현됩니다.
예시:
- 😊 (스마일 얼굴)
- 유니코드: U+1F60A
- HTML 코드: 😊
- ❤️ (하트)
- 유니코드: U+2764
- HTML 코드: ❤
- 👍 (엄지척)
- 유니코드: U+1F44D
- HTML 코드: 👍
<p>😊 이모지 테스트</p> <!-- 😊 -->
<p>❤ 이모지 테스트</p> <!-- ❤️ -->
<p>👍 이모지 테스트</p> <!-- 👍 -->
수학적으로 base-16으로 표현
RGB
RGB는 Red, Green, Blue의 약자로, 화면에서 색을 표현하는 방식 중 하나입니다. 이 방식은 세 가지 기본 색(빨강, 초록, 파랑)을 조합하여 다양한 색을 만듭니다. 각 색의 강도는 0에서 255까지의 범위로 설정할 수 있으며, 0은 해당 색이 전혀 없는 상태를, 255는 해당 색이 최대치로 강하게 표시되는 상태를 의미합니다.
RGB 색 모델
- R (Red): 빨간색의 강도
- G (Green): 초록색의 강도
- B (Blue): 파란색의 강도
각각의 색은 0에서 255 사이의 값을 가질 수 있습니다. 예를 들어:
- RGB(255, 0, 0): 빨간색
- RGB(0, 255, 0): 초록색
- RGB(0, 0, 255): 파란색
- RGB(0, 0, 0): 검정색 (모든 색의 강도가 0)
- RGB(255, 255, 255): 흰색 (모든 색의 강도가 255)
예시:
- RGB(255, 0, 0): 빨간색
- RGB(0, 255, 0): 초록색
- RGB(0, 0, 255): 파란색
- RGB(255, 255, 0): 노란색 (빨강 + 초록)
- RGB(0, 255, 255): 청록색 (초록 + 파랑)
- RGB(255, 0, 255): 마젠타색 (빨강 + 파랑)
- RGB(192, 192, 192): 은색
- RGB(128, 128, 128): 회색
- R (Red): 72
- G (Green): 73
- B (Blue): 33
이 색은 어두운 올리브 그린(Dark Olive Green) 계열에 속합니다. 빨간색과 초록색이 비슷한 강도로 섞여 있고, 파란색은 상대적으로 낮은 강도를 보입니다. 그래서 결과적으로 그린 색이 주를 이루는 어두운 색조로 보입니다.
예시:
- **RGB(72, 73, 33)**는 어두운 올리브 그린 계열의 색상입니다.
이 색은 자연적인, 흙이나 식물과 연관된 색상을 나타낼 수 있습니다.
하지만 위에서 72, 73, 33 은 텍스트로 해석하면 'HI!' 였다. 이렇게 숫자를 무엇을로 볼지에 따라 해석이 달라진다.
음악, 영상 등 모두 숫자일 뿐이고
숫자로 입력되면 알고리즘을 통해 우리가 원하는 결과가 나오며, 코드는 알고리즘을 컴퓨터가 일을 하기 위해 작성한 표현법이다.
알고리즘 (Algorithm)
알고리즘은 특정 문제를 해결하기 위한 단계적 절차입니다. 즉, 주어진 문제를 해결하기 위한 구체적인 해결 방법을 정의한 일련의 규칙이나 단계입니다. 예를 들어, 숫자 두 개를 더하는 문제를 해결하기 위한 알고리즘은 "두 수를 입력받고, 그 두 수를 더한 값을 출력하라"라는 식으로 간단하게 표현될 수 있습니다.
코드 (Code)
코드는 컴퓨터가 알고리즘을 실행할 수 있도록 변환한 구체적인 명령어 집합입니다. 사람은 일상적인 언어로 알고리즘을 작성할 수 있지만, 컴퓨터는 인간의 자연어를 이해하지 못합니다. 그래서 프로그래밍 언어를 사용하여 알고리즘을 컴퓨터가 이해할 수 있는 명령어로 변환합니다. 이 명령어들을 바로 코드라고 합니다.
예를 들어, 두 숫자를 더하는 알고리즘을 코드로 표현하면 다음과 같이 작성할 수 있습니다.
알고리즘:
- 사용자로부터 두 숫자를 입력받는다.
- 입력된 두 숫자를 더한다.
- 더한 값을 출력한다.
코드 (예: Python):
# 두 숫자 입력받기
num1 = int(input("첫 번째 숫자를 입력하세요: "))
num2 = int(input("두 번째 숫자를 입력하세요: "))
# 두 숫자 더하기
sum = num1 + num2
# 결과 출력
print("두 숫자의 합은:", sum)
- 알고리즘은 문제를 해결하기 위한 단계적 방법이고,
- 코드는 그 알고리즘을 프로그래밍 언어로 표현하여 컴퓨터가 실행할 수 있도록 만든 명령어 집합입니다.
pseudocode

의사코드 (pseudo-code)란 일반적인 언어를 코드처럼 사용하여 알고리즘을 나타낸 코드입니다.
알고리즘을 사용하기 전에 대략적으로 어떻게 진행될 지 작성해보는 것이죠.
의사코드이기 때문에 실제로 코드가 돌아가지는 않아요.
🔍 의사코드의 장점
의사코드는 자연어의 장점과 프로그래밍 언어의 장점 모두 가지고 있습니다.
우리가 인식하기 편하면서도, 알고리즘을 한 눈에 들여다 볼 수 있죠.
특정 언어의 문법에 편중되지 않고 알고리즘을 작성할 수 있습니다.
💻 예시
선택 정렬을 예시로 들어보겠습니다.
c언어로 구현하면 이렇게 됩니다.
int n;
int min;
int temp;
int arr[n];
for (int i = 0; i < n - 1; i++)
{
min = i;
for (int j = i + 1; j < n; j++)
{
if (arr[j] < arr[i]) min = j;
}
temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
의사코드로 구현하면 이렇게 됩니다.
Alg SelectSort(A, n)
input array A[n]
output selection sorted array A
1. min <- 0
2. for i <- 0 to n - 1
min <- i
for j <- i + 1 to n
if A[j] < A[i]
j <- i
swap (A[j], A[i])
3. return A
https://velog.io/@pheol9166/%EC%9D%98%EC%82%AC%EC%BD%94%EB%93%9C-Pseudocode
의사코드 (Pseudo-code)
📌 개요 의사코드란? 의사코드의 장점 예시 💡 의사코드란? 업로드중.. 의사코드 (pseudocode)란 일반적인 언어를 코드처럼 사용하여 알고리즘을 나타낸 코드입니다. 알고리즘을 사용하기 전에 대
velog.io
이후 1시간은 스크레치를통한 코딩 설명이여서 생략
YouTube
www.youtube.com