본문 바로가기
728x90

전체 글429

Baekjoon Training #2805 #2805 import sys input = sys.stdin.readline #시간초과 방지 N, M = map(int,input().split()) #나무 수 N, 원하는 나무 길이 M 입력 trees = [int(n) for n in input().split()] #나무들의 길이 입력 def tree_cut(): #기준 길이를 정하는 함수 define standard_len = 0 #기준 길이 0으로 초기화 while True: # 기준 길이를 1씩 늘려주며 반복 standard_len += 1 sum = 0 for i, tree in enumerate(trees): #trees 리스트의 원소를 integer type으로 그대로 입력받기 위해 이용 if tree > standard_len: #tre.. 2022. 11. 5.
Baekjoon Training #1753 #1753 문제를 풀기앞서 이번 문제에서는 코드를 작성하기 전에 공부해야하는 내용이 많았다. 우선 이문제는 정점에서 정점으로의 최단거리를 계산하는 문제중 다익스트라 알고리즘을 이용하는 문제였다. 다익스트라 알고리즘은 graph 자료구조에서 우선순위큐를 사용하여 방문하지 않은 노드를 방문하는 방식으로 최단 거리를 계산하는 알고리즘이다. 이에 대한것은 Dijkstra Algorithm 게시물에서 자세하게 다뤘다. import sys import heapq input = sys.stdin.readline #시간초과 방지 INF = 10000000000 #무한을 상징 V,E = map(int, input().split()) #정점, 간선 개수 입력 K = int(input()) #시작 정점 입력 graph = .. 2022. 11. 1.
Dijkstra Algorithm Dijkstra Algorithm 다익스트라(Dijkstra) 알고리즘은 graph 자료구조에서 우선순위큐(Priority Queue)를 사용하여 방문하지 않은 노드를 방문하는 방식으로 최단 거리를 계산하는 알고리즘이다. 이를 이해하기 위하여 graph와 Priority Queue의 기본적인 개념을 이해하고 가려고 한다. Graph 그래프는 연결되어있는 원소간의 관계를 표현한 자료구조이다. 아래와 같이 다양한 유형으로 그래프를 분류할 수 있다. Priority Queue 우선순위 큐(Priority Queue)는 들어오는 순서대로 나가는 FIFO(First In First Out)라는 특징을 갖고있는 일반적인 큐(Queue)와는 다르게 우선순위가 높은 데이터가 먼저 나가는 형태의 자료구조이다. 우선순위 .. 2022. 11. 1.
OS(system_call) System_call / Interrupt (2) 0부터 326번 까지 총 327개의 system calls를 확인해볼 수 있었다. Exit은 1번 fork는 2번 execve는 11번 read는 3번 write는 4번 Wait4는 114번 Mkdir는 39번 이었다. sys_ni_syscall의 call number는 17번이었고 -ENOSYS라는 무의미한 내용을 return하는 걸로보아 아무런 기능을 하지 않는 system call이다. system call 함수 sys_write를 modify 해본다. system call 함수는 linux-2.6.25.10/fs/read_write.c에 들어가서 접근할 수 있었다. length가 17인 string을 print할때 "length 17 string .. 2022. 10. 11.
OS(modificating kernel) Modification of the kernel /linux-2.6.25.10/init/main.c의 start_kernel() 함수를 modify해보고 해당 내용이 잘 출력이되는지 확인을 하였다. kernel을 modify하고 그 내용을 확인하기 위해서는 linux-2.6.25.10위치에서 "make bzImage"를 통해 kernel을 recompile하고 "cp arch/x86/boot/bzImage /boot/bzImage"를 통해 새로운 kernel을 boot location에 copy해주고 "reboot"를 통해 재부팅을 해주었다. 그 뒤에는 "dmesg > x", "vi x"를 통해 원하는 메세지 "hello from me"가 제대로 출력됨을 확인하였다. Modifing trap_init().. 2022. 10. 7.
자료구조론(5) Analysis of Algorithms 이전에 간단하게 복잡도 분석에 대해서 배웠으나 이제 본격적으로 알고리즘들을 분석하는 방법을 공부하였다. 대표적인 복잡도 분석 방법중 하나인 Big-O notation에 대한 개괄적인 설명이다. Big-O notation은 worst-case를 고려한 복잡도 분석법으로 복잡도 증가율의 상한(upper bound)를 나타낸다. Calculation 어떤 알고리즘을 7가지로 분류하기 위해 연산을 진행할 때는 기본적으로 Tight upper bound를 찾고자 진행한다. 예시를 통해 기본적인 연산 과정을 학습하였다. Ex1 Example: 2n + 10 is O(n) 2n+10 = 10 n >= 10/(c-2) Pick c=3 and n0 = 10 Ex2 Example:.. 2022. 10. 6.
OS (linux, start_kernel) Gentoo Linux Run Gentoo Linux on virtual machine. Making a simple program, ex1.c, with vi which displays "hello world". Compile and run it. Go to linux-2.6.25.10 directory and find all the files referred in Section 1 such as main.c, fork.c, entry_32.S, etc. 상위 디렉토리인 linux-2.6.25.10에서 grep -nr “start_kernel” * | more 명령어를 사용하여 start_kernel()함수가 init/main.c에 존재함을 확인하였습니다. cd init을 통하여 디렉토리를 이동하고 v.. 2022. 10. 3.
자료구조론(4) Template 함수 template, 클래스 template이 존재한다. 함수나 클래스를 개별적으로 작성하지 않아도 template을 통해 원하는 자료형으로 상황에 맞추어 함수나 클래스를 이용할 수 있도록 한다. #include using std::endl; using std::cout; template T myAdd(T a, T b) { return a+b; } int main(void) { cout 2022. 10. 3.
Baekjoon Training #1012 #1012 #테스트케이스 개수 t입력 t = int(input()) #crawl 함수 정의 #지렁이가 기어다니며 배추의 해충을 제거하는 과정 정의 def crawl(x, y): #좌우, 상하로 기어다니기 위해 이동 조종키 역할을 하는 searchx,y list searchx = [1, -1, 0, 0] searchy = [0, 0, 1, -1] #좌우, 상하로 기어다니는 반복문 for i in range(4): cx = x + searchx[i] cy = y + searchy[i] #기어가는 위치가 밭의 크기를 넘지 않도록 함 if(0 2022. 10. 1.
Baekjoon Training #1992 #1992 #n by n pixel의 video를 압축하는 문제 #pixel수를 결정할 n을 입력받는다. n=int(input()) #2차원 list를 입력받는다. video=[list(map(int, input())) for k in range(n)] #압축기 compressor 함수를 정의한다. def compressor(x, y, n): #parameter는 x,y좌표, n이다. pixel = video[x][y] #특정좌표의 값을 pixel값으로 설정 #pixel의 오른쪽과 아래쪽으로 퍼져나가며 조사를 진행한다. for i in range(x, x+n): for j in range(y, y+n): #조사한 부분중 pixel과 일치하지 않는 값이 존재하면 pixel을 -1로 설정 if pixel !.. 2022. 9. 27.
자료구조론(3) 오버로딩 함수의 구별 -시그니쳐가 같은 함수는 하나만 정의 (동일한 클래스 내부) -시그니쳐=> 함수이름, 형식 매개 변수의 수와 자료 유형 함수 오버로딩 -동일한 이름의 함수를 중복정의하는 것 => 이름만 같고 인자의 개수와 타입은 다른것) -조건 => 매개 변수의 개수 혹은 타입이 일치하지 않아야함 => 호출할 함수를 매개변수의 정보까지 참조해서 호출 -mangling: func(int) => func_int로 변환해서 참조 디폴트 매개 변수 -전달되지 않은 인자를 대신하기 위한 기본 값이 설정되어 있는 변수 int addInteger(int x, int y) { return x + y; } double addDouble(double x, double y) { return x + y; } 오버라이딩 .. 2022. 9. 26.
Baekjoon Training #1543 #1543 word = str(input()) search = str(input()) #문자열과 찾고자하는 타겟 문자열을 입력받는다. count = 0 i = 0 #카운터 역할을 할 count와 i를 0으로 초기화해놓음 while i 2022. 9. 26.
728x90