-
SWEA 5644 [무선 충전]알고리즘 풀이/시뮬레이션 2018. 10. 4. 06:04
SW Expert Academy 무선 충전 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRDL1aeugDFAUo&categoryId=AWXRDL1aeugDFAUo&categoryType=CODE&&&
//SWEA는 문제를 무단으로 복제하는 것을 금지하기에, 문제시 삭제하겠습니다.
간단한 시뮬레이션 문제입니다.
우선 현재 시점에서 사람1과 사람2가 각 배터리의 충전 범위에 들어와있는지 확인합니다.
충전범위에 있을 경우, 각 사람에 맞는 배열로, 해당 배터리의 충전 범위에 들어왔는지 bool을 통해 체크해줍니다.
배터리의 개수만큼 이중 for문을 돕니다.
1. i == j 일 경우 => 만약 둘다 해당 배터리의 범위에 있으면 +성능
2. 그 외의 경우 => 해당 인덱스 배터리 범위에 있으면 각각 +성능
(갑자기 gif를 만들어보고 싶었습니다.)12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879#include <iostream>#include <vector>#include <cmath>using namespace std;class BC {public:int X, Y, C, P; //C : 충전 범위. P : 성능BC(int X, int Y, int C, int P) : X(X), Y(Y), C(C), P(P) {}};vector<BC> battery;int H_1[100]; //사람 1의 족적int H_2[100]; //사람 2의 족적int M; //총 이동시간int A; //배터리 개수bool H1_on[8]; //사람 1이 각 배터리 충전 범위에 있는지bool H2_on[8]; //사람 2가 있는지int d[5][2] = {{0, 0}, {-1, 0}, {0, 1}, {1, 0}, {0, -1}};int perform_check(int h1_i, int h1_j, int h2_i, int h2_j) {int result = 0;for(int i = 0; i < A; i++) {H1_on[i] = false;H2_on[i] = false;}for(int b = 0; b < A; b++) { //배터리 충전범위에 있나 체크if(abs(h1_i - battery[b].Y) + abs(h1_j - battery[b].X) <= battery[b].C)H1_on[b] = true;if(abs(h2_i - battery[b].Y) + abs(h2_j - battery[b].X) <= battery[b].C)H2_on[b] = true;} //충전범위 다 체크해준뒤, 계산시작for(int i = 0; i < A; i++) {for(int j = 0; j < A; j++) {int temp = 0;if(i == j) {if(H1_on[i] || H2_on[j])temp = battery[i].P;}else {if(H1_on[i])temp += battery[i].P;if(H2_on[j])temp += battery[j].P;}result = result > temp ? result : temp;}}return result;}int main() {int T;cin >> T;for(int t= 1; t <= T; t++) {cin >> M >> A;for(int i = 0; i < M; i++)cin >> H_1[i];for(int i = 0; i < M; i++)cin >> H_2[i];for(int a=0; a<A; a++) {int x, y, c, p;cin >> x >> y >> c >> p;BC bc(x, y, c, p);battery.push_back(bc);}int h1_i = 1; //초기 좌표 설정int h1_j = 1;int h2_i = 10;int h2_j = 10;int Result = perform_check(h1_i, h1_j, h2_i, h2_j);for(int m = 0; m < M; m++) {h1_i += d[H_1[m]][0];h1_j += d[H_1[m]][1];h2_i += d[H_2[m]][0];h2_j += d[H_2[m]][1];Result += perform_check(h1_i, h1_j, h2_i, h2_j);}cout << "#" << t << " " << Result << endl;battery.clear();}return 0;}cs 반응형'알고리즘 풀이 > 시뮬레이션' 카테고리의 다른 글
SWEA 5650 [핀볼 게임] (0) 2018.09.25 SWEA 5658 [보물상자 비밀번호] (0) 2018.09.22 SWEA 5656 [벽돌 깨기] (2) 2018.09.22 BOJ 15685 [드래곤 커브] (3) 2018.09.17