https://www.acmicpc.net/problem/20125
📝 문제
쿠키의 신체가 주어졌을 때 심장의 위치와 팔, 다리, 허리의 길이를 구하여라.
머리는 심장 바로 윗 칸에 1칸 크기로 있다.
왼쪽 팔은 심장 바로 왼쪽에 붙어있고 왼쪽으로 뻗어 있으며, 오른쪽 팔은 심장 바로 오른쪽에 붙어있고 오른쪽으로 뻗어있다.
허리는 심장의 바로 아래 쪽에 붙어있고 아래 쪽으로 뻗어 있다.
왼쪽 다리는 허리의 왼쪽 아래에, 오른쪽 다리는 허리의 오른쪽 아래에 바로 붙어있고, 각 다리들은 전부 아래쪽으로 뻗어 있다.
각 신체 부위들은 절대로 끊겨있지 않으며 굽혀진 곳도 없다.
⌨️ 입력
5 ≤ N ≤ 1,000.
N은 판의 한 변의 길이를 의미하는 양의 정수다.
*는 쿠키의 신체 부분이고, _는 쿠키의 신체가 올라가 있지 않은 칸을 의미한다. (1 ≤ i, j ≤ N)
쿠키의 신체 조건에 위배되는 입력은 주어지지 않는다.
🖥️ 출력
첫 번째 줄에는 심장이 위치한 행의 번호 x와 열의 번호 y를 공백으로 구분해서 출력한다.
두 번째 줄에는 각각 왼쪽 팔, 오른쪽 팔, 허리, 왼쪽 다리, 오른쪽 다리의 길이를 공백으로 구분해서 출력하여라.
💡 아이디어
- 이중 배열을 순회할 때, 가장 먼저 닿는 *이 머리이자 심장의 열 좌표 행 좌표의 +1이 심장의 행 좌표
- 심장의 행 좌표와 같으면서 열보다 적다면 왼쪽, 열보다 크다면 오른쪽
- 위의 조건을 만족하지 않으면서 심장의 행 좌표의 별이 몸통
- 위의 조건을 만족하지 않으면서 심장의 열 좌표 +-1 의 별이 다리
- 레츠고~
🧑🏻💻 Code
def solve():
N = int(input())
field = [input() for _ in range(N)]
heart = None
# 왼팔 오른팔 허리 왼다리 오른다리
body = [0] * 5
for i in range(N):
for j in range(N):
if field[i][j] == '*':
# 심장의 좌표
if not heart:
heart = (i+1, j)
# 팔
elif i == heart[0]:
if j < heart[1]:
body[0] += 1
elif j > heart[1]:
body[1] += 1
# 허리
elif j == heart[1]:
body[2] += 1
# 다리
elif j == heart[1] - 1:
body[3] += 1
elif j == heart[1] + 1:
body[4] += 1
print(heart[0] + 1, heart[1] + 1)
print(*body)
if __name__ == "__main__":
solve()
'Python > 알고리즘' 카테고리의 다른 글
[알고리즘] 백준 1244: 스위치 켜고 끄기 (2) | 2024.04.07 |
---|---|
[알고리즘] 백준 1205: 등수 구하기 (2) | 2024.04.06 |
[알고리즘] 백준 25757: 임스와 함께하는 미니게임 (0) | 2024.04.06 |
[알고리즘] 백준 4659번: 비밀번호 발음하기 (0) | 2024.04.05 |
[알고리즘] 백준 8979번: 올림픽 (0) | 2024.04.05 |
댓글