반응형
https://www.acmicpc.net/problem/15685
15685번: 드래곤 커브
첫째 줄에 드래곤 커브의 개수 N(1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 드래곤 커브의 정보가 주어진다. 드래곤 커브의 정보는 네 정수 x, y, d, g로 이루어져 있다. x와 y는 드래곤 커
www.acmicpc.net
[ 문제풀이 ]
1. 주어지는 입력에 따라 드래곤 커브를 그립니다.
2. 그려진 드래곤 커브를 바탕으로 꼭짓점이 모두 드래곤 커브에 속한다면 ans에 1을 더해줍니다.
3. ans를 출력합니다.
위의 1번에서 드래곤 커브를 그리는 방식을 찾는 데 시간이 조금 걸렸습니다. x좌표의 경우 90도 변경될 때 y좌표 방향으로 상대 좌표의 값이 변경되지 않습니다. 하지만 y좌표의 경우 90도 회전할 때 x좌표 방향으로 상대 좌표의 값에 -1을 곱해주어야 합니다.
[ 소스코드 ]
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 | #include<iostream> #include<vector> using namespace std; struct pos { int y; int x; bool dot; }; int N; int arr[101][101]; int dy[4] = { 0,-1,0,1 }; int dx[4] = { 1,0,-1,0 }; vector<pos> gen(vector<pos> vect) //드래곤 커브 그리기 { int idx,y,x; int size = vect.size(); for (int i = 0; i < size;i++) { //드래곤 커브의 끝 점 if (vect[i].dot == 1) { y = vect[i].y; x = vect[i].x; vect[i].dot = 0; idx = i; break; } } for (int i = 0; i < size; i++) { if (idx != i) { int yy = vect[i].y - y; //끝 점 기준으로 상대 위치 저장 int xx = vect[i].x - x; int tempX = -yy; int tempY = xx; xx = x + tempX; //이동한 점의 좌표 yy = y + tempY; if (i == 0) { //첫 점은 다음 드래곤 커브의 끝 점 vect.push_back({ yy,xx,1 }); } else { vect.push_back({ yy,xx }); } arr[yy][xx] = 1; } } return vect; } int main() { scanf("%d", &N); for (int i = 0; i < N; i++) { int x, y, d, g; scanf("%d %d %d %d", &x, &y, &d, &g); int yy = y + dy[d]; int xx = x + dx[d]; vector<pos> vect; vect.push_back({ y,x }); vect.push_back({ yy,xx,1 }); arr[y][x] = 1; arr[yy][xx] = 1; for (int j = 0; j < g; j++) { vect = gen(vect); } } int ans = 0; for (int i = 0; i < 100; i++) { //꼭짓점이 모두 드래곤 커브인 정사각형 개수 구하기 for (int j = 0; j < 100; j++) { if (arr[i][j] == 1 && arr[i + 1][j] == 1 && arr[i][j + 1] == 1 && arr[i + 1][j + 1] == 1) { ans++; } } } printf("%d", ans); } | cs |
반응형
'백준' 카테고리의 다른 글
[ 백준 ] 17140번 - 이차원 배열과 연산 (C++) (0) | 2022.09.14 |
---|---|
[ 백준 ] 16235번 - 나무 재테크 (C++) (0) | 2022.09.13 |
[ 백준 ] 15683번 - 감시 (C++) (0) | 2022.09.11 |
[ 백준 ] 15684번 - 사다리 조작 (C++) (0) | 2022.09.10 |
[ 백준 ] 14890번 - 경사로 (C++) (0) | 2022.09.09 |