자료구조 Binary Search Tree 기본 제공 함수 ////////////////////////////////////////////////////////////////////////////////// /* CE1007/CZ1007 Data Structures Lab Test: Section F - Binary Search Trees Questions Purpose: Implementing the required functions for Question 5 Implementing 'remove node' operation for BST*/ ////////////////////////////////////////////////////////////////////////////////// #includ..
자료구조 Stack and Queues 기본 제공 함수 ////////////////////////////////////////////////////////////////////////////////// /* CE1007/CZ1007 Data Structures Lab Test: Section C - Stack and Queue Questions Purpose: Implementing the required functions for Question 1 */ ////////////////////////////////////////////////////////////////////////////////// #include #include ///////////////////////////////////////..
알고리즘 1890 점프 # 실패코드! import sys from collections import deque input = sys.stdin.readline n = int(input()) arr = [] for _ in range(n): arr.append(list(map(int, input().split()))) queue = deque() # x,y 좌표값 추가 queue.append((0,0)) res = 0 while queue: cur_y, cur_x = queue.popleft() if cur_y == n-1 and cur_x == n-1: res += 1 continue distance = arr[cur_y][cur_x] new_x = cur_x + distance if distance !..
11723 집합 import sys input = sys.stdin.readline def add(S, x): x = int(x) S |= (1
CSAPP 기계수준 프로그램에서 제어와 데이터의 결합 포인터 포인터 이해하기 지금까지 어셈블리어를 사용하며 계속 사용했던 () 참조 방식을 포인터라고 생각하고 학습했다. 포인터는 C 언어의 핵심으로 주소의 값을 가르키는 화살표라고 이해하면 된다. 모든 포인터는 특정값을 가진다. 이 값은 특정 자료형을 갖는 어떤 객체의 주소다. 포인터에 대한 이해는 linked list를 직접 구현해가며 학습했다. #include #include #include // // Created by 전병준 on 24. 4. 9. // typedef struct NODE{ int data; struct NODE* next; } node; node* list; // 초기화 void init() { if (list == NULL) {..
CSAPP 이기종 자료구조 (Heterogeneous) 이기종 자료구조란? 다른 여러가지의 데이터를 포함하고 있는 구조체(struct)와 공용체(Union)을 뜻한다. 구조체(struct) C 언어의 구조체(structure)는 다양한 데이터 타입의 멤버들을 하나로 묶어서 새로운 데이터 타입을 정의하는 데 사용. 자바의 class의 개념과 아주 약간 비슷함 구조체의 offset 각 구조체의 필드값에 따른 byte 용량으로 정한다. char = 1byte, long = 8byte... 공용체(union) 말 그대로 필드값의 가장 큰 Byte만큼만 메모리를 할당하고, 그 메모리를 모든 필드값들과 공유하며 사용함. 메모리를 효율적으로 사용할 수 있지만, 한번에 하나의 필드값밖에 할당할 수 없어 지금은 잘 사용..
알고리즘 Dynamic Programming DP란? 점화식을 사용해 하나의 큰 문제를 여러개의 작은 문제로 나누어서 그 결과를 큰 문제에 대입해서 푸는 방법 계산값을 재탕한다는 의미로 받아들였다. 알게모르게 알고리즘 문제를 풀이하며 여러번 사용했던 방법. DP를 사용하는 이유 난 이 이유를 백준의 피보나치를 풀이하며 찾았는데, 기존 피보나치의 경우 일반적인 재귀로 풀면 O(n²)이지만 dp로 값을 재탕하면 시간 복잡도를 O(n)으로 줄일 수 있다. 자세한 내용은 2748 피보나치수 2 문제를 풀어보면 바로 감이 잡힌다. 구현법 젓번째로는 Bottom-Up 방식으로 DP 테이블을 만들어 해당 테이블을 만족하는 점화식을 생성하고, 그 식을 바탕으로 반복문을 사용해 접근하는 방식이다. 해당 방식의 장점은 재..
CSAPP 프로세서 데이터 전송 대부분의 데이터 전달은 레지스터를 통해서 일어난다. (rax, rsi, r8 등등) 레지스터에 저장되는 값을 프로시저에서 다시 호출해 데이터를 전달하는 형식. 함수가 여섯개 이상의 정수형 인자를 가질 때, 다른 인자들은 스택으로 전달된다. (인자를 저장하는 영역이 따로 있음) 스택에서의 지역 저장 공간 지역 데이터가 스택 내부 Local variables에 저장되는 경우는 다음과 같다. 지역 변수의 수가 레지스터보다 더 많을때, 지역변수의 &연산자가 사용되어, 변수의 주소를 생성해야 할 때, 배열 또는 구조체일때 레지스터를 이용하는 지역저장소 프로그램 레지스터들은 모든 프로시저들이 공유함 피호출자 레지스터는 호출자가 나중에 사용할 경우를 고려해서 레지스터 값을 덮어쓰지 않..
CSAPP 데이터의 형식 C declaration Intel data type Assembly-code suffix Size char Byte b 1 short Word w 2 int Double word l 4 long Quad word q 8 char * Quad word q 8 float Single precision s 4 double Double precision l 8 이 내용은 인텔 레지스터에 자주 사용되는 단위임으로 Assembly-code suffix는 모두 외우고 있는게 좋다. 정보 접근하기 정수 레지스터 중첩된 상자들이 보여주듯이 인스트럭션들은 16개의 레지스터 하위 바이트들에 저장된 다양한 크기의 데이터에 대해 연산할 수 있다. 역할 스택을 관리하고, 함수의 인자를 넘겨주고, 함수에..
백준 문제풀이 1. 1388 바닥장식 import sys input = sys.stdin.readline n, m = map(int, input().split()) plate = [] for i in range(n): row = input().rstrip() plate.append(row) count = 0 # 가로 타일 탐색 for i in range(n): flag = False for j in range(m): if plate[i][j] == "-" and flag == False: flag = True count += 1 elif flag == True and plate[i][j] == "|": flag = False for i in range(m): flag = False for j in ran..