CS

    메모리상의 데이터 배치

    메모리상의 데이터 배치 static 이란? 정적==프로그램을 작성할 때 얼마나 많은 메모리가 필요한지 알고 있다. dynamic이란? 동적 == 대부분의 경우 프로그램을 실행하기 전에는 크기를 알 수 없기 때문에 동적이라고 부름. 더 많은 데이터를 저장해야 할 경우 static은 스택, 아래로 자라는 형식으로 저장한다. 반대로 dynamic은 힙으로, 위로 자라나는 구조를 가지고 저장한다. 이 때, 힙과 스택이 서로 충돌하지 않게 하는 것이 중요하다. 프로그램 실행 프로그래머는 함수를 정의하여 코드를 재사용한다. >> 어떤 함수는 여러 프로그램에서 쓸 만큼 유용할 경우가 있다. >> 이 경우 자주 쓰이는 함수를 한곳에 모아서 사용한다 (라이브러리) 프로그래밍은 한 곳에서 개발을 할 수 도 있지만, 프로그..

    인터럽트, 폴링, 상대 주소 지정

    폴링 방식이란? - 요청을 확인하는 로직을 특정 주기마다 실행하여 확인하는 방식으로, 정해진 순서(시간)에 상태변화를 확인하여 그에 따른 작업을 하는것이다. 예를 들어 제어를 할 경우에 이런식으로 sw적으로 구현을 할 수 있다. 매 작업을 할때 마다 pin에 신호가 온다면 해당 request를 하는 식이다. void main() { while(1) { if (pin==1) { Request(); } doing(); } } 이 방식은 구현이 쉽고 우선순위를 변경하기가 쉬우나, 시스템의 리소스를 많이 잡아 먹기 때문에 작업 효율이 떨어진다고 볼 수 있다. 인터럽트란? cpu가 동작을 계속 하다가, 주변장치에 의해 신호가 온다면, 모든 행동을 일시적으로 물리적으로 중단하고, 해당 신호에 해당하는 작업을 마친뒤..

    텍스트 표현

    아스키코드 키보드에 있는 모든 기호에 대해 7비트로 표현한 것이다. 처음에는 영어만으로 충분했지만 점차 쓰이는 언어가 늘어나면서 다른 표준이 생겨났다. 한번에 담기에는 비트수가 많이 들었고 당시 비트를 많이 쓰는 비용이 컸기 때문이다. 그 후로 비트 가격이 떨어지면서 유니코드라는 16bit의 새로운 표준이 만들어 졌고, 현재는 21bit 까지 확장 되었다고 한다. EBCDIC 코드 IBM이 개발한 확상 이진화 십진 코드로 천공카드 상의 두 "존(zone)"과 "숫자"를 6비트에 인코딩하는 효율적인 방법으로 고안된 기존 IBM BCD 인코딩을 확장하기 위해 만들어졌다. EBCDIC은 ISO-8859 계열이나 유니코드 같은 ASCII 기반 코드 페이지에 비해 최근 기술적인 관점에서는 장점이 없다. 각 부호는..

    실수를 표현하는 방법

    실수를 표현하는 방법 고정 소수점 표현법 00.00에서 .을 기준으로 오른쪽으로 한 비트 갈 때마다 1/2씩 값을 줄 수 있는 방법이다. 일상에서 사용하는 십진법의 소수점 처리 방식과 거의 동일하다고 볼 수 있겠다. 하지만 이런식으로는 쓸모 있는 범위의 실숫값을 표현하기 위해 필요한 비트의 수가 많아지게 되므로 몇몇 장치를 제외하고 잘 사용하지 않는다고 한다. 예를들어 플랑크 상수라는 수는 6.63*10^(-34)J/s인데 이것을 비트로 표현하면 거의 200비트가 필요하다. 정밀도를 필요로 할 때 비트수가 매우 커지는 문제를 해결하기 위해 부동 소수점 표현법을 고안하게 되었다고 한다. 부동 소수점 표현법(floating point) 가수부분과 지수부분으로 나누어 가수부x지수^(지수부)의 형태로 값을 표현..

    정수를 비트로 표현하는 방법

    2진수 우리는 보통 10진수를 사용하지만 컴퓨터의 경우는 0과 1로만 동작하기 때문에 우리가 알고있는 수를 컴퓨터로 동작하게 하려면 이진법으로 바꾸어 주어야 한다. 단순 변환의 경우 간단하게 할 수 있지만, 음수라는 개념이 컴퓨터에는 없고, 또한 데이터가 차지할수 있는 공간이 제한적이기 때문에 발생하는 문제들이 있다. 그것에 대해 정리해보고자 한다. 2진수의 양의 덧셈 덧셈의 경우 LSB(가장 작은 유효 비트) 부터 시작하여 합이 2 이상일 경우 한칸 MSB(가장 큰 유효 비트)쪽으로 이동하며 자리를 올려준다. 그런데 만약 4비트인 수 1111과 0001이 더한다면 올려줄 자릿수를 초과하는데 이때 상태 레지스터에 MSB로부터의 올림값이 들어가고 값은 0000이 나오고, 오버플로우가 발생한다고 판단한다....

    비트와 바이트, 드 모르간의 법칙

    비트와 바이트 비트(bit, binary digit)는 하나의 비트는 0이나 1의 값을 가질 수 있고, 각각은 참, 거짓 혹은 서로 배타적인 상태를 나타낸다. 바이트(byte)는 컴퓨터의 기억장치의 크기를 나타내는 단위로 자주 쓰이며, 많은 프로그래밍 언어에서 정수형에 속하는 자료형 이기도 하다. 바이트의 실질적 의미는 아스키 문자 하나를 나타낼 수 있다는 것이다. 따라서 여러 바이트를 한 word로 사용하고 있는 현재에도 대부분의 컴퓨터 하드웨어에서 메모리의 주소 단위로 사용된다. 이진 컴퓨터의 word 안에서 주소로 표현할 수 있는 가장 작은 단위에 해당하는 연속된 비트열. 예를 들어서 CDC6000 (CDC 6000 시리즈는 1960년대에 Control Data Corporation에서 제조한 단종..

    다익스트라 알고리즘

    다익스트라? # 다익스트라? (데이크스트라 라고도 불린다.) # 출발점이 정해져있을때 출발 노드로부터 다른 노드에 이르기까지의 최소비용 # 1. 출발지를 기준으로 인접노드를 살펴본다. # 2. 간선에는 비용이 적혀있다.디폴트값은 무한대. # 3. 이동하고 가장 작은 값으로부터 인접한 노드의 비용의 누적합을 다시 체크한다. 그림으로 보자면 이렇다. s 노드에서 출발할때 인접한 두 노드 까지의 비용을 각각 입력한뒤, 그 다음으로 가장 작은 비용을 가진 y노드에서 다시 인접한 노드까지의 비용 누적값을 계산하여, 기존의 것보다 작다면 바꾸어주고 y노드의 값을 고정시킨다. 마찬가지로 다시 다음으로 작은 노드인 z로 이동한 다음, 인접한 노드까지의 비용 누적값을 계산한다. 그 값이 기존의 것보다 작다면 바꾸어주고 ..

    [이코테,python] 볼링공 고르기

    처음엔 그냥 무지성으로 이중 포문으로 풀었다. n, m = map(int, input().split()) weights = list(map(int, input().split())) # sol1) n^2 lst = [] cnt = 0 for i in range(n): lst.append(weight[i]) for i in range(n - 1): for j in range(i + 1, n): if lst[i] != lst[j]: cnt += 1 print(cnt) 풀고나서 다른사람들의 풀이를 보았는데, 이런 문제의 경우에 수학적 사고를 통해서 시간 복잡도를 n으로 줄일수 있는것을 알게 되었다. n, m = map(int, input().split()) weights = list(map(int, input(..