본문 바로가기

BOJ/C++

(202)
Two Dots *backtracking 을 사용하여 현재 지점을 기준으로 시작점으로 갈 수 있는지 없는 지 판단한다. *갈 수 있는 길은 같은 색을 가지고 있는 칸이다. *내가 가려는 칸이 나와 같은 색을 가지고 있다면 방향전환이 필요없고, 다른 색이라면 다른 방향으로 전환을 한다. *내가 가려는 칸이 이미 방문한 칸이라면 시작 지점인지 검사한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 ..
로봇 *visited를 3차원(x,y,dir)으로 설정해서 지금 좌표와 가르키는 방향을 모두 저장한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113..
점프 점프 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 #include #include #define INF 987654321 #define MAXX 1001 using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(0); int n; cin >> n; int map[MAXX] = {0}; for (int i = 0; i > map[i]; } int dp[MAXX] = {0}; //이전 단계에서 점프해서 도착했을 때 최소 횟수를 저장 for (int i = 0; i
투표 *lower_bound로 현재 심사기준에 맞는 경기 비용의 경계 인덱스를 구하고(이 경기가 가장 재미있는 경기는 아닐 수도 있다.) 입력받은 순서가 적은 순서가 더 재미있는 경기이기 때문에 이 비용을 넘지 않는 경기들을 살펴보면서 가장 재미있는 경기에 투표할 수 있도록 한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 #include #include #include using nam..
거짓말 *union find set을 사용해서 진실을 알고 있는 사람들끼리 한 세트로 만들었다. **dp로 풀어보기 ** *도움이 된 TC 4 3 1 2 2 1 2 1 3 3 2 3 4 ans = 0 5 3 1 3 3 1 2 4 3 1 4 5 1 3 ans = 2 3 2 1 1 2 2 3 2 1 2 ans = 0 6 5 1 6 2 4 5 2 1 2 2 2 3 2 3 4 2 5 6 ans = 0 6 5 1 6 2 1 2 2 2 3 2 3 4 2 4 5 2 5 6 ans = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48..
아기상어2 *1이 아닌 모든 좌표에 대해서 bfs로 8방향을 탐색한다. *bfs는 아기상어를 만나는 가장 짧은 경로까지의 거리를 반환한다. *bfs가 반환하는 값 중 최대값이 정답. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 #include #include #include #include #include using..
집배원 한상덕 *피로도를 최소부터 최대까지 하나의 배열로 저장한 후 투포인터를 사용해서 모든 집을 순회했을 때의 차이를 구한다. *우체국으로 돌아왔을 때까지의 최단 경로를 구하는 게 아니기 때문에 굳이 다시 P로 돌아올 필요가 없다. (이거 중요!) *K개 만큼의 집을 들렀을 때 최소 피로도를 구하면 된다. #include #include #include #include #include using namespace std; int n, house = 0; char map[51][51]; int tired[51][51]; bool visited[51][51]; vector v; typedef pair pp; typedef pair pppp; pp start; int dx[8] = {-1, -1, -1, 0, 0, 1, ..
게리맨더링2 풀이 * 유형 : 시뮬레이션 * 속도 : 16ms * 경계선(5)를 먼저 채우고, 구역 1,2,3,4를 채운다. * 경계선을 먼저 채우는 이유는 구역 1,2,3,4를 채울 때 5구역(경계선)에 도달하면 더 이상 채우지 않고 다음 줄로 이동하기 위함이다. * 완전 탐색을 해야 하므로, x(0~n), y(0~n)을 전부 탐색하면서 d1,d2를 다르게 설정해서 탐색을 한다. * 모든 구역을 다 채웠을 때 [가장 많은 인구가 사는 구역 - 가장 적은 인구가 사는 구역] 이 최소가 되는 값을 구한다. (calc()) #include #include #include #define INF 987654321 using namespace std; //BOJ 게리맨더링2 [17779](https://www.acmicpc...