1#include <bits/stdc++.h>
2using namespace std;
3
4char board[1000][1000] = { NULL };
5int n;
6
7tuple<int, int, int> getlength(int sx, int sy, int dx, int dy) {
8 int cnt = 0;
9 int x = sx;
10 int y = sy;
11
12 while (true) {
13 x += dx;
14 y += dy;
15 if (y < 0 || y >= n || x < 0 || x >= n || board[x][y] != '*') {
16 return { cnt, x-dx, y-dy };
17 }
18 cnt++;
19 }
20}
21
22int main() {
23 cin.tie(0)->sync_with_stdio(false);
24 cin >> n;
25
26 pair<int, int> heart = { 0, 0 };
27 tuple<int, int, int> ass = { 0, 0, 0 };
28
29 for (int i = 0; i < n; i++) {
30 for (int j = 0; j < n; j++) {
31 cin >> board[i][j];
32 if (board[i][j] == '*' && heart.first == 0)
33 heart = { j, i + 1 };
34 }
35 }
36
37 ass = getlength(heart.second, heart.first, 1, 0);
38
39 cout << heart.second+1 << " " << heart.first+1 << "\n";
40 cout << get<0>(getlength(heart.second, heart.first, 0, -1)) << " "
41 << get<0>(getlength(heart.second, heart.first, 0, 1)) << " "
42 << get<0>(ass) << " "
43 << get<0>(getlength(get<1>(ass), get<2>(ass)-1, 1, 0)) << " "
44 << get<0>(getlength(get<1>(ass), get<2>(ass)+1, 1, 0));
45
46 return 0;
47}
- 정사각형 판의 크기 N과 쿠키의 신체 모양이 2차원 문자로 주어진다.
- 1번째 줄에는 심장의 위치를 출력한다.
- 2번째 줄에는 왼팔, 오른팔, 허리, 왼다리, 오른다리의 길이를 출력한다.
- 글로 설명하기 쉽지 않다.
해결방법
- 입력 받으면서 심장의 위치를 딴다.
- 심장의 위치를 통해 허리의 끝을 딴다.
- 왼팔, 오른팔, 허리의 길이를 출력한다.
- 허리의 끝을 이용해 왼다리, 오른다리의 길이를 출력한다.
- getlength() 함수를 정의하여 각 길이를 구했다.
막혔던 부분
- x, y가 혼동되어서 고치는데 시간을 많이 잡아 먹자
- c++로 2차원 배열 다루는 문제를 열심히 풀어보자!