코드
# 시작 시간 12시 49분
## 첫 제출 1시 22분
def solution():
n = int(input())
grid = [list(input()) for _ in range(n)]
# 두 번째 줄에는 각각 왼쪽 팔, 오른쪽 팔, 허리, 왼쪽 다리, 오른쪽 다리의 길이를 공백으로 구분해서 출력하여라.
answer = []
center_x, center_y = 0, 0
for i in range(n - 1):
for j in range(n - 1):
if grid[i][j] == '*':
if grid[i][j + 1] == '*' and grid[i][j - 1] == '*' and grid[i - 1][j] == '*' and grid[i + 1][j] == '*':
center_x, center_y = i, j
break
len_left = 0
for y in range(center_y - 1, -1, -1):
if grid[center_x][y] == '*':
len_left += 1
else:
break
answer.append(len_left)
len_right = 0
for y in range(center_y + 1, n):
if grid[center_x][y] == '*':
len_right += 1
else:
break
answer.append(len_right)
left_leg_x, left_leg_y = 0, 0
len_back = 0
for x in range(center_x + 1, n):
if grid[x][center_y] == '*':
len_back += 1
else:
left_leg_x, left_leg_y = x, center_y - 1
break
answer.append(len_back)
len_left_leg = 0
for x in range(left_leg_x, n):
if grid[x][left_leg_y] == '*':
len_left_leg += 1
else:
break
answer.append(len_left_leg)
len_right_leg = 0
for x in range(left_leg_x, n):
if grid[x][left_leg_y + 2] == '*':
len_right_leg += 1
else:
break
answer.append(len_right_leg)
print(center_x + 1, center_y + 1)
print(*answer)
solution()
풀이
- 풀이 시간은 30분 정도 걸렸습니다.
- 문제를 푸는데 있어 효율적인 방법이 없을까라는 고민이 들어서 문제를 어렵게 접근하지않았나 싶습니다.
- 심장의 위치를 찾는 것이 문제의 출력 값으로 지정되어있어서, 심장을 기준으로 신체 길이를 계산해야한다는 사고의 흐름을 자연스럽게 유도하는 것 같습니다.
- 구현 문제를 푸는데 있어서 탐색 범위를 효율적으로 만들자고 생각해서 break를 만들었으나, 주어지는 테스트케이스의 범위가 그리 크지않기에 없어도 문제가 없겠다는 생각이 들었습니다.
- 지금 생각해보면, 신체의 길이를 담을 변수를 위헤서 선언할 것 그랬습니다.
제출결과
'백준 > 구현' 카테고리의 다른 글
[백준][Python] 202920번 영단어 암기는 어려워 (0) | 2025.05.26 |
---|---|
[백준][Python] 23971번 ZOAC 4 (0) | 2025.05.25 |
[백준][Python] 1850번 LCM (0) | 2025.03.29 |
[백준][Python] 1972번 놀라운 문자열 - 실버 3 (0) | 2024.05.16 |
[백준][Python] 13717번 포켓몬 GO - 실버 5 (0) | 2024.03.24 |