diff --git a/workbook_8708/20125-s4.py b/workbook_8708/20125-s4.py new file mode 100644 index 0000000..6863f21 --- /dev/null +++ b/workbook_8708/20125-s4.py @@ -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로 방향을 인자로 받아서 체크했다. +""" \ No newline at end of file