머리, 심장, 팔, 허리, 다리가 위치할 수 있는 조건이 정해져 있기 때문에, 머리에서 다리로 이동하며 필요한 값을 계산했다.
import sys
n = int(sys.stdin.readline())
cookie = [list(sys.stdin.readline().strip()) for _ in range(n)]
"""
1. 머리 위치 찾기
0행부터 (n - 1)행까지 탐색할 때, 가장 먼저 *가 존재하는 행이 머리의 y 좌표 값이다.
머리의 x 좌표는 해당 행의 *의 인덱스이다.
"""
for y in range(n):
if '*' in cookie[y]:
head_x = cookie[y].index('*')
head_y = y
break
"""
2. 심장 위치 찾기
심장은 머리의 바로 아래에 위치한다.
따라서 심장의 x 좌표는 머리의 x 좌표와 같다.
심장의 y 좌표는 머리의 y 좌표에 1을 더한 값이다.
"""
heart_x = head_x
heart_y = head_y + 1
"""
3. 팔 길이 계산하기
양 팔은 심장과 같은 행에 위치(y 좌표 동일)한다.
따라서 왼팔 길이는 심장의 x 좌표를 기준으로 왼쪽으로 이동하며 *의 개수를 세면 된다.
오른팔 길이는 심장의 x 좌표를 기준으로 오른쪽으로 이동하며 *의 개수를 세면 된다.
"""
# 왼팔
left_arm = 0
for x in range(heart_x - 1, -1, -1):
if cookie[heart_y][x] == '*':
left_arm += 1
else:
break
# 오른팔
right_arm = 0
for x in range(heart_x + 1, n):
if cookie[heart_y][x] == '*':
right_arm += 1
else:
break
"""
4. 허리 길이 계산하기
허리는 심장의 바로 아래부터 다리가 나오기 직전까지 행의 개수이다.
그런데 허리는 일직선이므로, y 좌표 값만 1씩 증가시키며 해당 x 좌표에 *가 존재하지 않는 곳까지 탐색하면 된다.
해당 x 좌표에 *가 존재하지 않는 행이 두 다리가 시작되는 곳이기 떄문이다.
"""
waist = 0
for y in range(heart_y + 1, n):
if cookie[y][heart_x] == '*':
waist += 1
else:
break
"""
5. 다리 길이 계산하기
왼쪽 다리의 x 좌표는 심장의 x 좌표에서 1을 뺀 값이다.
반대로 오른쪽 다리는 심장의 x 좌표에서 1을 더한 값이다.
그러므로 다리가 시작되는 행(heart_y + waist + 1)부터 해당 x 좌표에 *가 있는지 확인하면 된다.
"""
# 각 다리의 길이
left_leg = 0
right_leg = 0
for y in range(heart_y + waist + 1, n):
if cookie[y][heart_x - 1] == '*':
left_leg += 1
if cookie[y][heart_x + 1] == '*':
right_leg += 1
# 출력
print(heart_y + 1, heart_x + 1)
print(left_arm, right_arm, waist, left_leg, right_leg)