1. 자료구조란 ?
데이터를 저장하고 관리하는 방식
- 데이터를 체계적으로 저장하여 메모리 효율적 사용
- 빠르고 안정적으로 데이터 처리
1-1. 자료구조를 알아야하는 이유
효율적인 코드를 짜지 못했음 -> 램메모리가 가득참 -> 성능 저하
1-1-1. 예시
LIST : 데이터를 순차적으로 나열해 놓은 집합.
문자형 데이터 : "L" "I" "S" "T"
1. array 데이터로 저장함 : 단어를 연속적으로 저장한다.
장점 : 데이터 접근 쉬움
2. Linked List로 저장함 : 메모리 상에는 불연속적으로 저장 되지만 다음 데이터의 위치를 가리키면서 연속적으로 유지 가능
장점 : 데이터 추가, 삭제가 쉬움
=> 메모리 구조를 알고 있으면 자료구조를 쉽게 이해한다
2. 메모리
램메모리 : 트랜지스터라는 작은 반도체
트랜지스터의 램프가 on되면 1 off되면 0을 나타낸다. 이를 이용해서 2진수를 표현할 수 있다. 이것을 binary Digit 즉 bit를 나타낸다.
2-1. bit
1bit는 0과1 두가지 숫자를 표현할 수 있다. 그럼 2bit는? 총 4가지를 표현 할 수있다. 8bit = 1byte 는 총 2의 8승가지의 가짓수를 표현할 수 있다.
2-2. binary(2진법)와 hexadecimal(16진법)
2진법
0b1101101 => 217
16진법
0xD98AF6F
2진법은 0b를 붙이고 16진법은 0x를 붙여서 구분한다. 만약 숫자가 너무 커지면 2진법으로 표현하기 너무 힘들어서 16진법을 사용한다.
2진법을 4개씩 나눠서 10진법으로 바꾸고 그걸 알파벳으로 바꿔서 표현한다.
2-3. 우리 컴퓨터의 램은 얼마만큼의 bit를 저장할 수 있을까 ?
노트북 램을 1mb메모리를 사용한다고 가정해보자
1mb = 2^10 * 2^10
이 넓은 공간에서 데이터를 찾으려고 컴퓨터는 하나하나 데이터마다 주소값을 만들어 놓았다.
주소는 16진법으로 표시한다(10진법으로 하기엔 너무 길다)
예를 들어보자면
첫번째 byte는 0X0
두번째는 0X1
.
.
.
820,101 번째는 0XC8352
.
.
마지막 2^20번째는 0XFFFFF
로 표현 가능하다.
3. 메모리 할당
3-1. 예시
3-1-1. 정수
int = 정수표현 자료형
int는 4byte의 메모리를 차지한다.
int price = 290000000;
이것을 변환하면 10000000000011000100100100010001이 된다. 이것을 메모리에 4바이트에 걸쳐서 할당한다.
이를테면 아래처럼 변환된다.
00010001
01001001
00001100
10000000
3-1-2. 문자
컴퓨터는 숫자만 저장할수 있기 때문에 문자는 숫자로 표현하기로 했다. 이것을 아스키코드라고 한다.
char ascii = 'A';
라고 저장하면, 01000001이 되고 이것을 숫자로 저장하면 65가 된다.
3-1-3. List
- Array
array는 메모리상에서 연속적으로 할당된다. 만약
int array[4] = {1,2,3,4};
라면 각각 4byte씩 총 16byte를 차지한다. 즉 16바이트의 메모리에 1,2,3,4를 연속적으로 저장하면 된다.
- Linked List
linked list는 불연속적으로 할당된다. 즉 값만 저장하면 1 다음 값이 무엇인지 알수없다. 그래서 다음으로 나올 값에 adress를 붙여놓는다.
이때 value와 adress를 붙여서 Node라고 한다. 하나의 node당 메모리는 8바이트이다. 중간중간에 다른 메모리가 들어가 있어도 다음 주소가 적혀있기 때문에 불규칙적으로 적혀있어도 다음 숫자를 잘 찾아갈 수 있다.
'coding test' 카테고리의 다른 글
sort & Two Pointer (0) | 2023.06.24 |
---|---|
알고리즘 (0) | 2023.06.22 |
시간 복잡도 줄이기 (0) | 2023.06.17 |
프로그래머스 문자열밀기 (0) | 2023.06.15 |
프로그래머스 k의 개수 (0) | 2023.06.15 |