분류 전체보기 142

[백준] 1202번: 보석 도둑 (c++)

문제 세계적인 도둑 상덕이는 보석점을 털기로 결심했다. 상덕이가 털 보석점에는 보석이 총 N개 있다. 각 보석은 무게 Mi와 가격 Vi를 가지고 있다. 상덕이는 가방을 K개 가지고 있고, 각 가방에 담을 수 있는 최대 무게는 Ci이다. 가방에는 최대 한 개의 보석만 넣을 수 있다. 상덕이가 훔칠 수 있는 보석의 최대 가격을 구하는 프로그램을 작성하시오. 1202번: 보석 도둑 첫째 줄에 N과 K가 주어진다. (1 ≤ N, K ≤ 300,000) 다음 N개 줄에는 각 보석의 정보 Mi와 Vi가 주어진다. (0 ≤ Mi, Vi ≤ 1,000,000) 다음 K개 줄에는 가방에 담을 수 있는 최대 무게 Ci가 주어진다. (1 ≤ Ci www.acmicpc.net 문제조건 1 ≤ N, K ≤ 300,000 0 ≤..

알고리즘/BOJ 2021.09.29

[Javascript] for of, forEach, map 비교

for of for (variable of iterable) { statement } 반복가능한 객체 (Array, Map, Set, String, TypedArray, arguments 객체 등을 포함)에 대해서 반복한다. 컬렉션 전용. const a = ['a', 'b', 'c']; for (const [index, element] of a.entries()) console.log(index, element); // 0 'a' // 1 'b' // 2 'c' 인덱스를 구하기 위해서는 entries() 메서드를 사용해야 한다. 중간에 break 문을 만나면 반복문을 중단한다. forEach arr.forEach(callback(currentvalue[, index[, array]])[, thisArg]..

JavaScript 2021.09.29

[백준] 1647번: 도시 분할 계획 (c++)

문제 마을은 N개의 집과 그 집들을 연결하는 M개의 길로 이루어져 있다. 길은 어느 방향으로든지 다닐 수 있는 편리한 길이다. 그리고 각 길마다 길을 유지하는데 드는 유지비가 있다. 마을의 이장은 마을을 두 개의 분리된 마을로 분할할 계획을 가지고 있다. 마을이 너무 커서 혼자서는 관리할 수 없기 때문이다. 마을을 분할할 때는 각 분리된 마을 안에 집들이 서로 연결되도록 분할해야 한다. 각 분리된 마을 안에 있는 임의의 두 집 사이에 경로가 항상 존재해야 한다는 뜻이다. 마을에는 집이 하나 이상 있어야 한다. 그렇게 마을의 이장은 계획을 세우다가 마을 안에 길이 너무 많다는 생각을 하게 되었다. 일단 분리된 두 마을 사이에 있는 길들은 필요가 없으므로 없앨 수 있다. 그리고 각 분리된 마을 안에서도 임의..

알고리즘/BOJ 2021.09.28

[운영체제] 페이징(Paging), TLB

Paging? contiguous allocation(연속 메모리 할당)을 사용하면 외부 단편화가 발생한다. Compaction을 사용하면 외부 단편화는 해결할 수 있지만, 오버헤드가 발생하기 때문에 비효율적이다. 이를 해결하기 위해 나온 방법이 페이징(paging)이다. 페이징은 프로세스가 차지하는 물리적 메모리 공간이 비연속적이 되도록 허용하는 메모리 관리 기법을 말한다. 페이징은 외부 단편화가 발생하지 않으며, 따라서 별도의 Compaction이 필요하지 않다(단, 내부 단편화는 발생할 수 있다). 논리적인 분할이 아닌 크기에 따른 분할이며 간단하다. 이러한 이점 때문에 대형 서버용 시스템에서 모바일 장치용 시스템에 이르기가지 대부분의 운영체제에서 페이징을 사용되고 있다. 페이징을 구현하는 기본적인..

운영체제 2021.09.27

[백준] 17143번: 낚시왕 (c++)

문제 낚시왕이 상어 낚시를 하는 곳은 크기가 R×C인 격자판으로 나타낼 수 있다. 격자판의 각 칸은 (r, c)로 나타낼 수 있다. r은 행, c는 열이고, (R, C)는 아래 그림에서 가장 오른쪽 아래에 있는 칸이다. 칸에는 상어가 최대 한 마리 들어있을 수 있다. 상어는 크기와 속도를 가지고 있다. 낚시왕은 처음에 1번 열의 한 칸 왼쪽에 있다. 다음은 1초 동안 일어나는 일이며, 아래 적힌 순서대로 일어난다. 낚시왕은 가장 오른쪽 열의 오른쪽 칸에 이동하면 이동을 멈춘다. 낚시왕이 오른쪽으로 한 칸 이동한다. 낚시왕이 있는 열에 있는 상어 중에서 땅과 제일 가까운 상어를 잡는다. 상어를 잡으면 격자판에서 잡은 상어가 사라진다. 상어가 이동한다. 상어는 입력으로 주어진 속도로 이동하고, 속도의 단위는..

알고리즘/BOJ 2021.09.27

[Javascript] Optional Chaining

Syntax obj?.prop obj?.[expr] arr?.[index] func?.(args) ?.은 해당 객체가 nullish 즉, undefined나 null인 경우에 TypeError 대신에 undefined를 얻게 해준다. 기존에 && 연산자를 사용하거나 lodash라이브러리를 사용하는 것보다 편리하다. 프로퍼티, 메서드, 배열 모두 사용이 가능하다. 단, ?.은 할당 연산자 왼쪽에서 사용할 수 없다. 따라서 값을 읽거나 삭제할 때만 사용한다(값 쓰기x). 예시 const adventurer = { name: 'Alice', cat: { name: 'Dinah' } }; console.log(adventurer.dog?.name); // undefined console.log(adventure..

JavaScript 2021.09.23

[백준] 9466번: 텀 프로젝트 (c++)

문제 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을 수도 있다. 프로젝트 팀을 구성하기 위해, 모든 학생들은 프로젝트를 함께하고 싶은 학생을 선택해야 한다. (단, 단 한 명만 선택할 수 있다.) 혼자 하고 싶어하는 학생은 자기 자신을 선택하는 것도 가능하다. 학생들이(s1, s2, ..., sr)이라 할 때, r=1이고 s1이 s1을 선택하는 경우나, s1이 s2를 선택하고, s2가 s3를 선택하고,..., sr-1이 sr을 선택하고, sr이 s1을 선택하는 경우에만 한 팀이 될 수 있다. 예를 들어, 한 반에 7명의 학생이 있다고 하자. 학생들을 1번부터 7번으..

알고리즘/BOJ 2021.09.23

[운영체제] 연속 메모리 할당

배경 지식 Basic Hardware Block: 보조기억장치와 주기억장치 사이의 데이터 전송 단위. 1~4KB Word: 주기억장치와 레지스터 사이의 데이터 전송 단위. 16~64bits 레지스터와 캐시는 HW가 관리(CPU)하고, 메인 메모리와 보조기억장치는 SW가 관리한다(OS). CPU는 레지스터를 참조하며, 레지스터 정보는 PCB에 담겨있다. 각각의 프로세스가 독립된 메모리 공간을 가지도록 보장해야 한다. 개별적인 메모리 공간을 분리하여 보호하기 위해 레지스터는 base와 limit으로 나뉘진다. base는 프로세스가 메모리에서 사용할 수 있는 가장 작은 physical address를 의미하며,limit은 사용할 수 있는 주소의 크기를 의미한다. 즉, 프로세스가 사용할 수 있는 가장 큰 주소는..

운영체제 2021.09.22

[백준] 10942번: 팰린드롬? (c++)

문제 홍준이는 자연수 N개를 칠판에 적는다. 그 다음, 명우에게 질문을 총 M번 한다. 각 질문은 두 정수 S와 E(1 ≤ S ≤ E ≤ N)로 나타낼 수 있으며, S번째 수부터 E번째 까지 수가 팰린드롬을 이루는지를 물어보며, 명우는 각 질문에 대해 팰린드롬이다 또는 아니다를 말해야 한다. 예를 들어, 홍준이가 칠판에 적은 수가 1, 2, 1, 3, 1, 2, 1라고 하자. S = 1, E = 3인 경우 1, 2, 1은 팰린드롬이다. S = 2, E = 5인 경우 2, 1, 3, 1은 팰린드롬이 아니다. S = 3, E = 3인 경우 1은 팰린드롬이다. S = 5, E = 7인 경우 1, 2, 1은 팰린드롬이다. 자연수 N개와 질문 M개가 모두 주어졌을 때, 명우의 대답을 구하는 프로그램을 작성하시오...

알고리즘/BOJ 2021.09.22

[알고리즘] 그래프

그래프 자료구조의 일종 정점(Node, Vertex)과 간선(Edge)로 이루어져 있음 G = (V, E)로 나타낸다 차수(Degree): 정점과 연결되어 있는 간선의 개수 방향 그래프이 경우에는 In-degree, Out-degree로 나누어서 차수를 계산한다 그래프의 표현 인접 행렬 정점의 개수를 V라고 했을 때 V*V 크기의 이차원 배열을 이용 A[i][j] =1 (i→j 간선이 있을 때, 가중치가 있을 경우 가중치), 0 (없을 때) 공간 복잡도: O(\(V^2\)) 인접 리스트 A[i] : i와 연결된 정정을 리스트로 포함 리스트의 크기는 동적으로 변경할 수 있어야(원칙적으로는 링크드 리스트, c++에서는 vector 사용) 공간 복잡도: O(E) 대체적으로 인접 리스트가 효율적 그래프의 탐색 ..

알고리즘/공부 2021.09.20
반응형