20125-s4.py 성공
This commit is contained in:
72
workbook_8708/20125-s4.py
Normal file
72
workbook_8708/20125-s4.py
Normal file
@@ -0,0 +1,72 @@
|
||||
# 쿠키의 신체 측정
|
||||
|
||||
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로 방향을 인자로 받아서 체크했다.
|
||||
"""
|
||||
Reference in New Issue
Block a user