문제https://www.acmicpc.net/problem/14889풀이시간을 너무 잡아먹은 문제였다. 초기 접근을 이상하게 해서 시간이 오래 걸린 점도 있었지만 재귀호출을 어려워하는 부분이 아직 있는 것 같다. dfs와 백트래킹을 통해서 모든 경우를 돌아보는 완전탐색 문제다.dfs로 스타트 팀으로 뽑을 선수 번호를 뽑는다스타트 팀으로 뽑은 선수가 N/2 명이 되면 두 팀의 능력치 차이를 구한다.위 과정을 반복한다.스타트 팀으로만 뽑는 이유는 어차피 뽑지 않은 선수는 링크 팀이기 때문이다. 소스코드에 주석을 보면 이해하기가 쉽다.소스코드#include #include #include using namespace std; #define MAX_SIZE 21 int n; bool is_used[MAX_SI..
문제https://www.acmicpc.net/problem/14503풀이한시간 반동안 비슷하게 푼 거 같았지만 결국은 테스트케이스도 못맞췄다.아직도 재귀호출을 구현하려면 머리가 아프다.dx[4], dy[4] 에 북(0), 동(1), 남(2), 서(3) 순으로 저장을 했다.현재 방향을 direction이라고 했을 때 북쪽을 보고 있는 경우를 제외하고 왼쪽 방향은 direction-1이기 때문에 이 점을 이용해 다음 방향을 정했다.다음 칸이 청소해야되는 칸일 경우에 그 칸으로 이동한 후에 나머지 방향의 탐색은 하지 않는다.다음 칸이 벽이거나 청소한 칸일 경우에는 방향만 바꿔주고 탐색을 계속 진행한다.네 방향 모두 검사를 마친 후는 모두 청소한 칸이거나 벽인 경우이기 때문에 방향을 유치한 채로 후진을 해줬다..
문제https://www.acmicpc.net/problem/14502풀이 재귀함수를 통해 벽 3개를 추가한다.벽이 3개가 쌓였을 때 BFS를 통해 바이러스를 퍼트리고 안전영역의 크기를 구한다.1로 돌아가 반복한다소스코드#include #include #include #include using namespace std; #define MAX_N 9 int n, m; int map[MAX_N][MAX_N]; int temp_map[MAX_N][MAX_N]; int ans; int dx[4] = { 0,0,-1,1 }; int dy[4] = { -1,1,0,0 }; vector virus; vector safety_Zone; void CopyMap(int(*a)[MAX_N], int(*b)[MAX_N]) {..