bong-u/til

백준 - 20125 : 쿠키의 신체 측정 (S4)

수정일 : 2024-11-15

 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차원 배열 다루는 문제를 열심히 풀어보자!