본문 바로가기

전체보기

(180)
백준 [1090] 체커(Python3) 문제 링크 : https://www.acmicpc.net/problem/1090 1090번: 체커 N개의 체커가 엄청 큰 보드 위에 있다. i번 체커는 (xi, yi)에 있다. 같은 칸에 여러 체커가 있을 수도 있다. 체커를 한 번 움직이는 것은 그 체커를 위, 왼쪽, 오른쪽, 아래 중의 한 방향으로 한 칸 www.acmicpc.net 좌표 다루는 문제는 경험이나 스킬이 부족해서 잘 풀지 못했는데 이번에 학회 내의 랑이집사 님의 특강을 통해 완전탐색을 통한 문제 추론 과정 설명을 듣고 거기에 맞춰 풀었다. 참고한 블로그 링크 : https://m.blog.naver.com/PostView.naver?blogId=gojib2002&logNo=222207408308&proxyReferer=https:%2F%..
파일 시스템 들어가기 전에 학교 수업 때 배운걸 다시 정리해서 쓴 글입니다. 오타 및 잘못된 부분 지적은 언제나 환영입니다! 파일 시스템이란? 파일이 디스크에 관리될 수 있도록 해주는 자료구조들의 집합 디스크에서 파일 시스템 구성 디스크의 연속된 블록 공간을 할당 받아, 그곳에 파일들의 메타 데이터들을 저장한다. 이 파일의 메타데이터 집합을 Inode라 하고, 이 Inode가 담긴 블록을 Inode 블록이라 한다. Inode 블록 포함 파일 시스템과 관련한 블록을 제외한 나머지 블록은 데이터 블록이다. 디스크 내에 32개의 블록이 있을 때 각 요소들을 대략적으로 표현하면 다음과 같다. inode(index node) unix기반 시스템에서 파일에 대한 메타 데이터들의 집합. 고유한 숫자로 이루어졌으며, 파일 시스템에..
스레드 들어가기 전에 학교 수업 때 배운걸 다시 정리해서 쓴 글입니다. 오타 및 잘못된 부분 지적은 언제나 환영입니다! 프로세스도 포함되는 내용들이 있지만, 이 글에서는 스레드를 기준으로 작성했습니다. 원자적 : 실패 또는 성공만 있고 일부만 성공은 허용하지 않음 스레드란? 프로세스 내부 상태를 가지고 독립적으로 실행 가능한 작업 단위 독립적으로 실행되며, 여러 루틴들을 호출할 수 있기 때문에 각 스레드마다 스택 주소 공간을 가지고있다. 이 부분에 대해선 사람마다 정의가 다르고 표현도 모호하기 때문에 여러 글을 참고하는걸 추천한다. 스레드와 프로세스의 차이? cs 대비할 때 꼭 나오는 질문이다. 쉽게 말하면 스레드끼리는 힙을 공유하고, 프로세스끼리는 공유하지 않는다. c 같은 경우 전역 변수나 이런 걸로도 스레..
주소 변환 들어가기 전에 학교 수업 때 배운걸 다시 정리해서 쓴 글입니다. 오타 및 잘못된 부분 지적은 언제나 환영입니다! 주소체계는 8bit, 페이지 테이블 항목(Page Table Entry)는 4byte로 예시를 만들었습니다. 주소 변환이 필요한 이유 프로세스가 메모리에 할당되는 과정에서 연속된 공간을 할당받지 못하거나 문맥 교환을 통해 이전과는 다른 메모리 공간을 할당받을 수 있다. 이런 상황에서도 프로세스의 논리적 주소를 기반으로 물리 메모리에 매칭시키게 해야 한다. 이렇게 주소 변환 기법을 통해 프로세스는 물리 메모리에 자신만의 독립된 공간이 있다는 환상을 가진다. 메모리 관련 용어 동적 로딩 : 프로세스를 실행할 땐, 모든 정보가 메모리에 올라가지 않고, 필요한 부분만 올라가게 하는 기법\ 동적 링킹 ..
프로그래머스 - [1차] 뉴스 클러스터링 들어가기 전에 문제를 해결하기 위해 어떤 생각을 했는지 기록하기 위해 쓰는 글입니다. O(10^8)의 계산을 1초라 가정했습니다. 잘못되거나 개선이 필요한 부분 지적은 언제나 환영입니다! 지문 해석 두 문자열 str1, str2을 upper나 lower를 통해 대문자나 소문자로 변환해야 한다 변환된 문자를 슬라이딩 윈도우를 통해 특수문자가 있는지 확인하고, 없다면 배열에 추가한다. 각각 시간 복잡도가 O(n)이 나온다. 그 후, 슬라이딩 윈도우의 결과를 가지고 교집합과 합집합을 구한다. 여기서 주의할 점은 교집합을 구하는 과정에서 교집합이 된 쌍은 다음 교집합 확인에서 제외해야 한다. 예를 들자면 A = {1, 1, 2, 2, 3}, B = {1, 2, 2, 4, 5} 의 교집합에서 A[0] = 1과 B..
R-Tree 인덱싱 병목 해결 과정 들어가기 전에 오타나 잘못된 부분 지적은 언제나 환영입니다! 개인 PC에서 개발을 하고 성능 측정을 했기 때문에 백그라운드 프로그램으로 인한 변수가 있을 수 있습니다. 성능 측정에 대한 부분은 아직 미숙한 부분이 많습니다. 잘못된 측정에 관한 지적은 환영입니다. 발생한 문제 $ logN $의 시간 복잡도를 보장해야 할 R-Tree 인덱싱이 $ N^2 $의 시간 복잡도로 수행됐다. 처음엔 코드의 문제라 생각해 best practice 코드들과 비교했고 그 다음엔 다른 인덱싱 알고리즘들을 적용했다. 검색만으로는 문제를 해결하는 것이 불가능해 R-tree 코드를 분석한 결과 도로 데이터는 R-Tree 인덱싱 구성에 불리한 구조란 것을 알았다. 프로젝트 상황 dbms 버전 : PostgreSQL 13.5, Po..
문맥 교환(context switching) 들어가기 전에 학교 수업 때 배운걸 다시 정리해서 쓴 글입니다. 오타 및 잘못된 부분 지적은 언제나 환영입니다! 프로세스의 3가지 상태 running : CPU 자원을 할당받아 실행중인 프로세스 ready: CPU 자원을 받는다면 바로 실행 가능한 프로세스 block : CPU 자원을 받아도 실행이 불가능한 상태 ex) I/O 작업 완료 대기 이 외에도 디스크에서 swap 대기와 swap 불가 상태가 있지만 크게 3가지로 본다. 프로세스의 문맥 교환 조건 Timer 인터럽트 발생 cpu에선 일정 주기마다 실행 중인 프로세스의 자원을 회수하고 ready 상태의 다른 프로세스에게 할당한다. 자원이 회수된 프로세스는 ready 상태가 된다. I/O 인터럽트 발생 I/O 연산같이 느린 연산의 경우, 작업이 완료..
프로세스의 생성과 통신 들어가기 전에 학교 수업 때 배운걸 다시 정리해서 쓴 글입니다. 오타 및 잘못된 부분 지적은 언제나 환영입니다! 프로세스의 생성 최초의 프로세스는 OS가 생성하고 그 이후는 다른 프로세스가 프로세스를 생성하게 된다. 보통 이 프로세스 생성 관계를 부모/자식 관계로 비유한다. 리눅스에선 이 관계를 트리 형태로 보여준다. OS가 생성한 init 프로세스를 최초로 생성하고 그 이후는 init 프로세스에서 파생된다. 이렇게 부모-자식 관계가 형성되는 목적은 2가지이다. 1. 부모와 자식 프로세스가 같이 수행되기 위해 이 경우, 부모와 다른 자원공간을 할당받을 수 있고, 부모와 자원을 공유해 사용할 수 있다. 부모와 자식이 CPU 자원을 두고 경쟁하게 된다. 2. 다른 프로그램이 실행된 결과를 기다려야 할 때 부..