메모리 무결성?메모리 무결성(Memory Integrity)은 윈도우의 코어 격리(Core Isolation) 기능 중 하나이다. 쉽게 말해서 가상화 기반 보안(VBS, Virtualization-based Security)을 이용해서 시스템의 핵심 프로세스들을 일반 소프트웨어와 분리해서 보호하는 기능이다. 좀 더 구체적으로는 HVCI(Hypervisor-protected Code Integrity)라는 기술을 사용한다. 이 기술은 하이퍼바이저 계층에서 커널 수준의 코드 무결성을 검증해서, 악성 코드가 시스템 메모리에 침투하거나 중요한 시스템 프로세스를 조작하는 것을 차단한다. 기본적으로 윈도우 커널과 드라이버들이 메모리에서 실행되기 전에 디지털 서명을 검증하고, 서명되지 않았거나 손상된 코드의 실행을 ..
개요문제 이름: 상자넣기 (1965) 문제 링크: https://www.acmicpc.net/problem/1965플랫폼: 백준알고리즘 분류: 다이나믹 프로그래밍소요 시간: 30분 문제 전문설명 입출력 문제 풀이해설이 문제는 동적 계획법(Dynamic Programming, DP)을 사용하여 LIS(Longest Increasing Subsequence, 일명 '최장 증가 부분 수열')을 찾는 문제입니다. 문제를 요약하면 다음과 같습니다.상자들이 일렬로 나열되어 있고, 순서를 유지하면서 선택해야 합니다.앞에 있는 상자의 크기가 뒤에 있는 상자의 크기보다 작을 때만 넣을 수 있습니다.최대한 많은 상자를 한 번에 넣을 수 있는 개수를 구해야 합니다.즉, 이는 주어진 수열에서 크기가 점점 커지는 부분 수열 ..
개요문제 이름: 이동하기 (11048)문제 링크: https://www.acmicpc.net/problem/11048플랫폼: 백준알고리즘 분류: DP소요 시간: 1시간 30분 문제 전문설명입출력 문제 풀이해설이 문제는 N×M 크기의 미로에서 준규가 (1, 1)에서 (N, M)까지 이동하면서 최대한 많은 사탕을 모으는 최적의 경로를 찾는 문제입니다. 동적 계획법(Dynamic Programming, DP)를 사용하여 해결할 수 있는문제입니다. 문제를 요약하면 다음과 같습니다.N x M 크기의 미로가 주어집니다.각 칸에는 사탕이 일정 개수 있습니다.(1,1)에서 출발하여 (N,M)까지 가는데, 오른쪽, 아래, 오른쪽 아래 대각선 방향으로만 이동 가능합니다.준규가 (N,M)에 도착했을 때 가져올 수 있는 사..
개요문제 이름: 센서 (2212) 문제 링크: https://www.acmicpc.net/problem/2212플랫폼: 백준알고리즘 분류: 그리디 알고리즘, 정렬소요 시간: 1시간 문제 전문설명입출력 문제 풀이해설이 문제는 그리디 알고리즘을 사용하여 최소한의 수신 영역으로 모든 센서를 커버하는 문제입니다. 문제를 요약하면 다음과 같습니다.N개의 센서가 일직선 상에 위치하고 있습니다.최대 K개의 집중국을 설치하여 모든 센서를 커버해야 합니다.각 집중국은 일정 수신 가능 영역을 가지며, 이 영역들의 길이의 합을 최소화해야 합니다.문제 접근 방법은 다음과 같습니다.먼저 센서의 개수 N이 집중국의 개수 K보다 작거나 같은 경우를 처리합니다. 이 경우에는 각 센서에 하나씩 집중국을 배치하면 되므로 수신 영역의 합..
개요문제 이름: 저울 (2437)문제 링크: https://www.acmicpc.net/problem/2437플랫폼: 백준알고리즘 분류: 정렬소요 시간: 30분 문제 전문설명입출력 문제 풀이해설이 문제는 그리디 알고리즘을 사용하여 주어진 저울추들로 측정할 수 없는 양의 정수 무게 중 최솟값을 구하는 문제입니다.문제를 요약하면 다음과 같습니다.N개의 저울추의 무게가 주어집니다.이 저울추들을 사용하여 측정할 수 없는 양의 정수 무게 중 최솟값을 구해야 합니다.문제 접근 방법은 다음과 같습니다.입력으로 저울추의 개수 N과 각 저울추의 무게가 주어집니다.저울추의 무게를 오름차순으로 정렬합니다.정렬된 저울추를 순서대로 확인하면서, 현재까지 만들 수 있는 연속된 무게의 최댓값을 갱신합니다.현재까지 만들 수 있는 무..
개요문제 이름: 카드 구매하기 (11052) 문제 링크: https://www.acmicpc.net/problem/11052플랫폼: 백준알고리즘 분류: DP소요 시간: 1시간 문제 전문설명입출력 힌트문제 풀이해설이 문제는 다이나믹 프로그래밍(DP)을 사용하여 해결할 수 있는 문제입니다. 민규가 구매하려는 카드의 개수가 N개일 때, 최대로 지불할 수 있는 금액을 구하는 것이 목적입니다. 문제에서 주어진 조건은 다음과 같습니다.카드는 카드팩 형태로만 구매할 수 있습니다.카드팩은 1개부터 N개까지의 카드를 포함하고 있습니다.각 카드팩의 가격이 P1부터 PN까지 순서대로 주어집니다.민규는 가능한 돈을 최대한 많이 지불해서 카드 N개를 구매하려고 합니다.이 문제를 풀기 위해서는 다음과 같은 접근 방식이 필요합니다..
개요 문제 이름: 음식물 피하기 (1743)문제 링크: https://www.acmicpc.net/problem/1743플랫폼: 백준알고리즘 분류: DFS소요 시간: 1시간 문제 전문설명입출력 문제 풀이해설이 문제는 DFS(깊이 우선 탐색) 알고리즘을 사용하여 음식물 쓰레기가 서로 인접한 경우 뭉쳐진 쓰레기의 최대 크기를 구하는 문제입니다. 문제를 요약하면 다음과 같습니다.N x M 크기의 통로가 주어집니다.통로의 각 칸에는 음식물 쓰레기가 존재할 수 있습니다.상하좌우로 인접한 쓰레기는 뭉쳐져서 더 큰 쓰레기가 됩니다.가장 큰 음식물 쓰레기의 크기를 구해야 합니다.문제 접근 방법은 다음과 같습니다.입력으로 N, M, K와 쓰레기의 좌표가 주어집니다. 이를 통해 통로를 나타내는 2차원 배열을 생성합니다.통..
개요문제 이름: 구간 합 구하기 5 (11660)문제 링크: https://www.acmicpc.net/problem/11660플랫폼: 백준알고리즘 분류: DP, 누적합소요 시간: 2시간 문제 전문설명입출력 문제 풀이해설이 문제는 2차원 배열에 대한 구간 합을 구하는 문제입니다. 구간 합은 배열의 특정 범위에 있는 원소들의 합을 의미합니다. 직관적인 방법으로는 매 질의마다 주어진 구간의 원소들을 모두 더하는 것이지만, 이는 시간 복잡도가 O(N^2 * M)이 되어 효율적이지 않습니다. 이 문제를 효율적으로 해결하기 위해서는 2차원 배열에 대한 누적 합(Prefix Sum)을 미리 계산해 놓는 것이 좋습니다. 2차원 누적 합 배열 prefixSum은 (1, 1)부터 (i, j)까지의 부분 배열의 합을 의미..
개요문제 이름: 효율적인 해킹 (1325) 문제 링크: https://www.acmicpc.net/problem/1325플랫폼: 백준알고리즘 분류: DFS소요 시간: 1시간 30분 문제 전문설명입출력 문제 풀이해설이 문제는 N개의 컴퓨터로 구성된 네트워크에서 가장 효율적으로 해킹할 수 있는 컴퓨터를 찾는 문제입니다. 네트워크의 특징은 신뢰 관계를 기반으로 하며, A 컴퓨터가 B 컴퓨터를 신뢰하는 경우 B 컴퓨터를 해킹하면 A 컴퓨터도 자동으로 해킹할 수 있다는 점입니다. 문제를 해결하기 위해 DFS(깊이 우선 탐색) 알고리즘을 사용합니다. DFS는 한 정점에서 시작하여 가능한 한 깊이 들어가면서 연결된 모든 정점을 방문하는 알고리즘으로, 이 문제에서는 각 컴퓨터에서 시작하여 해킹할 수 있는 모든 컴퓨터를..
개요문제 이름: LCS (9251)문제 링크: https://www.acmicpc.net/problem/9251플랫폼: 백준알고리즘 분류: DP소요 시간: 1시간 문제 전문설명입출력 문제 풀이해설이 문제는 두 문자열이 주어졌을 때, 두 문자열의 최장 공통 부분 수열(Longest Common Subsequence, LCS)의 길이를 찾는 문제입니다. LCS 문제는 대표적인 동적 계획법(Dynamic Programming, DP) 문제 중 하나입니다. 동적 계획법은 큰 문제를 작은 부분 문제로 나누어 풀이하는 알고리즘 설계 기법입니다. LCS 문제에서는 두 문자열의 부분 문제에 대한 솔루션을 통해 전체 문제의 솔루션을 구할 수 있습니다. 이 문제를 해결하기 위해서는 2차원 DP 테이블을 사용합니다. DP ..
개요문제 이름: 전화번호 목록 (5052) 문제 링크: https://www.acmicpc.net/problem/5052플랫폼: 백준알고리즘 분류: 정렬, 트리소요 시간: 1시간 30분 문제 전문설명입출력 문제 풀이해설이 문제는 주어진 전화번호 목록이 일관성을 유지하는지 판단하는 문제입니다. 전화번호 목록이 일관성을 유지하려면, 어떤 번호가 다른 번호의 접두어인 경우가 없어야 합니다. 문제를 해결하기 위해서는 다음과 같은 접근 방식을 사용할 수 있습니다.전화번호 목록을 정렬합니다.정렬을 하면 접두어 관계에 있는 번호들이 서로 인접하게 됩니다.정렬된 목록을 순회하면서 인접한 번호 쌍을 비교합니다.현재 번호가 다음 번호의 접두어인 경우, 목록은 일관성이 없는 것입니다. (NO 출력)현재 번호가 다음 번호의 ..
개요문제 이름: 트리 (1068) 문제 링크: https://www.acmicpc.net/problem/1068플랫폼: 프로그래머스/백준알고리즘 분류: 트리, DFS소요 시간: 1시간 30분 문제 전문설명 입출력 문제 풀이해설이 문제는 트리의 리프 노드 개수를 구하는 문제로, 깊이 우선 탐색(DFS) 알고리즘을 사용하여 해결할 수 있습니다. 주어진 트리에서 특정 노드를 삭제한 후 남은 트리의 리프 노드 개수를 세는 것이 목표입니다. 문제에서 요구하는 사항을 정리하면 다음과 같습니다.트리의 노드 개수 N이 주어진다. (N은 50 이하의 자연수)0번 노드부터 N-1번 노드까지 각 노드의 부모 노드 정보가 주어진다. 루트 노드는 -1로 표시된다.삭제할 노드 번호가 주어진다.주어진 트리에서 삭제할 노드를 제거하..
개요문제 이름: N번째 큰 수 (2075)문제 링크: https://www.acmicpc.net/problem/2075플랫폼: 백준알고리즘 분류: 정렬, 우선순위 큐소요 시간: 3시간 문제 전문설명제한사항메모리가 12 MB로 제한됨입출력 문제 풀이해설이 문제는 우선순위 큐를 사용하여 N x N 크기의 표에 채워진 N^2개의 수 중에서 N번째로 큰 수를 찾는 문제입니다. 모든 수는 자신의 한 칸 위에 있는 수보다 크다는 특징이 있으며, 표에 채워진 수는 모두 다릅니다. 그러기에 주어진 표에서 각 줄을 읽어 들이면서 현재 읽은 숫자들 중에서 N개의 가장 큰 수만 우선순위 큐에 유지하면 됩니다. 여기서 우선순위 큐는 우선순위가 가장 높은 요소를 먼저 꺼내는 자료구조입니다. 이 문제에서는 숫자가 클수록 우선순위..
개요문제 이름: 평범한 배낭 (12865)문제 링크: https://www.acmicpc.net/problem/12865플랫폼: 백준알고리즘 분류: 다이나믹 프로그래밍, 배낭 문제소요 시간: 5시간 문제 전문설명입출력 문제 풀이해설이 문제는 동적 계획법(Dynamic Programming)을 사용하여 해결할 수 있는 대표적인 0-1 냅색 문제(Knapsack Problem) 혹은 배낭 문제 입니다. 냅색 문제는 제한된 용량의 가방(배낭)에 가치와 무게가 다른 물건들을 넣어 가방에 담을 수 있는 물건들의 가치합을 최대로 만드는 문제입니다. 0-1 냅색 문제는 각 물건을 가방에 담을지 안 담을지 두 가지 선택만 가능한 냅색 문제의 한 종류로, 동적 계획법의 대표적인 예시 문제 중 하나입니다. 이 문제에서 요..
개발 환경 구축의 배경과 필요성현대의 웹 브라우저 환경은 매우 다양하며, 각 브라우저마다 최신 자바스크립트 기능의 지원 범위가 상이하다. 크롬, 사파리, 파이어폭스, 엣지와 같은 에버그린 브라우저들은 ES6 사양을 약 98% 정도 지원하는 반면, IE 11의 ES6 지원율은 11%에 불과하다. 게다가 매년 새롭게 등장하는 ES6+ 버전과 아직 제안 단계에 있는 ES.NEXT 사양은 브라우저별로 지원 정도가 제각각이라는 문제가 있다. 대부분의 모던 프로젝트에서는 모듈 시스템을 사용하는데, ES6의 모듈 시스템(ESM)을 사용할 때 몇 가지 중요한 문제점이 존재한다. 첫째로, IE를 포함한 구형 브라우저들은 ESM을 전혀 지원하지 않는다. 둘째로, ESM을 사용하더라도 코드의 트랜스파일링이나 번들링 작업이 ..