programming language 103

[Backtracking 예제] 백준 9663 N-Queens

문제 https://www.acmicpc.net/problem/9663 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.net N*N 배열을 만들 필요없이, 크기가 N인 일차원 배열을 만든 후 각 열에 몇번째 행에 퀸이 있는지를 저장한다. #include #define MAX 15 using namespace std; int N; int map[MAX]; int ans = 0; bool promising(int i) {//i번째 퀸과 1~i-1번째 퀸과 비교한다 int k = 1;//i번째 퀸을 배치하기 전의 퀸 bool check..

[Greedy Approach 예제] 백준 2839 설탕배달

문제 https://www.acmicpc.net/problem/2839 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 문제 풀이 #include using namespace std; //promising의 조건 int N; int ans = 0; int main() { // 설탕을 정확하게 N킬로그램을 배달해야한다. //봉지에는 3,5가 있다. cin >> N; while (N>0) { //N의 경우 //(1) 5의 배수 //(2) 3의 배수 //5,3의 배수가 아닌수 //3-1 5보다 큰 수 //3-2 음수 if (..

Backtracking

Backtracking greedy처럼 일련의 집합을 만들어 하나씩 답에 만족시키는 것을 만든다. greedy와 다르게, 조건에 맞지 않는다면 번복할 수 있다. 되돌아갈 수 있다. - used to solve problems in which a sequence of objects is chosen from a specified set so that the sequence satisfies some criterion. - after each choice has been made and added to a partial solution, it can be retracted from the solution set later by backtracking 5.1 The Backtracking Technique N..

[Greedy Approach 예제] 프로그래머스 level2 조이스틱

문제 코딩테스트 연습 - 조이스틱 조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직이면 아래와 같습니다. ▲ - 다 programmers.co.kr 문제 설명 조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직이면 아래와 같습니다. ▲ - 다음 알파벳 ▼ - 이전 알파벳 (A에서 아래쪽으로 이동하면 Z로) ◀ - 커서를 왼쪽으로 이동 (첫 번째 위치에서 왼쪽으로 이동하면 마지막 문자에 커서) ▶ - 커서를 오른쪽으로 이동 나의 풀이 #include #include..

[Greedy Approach 예제] 백준 1197 (kruskal)

문제 1197번: 최소 스패닝 트리 첫째 줄에 정점의 개수 V(1 ≤ V ≤ 10,000)와 간선의 개수 E(1 ≤ E ≤ 100,000)가 주어진다. 다음 E개의 줄에는 각 간선에 대한 정보를 나타내는 세 정수 A, B, C가 주어진다. 이는 A번 정점과 B번 정점이 www.acmicpc.net 문제 풀이 int parent[10001]; struct edge { int u, v, w; edge(int u, int v, int w) { this->u = u; this->v = v; this->w = w; } }; //initial : n개의 부분집합을 초기화하고 하나의 원소들이 들어가잇도록 한다. //find(i) : point 만들기 int find(int u) { if (u == parent[u])..

[Greedy Approach 예제] 백준 1197 최소스패닝 (prim)

문제 그래프가 주어졌을 때, 그 그래프의 최소 스패닝 트리를 구하는 프로그램을 작성하시오. 최소 스패닝 트리는, 주어진 그래프의 모든 정점들을 연결하는 부분 그래프 중에서 그 가중치의 합이 최소인 트리를 말한다. 입력 첫째 줄에 정점의 개수 V(1 ≤ V ≤ 10,000)와 간선의 개수 E(1 ≤ E ≤ 100,000)가 주어진다. 다음 E개의 줄에는 각 간선에 대한 정보를 나타내는 세 정수 A, B, C가 주어진다. 이는 A번 정점과 B번 정점이 가중치 C인 간선으로 연결되어 있다는 의미이다. C는 음수일 수도 있으며, 절댓값이 1,000,000을 넘지 않는다. 그래프의 정점은 1번부터 V번까지 번호가 매겨져 있고, 임의의 두 정점 사이에 경로가 있다. 최소 스패닝 트리의 가중치가 -2,147,483,..

The Greedy Approach

greedy algorithm 4.1 minimum spanning tree 4.1.1 Prim's 4.1.2 kruskal 4.4 Huffman code 4.5 0-1 knapsack Greedy Algorithm 그 순간에 제일 좋아보이는 선택을 해서, 해답을 찾는 알고리즘 arrives at a solution by making a sequence of choices, each of which simply looks the best at the moment 한번 선택한 것은 solution의 일 부분으로 더해지고 그것은 항상 solution set이 될 것이다. 각 선택은 지역적으로 최적이지만 전체적으로 최적이 아닐 수도 있다. (1) 제일 큰 지폐를 집는다 (지역적으로 최적인 해를 고른다.) (2..

[Dynamic Programming 예제] 백준 2098 외판원문제

문제 외판원 순회 문제는 영어로 Traveling Salesman problem (TSP) 라고 불리는 문제로 computer science 분야에서 가장 중요하게 취급되는 문제 중 하나이다. 여러 가지 변종 문제가 있으나, 여기서는 가장 일반적인 형태의 문제를 살펴보자. 1번부터 N번까지 번호가 매겨져 있는 도시들이 있고, 도시들 사이에는 길이 있다. (길이 없을 수도 있다) 이제 한 외판원이 어느 한 도시에서 출발해 N개의 도시를 모두 거쳐 다시 원래의 도시로 돌아오는 순회 여행 경로를 계획하려고 한다. 단, 한 번 갔던 도시로는 다시 갈 수 없다. (맨 마지막에 여행을 출발했던 도시로 돌아오는 것은 예외) 이런 여행 경로는 여러 가지가 있을 수 있는데, 가장 적은 비용을 들이는 여행 계획을 세우고자..

STL::map

map 클래스 map 클래스는 이진 검색 트리 기반의 자료 구조이다. 일반적인 이진 검색 트리는 한 방향으로 쏠린 형태로 만들어져 효율성이 떨어질 수 있는데 map은 레드 트리 구조로 되어 있어서 항상 일정한 효율성을 보장한다. 레드 트리 구조는 직접 구현하기 매우 복잡해서 map 클래스를 사용한다. (레드 트리 구죠는 자가 균형 이진 탐색 트리) map의 선언 map을 선언할 때는 key에 해당하는 자료형과 value에 해당하는 자료형을 선언한다. map m; m['A'] = 2; m.insert(make_pair('A',2)); upper_bound, lower_bound 메서드 upper_bound : 컨테이너의 오른쪽 원소 중 기준 원소보다 큰 값중 가장 왼쪽에 있는 원소의 iterator값을 리..

[Dynamic Programming 예제] 백준 2957 BST

문제 이진 탐색 트리는 모든 노드가 많아야 2개의 자식 노드를 가지고 있는 트리이고, 각 노드에는 수가 하나씩 쓰여있다. 만약 어떤 노드에 쓰여 있는 수가 X라면, 그 노드의 왼쪽 서브트리에는 X보다 작은 수, 오른쪽 서브트리에는 X보다 큰 수만 저장되어 있어야 한다. 1보다 크거나 같고, N보다 작거나 같은 수 N개가 한 번씩 등장하는 수열이 입력으로 주어진다. 이 수열을 이용해서 이진 탐색 트리를 만들려고 한다. 이제 배열의 첫 번째 수를 루트 노드로 놓고, 다른 나머지 수들을 순서대로 삽입하면서 이진 탐색 트리를 만들려고 한다. 즉, 첫 번째 수를 제외한 모든 수에 대해서 insert(X,root)를 실행하는 것과 같다. 그 함수는 다음과 같다. 이진 탐색 트리에 삽입하는 함수는 다음과 같다. in..