본문 바로가기

반응형

컴퓨터 과학/자료구조 및 알고리즘

(38)
그래프(Graph), 넓이 우선 탐색(BFS), 깊이 우선 탐색(DFS) 그래프(Graph)는 각 정점(Vertex)와 간선(Edge)로 이루어진 자료구조이다. 그래프는 실생활에서도 많이 접할 수 있다. 버스 노선도, 지하철 노선도도 일종의 그래프이다. 그래프는 자료 구조 중에서도 가장 근본적인(?) 자료 구조라고 볼 수 있다. 그 예로 리스트(List)의 경우에도 구성을 보면 하나의 노드(Node)에 데이터와 다음 혹은 이전의 노드에 대한 정보를 저장하고 있어서 서로 연결되어 있다는 점에서 그래프의 정의라고 볼 수 있다. 트리 역시 루트 노드(Root Node)를 시작으로 밑에 자식 노드(Child Node)들이 연결되어 구성된다는 점에서 간선에서 제약 사항이 있는 그래프라고 볼 수 있다. 그래프를 표현하는 방식에는 인접행렬로 표현하는 것과 인접리스트로 표현하는 방식이 있다..
백준 10830, 행렬 제곱 문제 크기가 N*N인 행렬 A가 주어진다. 이때, A의 B제곱을 구하는 프로그램을 작성하시오. 수가 매우 커질 수 있으니, A^B의 각 원소를 1,000으로 나눈 나머지를 출력한다. 입력 첫째 줄에 행렬의 크기 N과 B가 주어진다. (2 ≤ N ≤ 5, 1 ≤ B ≤ 100,000,000,000) 둘째 줄부터 N개의 줄에 행렬의 각 원소가 주어진다. 행렬의 각 원소는 1,000보다 작거나 같은 자연수 또는 0이다. 출력 첫째 줄부터 N개의 줄에 걸쳐 행렬 A를 B제곱한 결과를 출력한다. 예제 입력 1 2 5 1 2 3 4 예제 출력 1 69 558 337 406 예제 입력 2 3 3 1 2 3 4 5 6 7 8 9 예제 출력 2 468 576 684 62 305 548 656 34 412 예제 입력 3 ..
분할 정복과 거듭 제곱 알고리즘 분할 정복 알고리즘(Divide and conquer algorithm)은 그대로 해결할 수 없는 어려운 문제를 작은 문제로 분할하여 해결하는 알고리즘을 의미한다. 재귀함수(Recursive function)를 통해서 자연스럽게 구사되는 데 대략적으로 이렇게 구성된다. Recursive_Function(input){ if(input is simple){ return answer; } else{ partitial_Answer_1 = Recursive_Function(part_of_input_1); partitial_Answer_2 = Recursive_Function(part_of_input_2); partitial_Answer_3 = Recursive_Function(part_of_input_3); ....
백준 11401, 이항 계수 3 문제 자연수 N과 정수 K가 주어졌을 때 이항 계수 nCk를 1,000,000,007로 나눈 나머지를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 4,000,000, 0 ≤ K ≤ N) 출력 nCk를 1,000,000,007로 나눈 나머지를 출력한다. 예제 입력 5 2 예제 출력 10 처음에 이 문제에 대해서 접근할 때는 동적 프로그래밍(Dynamic Programming)을 이용하여 최대한 잡아 먹는 메모리를 줄이면서 문제를 해결하고자 하였다. 이항 계수를 구하기만 하면 나머지를 구하는 것은 무척 쉬운 일이라고 생각했다. 다음과 같이 문제를 해결하고자 하였다. 아무 것도 고르지 않은 경우에 대해서 1을 반환하고 이를 조합 리스트에 저장한다. 만약 조합 리스트에 출..
백준 1655 번, 가운데를 말해요 문제 백준이는 동생에게 "가운데를 말해요" 게임을 가르쳐주고 있다. 백준이가 정수를 하나씩 외칠때마다 동생은 지금까지 백준이가 말한 수 중에서 중간값을 말해야 한다. 만약, 그동안 백준이가 외친 수의 개수가 짝수개라면 중간에 있는 두 수 중에서 작은 수를 말해야 한다. 예를 들어 백준이가 동생에게 1, 5, 2, 10, -99, 7, 5를 순서대로 외쳤다고 하면, 동생은 1, 1, 2, 2, 2, 2, 5를 차례대로 말해야 한다. 백준이가 외치는 수가 주어졌을 때, 동생이 말해야 하는 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에는 백준이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 백준이가 외치는 정수가 차례대로..
백준, 12865 번(평범한 배낭) 문제 이 문제는 아주 평범한 배낭에 관한 문제이다. 한 달 후면 국가의 부름을 받게 되는 준서는 여행을 가려고 한다. 세상과의 단절을 슬퍼하며 최대한 즐기기 위한 여행이기 때문에, 가지고 다닐 배낭 또한 최대한 가치 있게 싸려고 한다. 준서가 여행에 필요하다고 생각하는 N개의 물건이 있다. 각 물건은 무게 W와 가치 V를 가지는데, 해당 물건을 배낭에 넣어서 가면 준서가 V만큼 즐길 수 있다. 아직 행군을 해본 적이 없는 준서는 최대 K만큼의 무게만을 넣을 수 있는 배낭만 들고 다닐 수 있다. 준서가 최대한 즐거운 여행을 하기 위해 배낭에 넣을 수 있는 물건들의 가치의 최댓값을 알려주자. 입력 첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 ..

반응형