CS 133

[프로그래머스] 여행경로

https://school.programmers.co.kr/learn/courses/30/lessons/43164 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이동 가능한 모든 경로 중 알파벳 순서가 앞서는 경로를 return하면 된다. 그리고 모든 항공권을 사용해야 한다. 따라서 dfs를 사용했다. 그리고 dfs 중간에 usedTicket[i] = false로 초기화해줘야 한다. 예를 들어 JFK를 먼저 방문했으면 그 다음 경로에서는 JFK를 방문하지 못하도록 방문처리를 해줬지만, 다른 공항을 먼저 방문한 후의 경로에서는 JFK를 방문할 수 있어야 하..

CS/Algorism 2024.03.06

디스크 관리

디스크는 컴퓨터 시스템의 대표적인 2차 저장장치이다. 메모리는 휘발성 저장장치이므로 전원이 나가면 그 내용이 모두 사라진다. 따라서 컴퓨터에서 수행한 작업의 결과를 영구적으로 보관하기 위해서는 디스크 같은 2차 저장장치를 이용해야 한다. 디스크의 구조 논리블록: 디스크 외부에서는 디스크를 일정한 크기의 저장공간들로 이루어진 1차원 배열처럼 취급하게 된다. 그리고 이때 이 일정한 크기의 저장공간을 논리블록이라고 한다. 디스크에 데이터가 저장될 때 논리블록 단위로 저장되고, 디스크 외부로 입출력이 일어날 때도 논리블록 단위로 전송된다. 섹터: 각 논리블록이 저장되는 디스크 내의 물리적 위치이다. 디스크 컨트롤러가 논리블록을 디스크 내의 섹터 번호로 매핑하는 역할을 담당한다. 즉, 해당 논리블록이 저장된 물리..

CS/Operating System 2024.03.05

[백준] 1082. 방 번호

https://www.acmicpc.net/problem/1082 1082번: 방 번호 첫째 줄에 N이 주아진다. 둘째 줄에는 공백으로 구분된 P0, ..., PN-1이 주어진다. 마지막 줄에는 M이 주어진다. www.acmicpc.net 그리디 문제로, 주요 포인트는 다음과 같다. 가격이 싼 숫자를 우선으로 골라야 많은 숫자를 구매할 수 있어서 자릿수가 길어진다! 그런데 가격이 가장 싼 숫자가 0(인덱스가 0)이라면, 맨 앞자리 수가 0이 되어 자릿수랑 무관하게 큰 숫자가 될 수 없다. 따라서 가격이 가장 싼 숫자가 0이라면, 그 다음으로 싼 숫자를 제일 앞에 두고, 나머지 자릿수는 가장 싼 숫자를 둔다. 반면 가격이 가장 싼 숫자가 0이 아니라면, 해당 숫자를 최대한 많이 고른다. 위 과정으로 최대한..

CS/Algorism 2024.03.05

[백준] 1034. 램프

https://www.acmicpc.net/problem/1034 1034번: 램프 첫째 줄에 N과 M이 주어진다. N은 행의 개수이고, M은 열의 개수이다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 램프의 상태가 주어진다. 1이 켜져있는 상태이고, 0이 꺼져 www.acmicpc.net 처음에는 완전 탐색으로 m개의 열 중 k번 스위치를 눌러 켜진 행의 갯수를 구하려고 했다. 그런데 이렇게 하면 m개의 열 중 중복을 허용하여 k개를 고르는 것이기 때문에 m^k (50 ^ 1000)으로 시간초과가 날 것이다. 주요 포인트는 다음과 같다. 행 단위로 생각해보자. 하나의 행을 모두 1로 만들어야 켜진 행이 된다. (1) 만약 하나의 행에 0의 갯수가 k보다 크면, 그 행은 절대..

CS/Algorism 2024.03.05

관계형 데이터베이스(RDB) vs 비관계형 데이터베이스(NoSQL)

RDB 사전에 정의된 스키마 RDB는 사전에 스키마를 정의하고 정의된 스키마에 맞춰서 데이터를 저장하기 때문에 명확한 데이터 구조를 보장한다. 그러나 이러한 특성으로 인해 확장성이 부족하다. 만약 스키마에 새로운 컬럼을 추가하려고 하는데 이미 테이블에 수많은 데이터가 존재한다면, 칼럼을 추가하는 작업은 부담스러울 수 있다. 데이터 중복 RDB의 기본 철학은 데이터의 중복을 허용하지 않는다. 따라서 데이터 중복을 제거하기 위해 정규화를 진행한다. 그러나 이로 인해 통합된 데이터를 읽어오기 위해 여러 테이블을 조인하는 작업이 일어나고 이로 인해 조회 성능이 하락한다. 스케일 아웃 RDB는 스케일 아웃에 유연한 DB가 아니다. 따라서 성능 향상을 위해 스케일 업을 진행하며 이로 인해 비용이 늘어날 수 있다. ..

CS/Database 2024.03.04

메모리 관리 기법 - 페이징 기법

페이징 기법페이징 기법은 논리적 메모리를 동일 크기의 페이지로 나누고, 물리적 메모리도 페이지와 동일 크기의 페이지 프레임으로 나눈다. 장점프로세스의 논리적 주소 공간과 물리적 메모리 공간이 모두 같은 크기의 페이지/프레임 단위로 나누어지기 때문에 외부 조각이 발생하지 않는다. 단점 프로그램의 크기가 항상 페이지 크기로 정확히 나누어 떨어지지 않을 수 있기 때문에 프로세스의 논리적 주소 공간 중 제일 마지막에 위치한 페이지에서는 물리적으로 내부조각이 발생할 수 있다.페이징 기법은 하나의 프로세스라 하더라도 페이지 단위로 물리적 메모리에 올리는 위치가 상이하다. 따라서 주소 바인딩 작업이 페이지 단위로 이루어지기 때문에 주소 바인딩 과정이 연속할당 방식에 비해 복잡하다. 페이지 테이블하나의 프로세스에는 여..

CS/Operating System 2024.02.29

가상 메모리와 메모리 관리 기법

가상 메모리가상 메모리는 메모리 관리 기법의 하나로, 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방식이다. 프로그램이 실행되면 프로그램의 모든 코드와 데이터는 가상 메모리에 할당된다. 가상 메모리는 추상화된 메모리 공간으로, 각 프로세스마다 가상 메모리를 갖는다. 그러나 가상 메모리에 할당된 코드와 데이터는 물리적 메모리에 로드될 때까지 실제 메모리에 존재하지 않는다. 가상 주소(논리 주소): 가상적으로 주어진 주소물리 주소(실주소): 실제 RAM 메모리 상에서의 주소메모리 관리자(운영체제)는 프로그램을 물리적 메모리에 적재하기도 하고, 물리적 메모리 부족 시 스왑 영역으로 스왑 아웃시키기도 한다. 즉, 프로세스 입장에서는 물리적 메모리를 신경쓰지 않고 자신이 필요한 만큼 가상 주..

CS/Operating System 2024.02.29

[백준] 2493. 탑

https://www.acmicpc.net/problem/2493 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 www.acmicpc.net 특별한 알고리즘이 필요하지 않은 문제이다. 그런데 자료구조로 스택을 사용해야 한다! 주요 로직은 다음과 같다. 스택이 비어있으면, 답은 0이고 현재 값을 스택에 push한다. 그렇지 않으면, peek한 값과 현재 값을 비교한다. peek한 값이 더 크면, 답은 peek한 값의 인덱스이고 현재 값을 스택에 push한다. 그렇지 않으면, peek한 값을 pop하고 2번으로 돌아간다. 예제 1번의 경..

CS/Algorism 2024.02.29

CPU 스케줄링

CPU 버스트 시간에 따른 프로세스의 종류 기계어 명령은 다음 세 가지 명령으로 구분된다. CPU 내에서 수행되는 명령: CPU 내에서만 수행되므로 명령 수행 속도가 매우 빠르다. (ex, add 명령: 레지스터에 있는 두 값을 더해 레지스터에 저장) 메모리 접근을 필요로 하는 명령: CPU 내에서 수행되는 명령에 비해 오래 소요되지만 비교적 짧은 시간에 수행할 수 있는 명령에 해당된다. (ex, load 명령: 메모리의 데이터를 CPU로 읽어 들임, store 명령: CPU에서 계산된 결과값을 메모리에 저장) 입출력을 동반하는 명령: CPU나 메모리 접근 명령에 비해 아주 오랜 시간이 소요된다. CPU 내에서 수행되는 명령과 메모리 접근을 필요로 하는 명령은 사용자 프로그램이 직접 수행할 수 있는 일반..

CS/Operating System 2024.02.28

[Real MySQL] 5. 트랜잭션과 락

트랜잭션 잠금(락)과 트랜잭션은 서로 비슷한 개념 같지만 잠금은 동시성을 제어하기 위한 기능이고, 트랜잭션은 데이터 정합성을 보장하기 위한 기능이다. 락: 여러 커넥션에서 동시에 동일한 자원을 요청할 경우 순서대로 한 시점에는 하나의 커넥션만 변경할 수 있게 해주어 데이터 정합성을 지켜준다. 트랜잭션 격리 수준: 여러 트랜잭션 간의 작업 내용을 어떻게 공유하고 차단할 것인지를 결정하는 레벨을 의미한다. MySQL에서 MyISAM 스토리지 엔진과 MEMORY 스토리지 엔진은 트랜잭션을 지원하지 않지만 InnoDB 스토리지 엔진은 트랜잭션을 지원한다. 트랜잭션을 지원하지 않는 경우에는 데이터의 정합성을 맞추는 것이 중요하고 어려운 문제가 된다. 하지만 트랜잭션을 지원하는 경우에는 애플리케이션 개발에서 고민해..

CS/Database 2024.02.27