Files
baekjoon-study/workbook_8708/silver/20125-s4.py
2026-02-23 11:14:50 +09:00

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로 방향을 인자로 받아서 체크했다.
"""