목록Study/Algorithm (400)
hwooo
https://www.acmicpc.net/problem/1021 1021번: 회전하는 큐 첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 www.acmicpc.net 풀이 이 문제의 큐에서는 pop_front()만 수행 가능함.뽑으려는 원소의 위치를 파악한 후, 해당 원소가 앞부분과 뒷부분 중 어디와 더 가까운 지 확인하여 2 or 3번 연산을 수행함. 코드 #include #include #include using namespace std; vector V; deque D; int Get_cnt(int n, int size) { int pop, tmp, ..
https://www.acmicpc.net/problem/1966 1966번: 프린터 큐 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 www.acmicpc.net 풀이 큐에서는 원소의 탐색이 어려워서 큐와 똑같이 동작하는 벡터를 사용하여 최댓값을 찾아냄. 코드 #include #include #include using namespace std; vector V; queue Q; int Find_max(int N) { int max = 1, max_i = 0; for (int i = 0; i < N; i++) { if (max < V[i]) max = V[i],..
https://www.acmicpc.net/problem/15828 15828번: Router 인터넷을 사용하기 위해서는 컴퓨터에 인터넷 회선을 연결하거나 Wi-Fi를 연결해야 한다. 이렇게 연결된 네트워크를 통해 컴퓨터에는 통신이 가능하다. 마음에 드는 노래나 동영상이 있는 곳에 www.acmicpc.net 코드 #include #include using namespace std; queue Q; int main() { int N, n; scanf("%d", &N); while (1) { scanf("%d", &n); if (n == 0) Q.pop(); else if (n == -1) break; else { if (Q.size() < N) Q.push(n); } } if (Q.empty()) pri..
https://www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 풀이 백트래킹을 사용하여 팀원을 만들 수 있는 모든 경우의 수를 구함. 한 팀의 인원이 다 찼을 때, 다른 팀 인원을 구하고 각각 능력치 계산 후 차이의 최솟값을 구했다. 팀원이 2명이라 가정했을 때, 팀원 0,1이 같은 팀이 되는 경우는 팀원 1,0이 같은 팀이 되는 경우와 같기에 이 경우를 제외해야함. (포함 시 시간초과) 팀원 1,2가 1팀, 팀원 3,4가 2팀인 경우도 동일한 경우이므로 이 경우도 제외해 줘야 ..
https://www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net 풀이 백트래킹을 사용, 모든 경우의 수를 계산함. 코드 #include #include #include using namespace std; vector V; vector Op, Seq; bool visited[100]; int N; int Min = INT_MAX, Max = INT_MIN; int Cal() { int res = V[0];..
https://www.acmicpc.net/problem/1018 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 풀이 자를 수 있는 모든 구역을 탐색하는 방법 사용.처음엔 탐색하고자 하는 구역의 좌측상단의 색에 맞춰서 flag값을 정했는데, 이 경우 예제 4에서 32의 값이 나와서 색과 상관없이 2가지 경우를 계산하고, 그 중 작은 수를 구함. 코드 #include bool C[50][50]; int Get_cnt(bool f, int x, int y) { int cnt = 0; for (int i ..
https://www.acmicpc.net/problem/2563 2563번: 색종이 첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변 www.acmicpc.net 코드 #include bool A[100][100]; int main() { int x, y, n, S = 0; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d %d", &x, &y); for (int i = x; i < x + 10; i++) { for (int j = y; j < y + 10; j++) { A[i][j] = true; } } } for..
https://www.acmicpc.net/problem/2566 2566번: 최댓값 첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다. www.acmicpc.net 코드 #include int main() { int max = 0, max_i, max_j; int A[10][10]; for (int i = 1; i