72 lines
2.0 KiB
Python
72 lines
2.0 KiB
Python
# 쿠키의 신체 측정
|
|
|
|
import sys
|
|
|
|
input = sys.stdin.readline
|
|
|
|
def find_heart(grid, n, k):
|
|
for i in range(n):
|
|
if grid[k][i] == "*":
|
|
return [k+1, i]
|
|
else:
|
|
return [-1, -1]
|
|
|
|
def down_check_star(grid, n, x, y):
|
|
length = 0
|
|
while x <= n-1:
|
|
if grid[x][y] != "*":
|
|
break
|
|
length += 1
|
|
x += 1
|
|
return length
|
|
|
|
def row_check_star(grid, n, x, y, dir): # 오른쪽 +1, 왼쪽 -1
|
|
length = 0
|
|
while y <= n-1 and y >= 0:
|
|
if grid[x][y] != "*":
|
|
break
|
|
length += 1
|
|
y += dir
|
|
return length
|
|
|
|
def solution():
|
|
n = int(input().rstrip())
|
|
|
|
grid = []
|
|
heart = [-1, -1]
|
|
left_arm = 0
|
|
right_arm = 0
|
|
mid = 0
|
|
left_leg = 0
|
|
right_leg = 0
|
|
for i in range(n):
|
|
grid.append(input().rstrip())
|
|
if heart[0] == -1:
|
|
heart = find_heart(grid, n, i)
|
|
|
|
left_arm = row_check_star(grid, n, heart[0], heart[1]-1, -1)
|
|
right_arm = row_check_star(grid, n, heart[0], heart[1]+1, +1)
|
|
mid = down_check_star(grid, n, heart[0]+1, heart[1])
|
|
left_leg = down_check_star(grid, n, heart[0]+mid+1, heart[1]-1)
|
|
right_leg = down_check_star(grid, n, heart[0]+mid+1, heart[1]+1)
|
|
|
|
heart[0] += 1
|
|
heart[1] += 1
|
|
print(*heart)
|
|
print(left_arm, right_arm, mid, left_leg, right_leg)
|
|
return
|
|
|
|
|
|
solution()
|
|
|
|
"""
|
|
걸린 시간: 30분
|
|
|
|
시간 복잡도: 팔, 다리, 허리는 일자로 있기 때문에 O(n)이지만, 머리는 (0,0) 부터 쭉 찾아서 처음 나오는
|
|
*이므로 O(n^2)이다. 따라서 전체 시간 복잡도는 O(n^2)이다.
|
|
|
|
해설: (0,0)에서 선형으로 찾다가 가장 먼저 나오는 *이 머리이다. 이 머리 바로 한 칸 밑이 심장이다.
|
|
심장에서 팔, 다리, 허리를 구하면 되는데, 연속된 *을 찾는 것이다.
|
|
이는 행으로 연속된 별 찾기와 열로 연속된 별 찾기 함수 2개를 만들어서 진행하면 된다.
|
|
위로 올라갈 일은 없어서 열은 그냥 down으로 했고, 행은 row로 방향을 인자로 받아서 체크했다.
|
|
""" |