본문 바로가기
Python/알고리즘

[알고리즘] 백준 20125: 쿠키의 신체 측정

by 전자여우 2024. 4. 6.

https://www.acmicpc.net/problem/20125

 

20125번: 쿠키의 신체 측정

쿠키런은 데브시스터즈에서 제작한 모바일 러닝 액션 게임이다. 마녀의 오븐에서 탈출한 쿠키들과 함께 모험을 떠나는 게임으로, 점프와 슬라이드 2가지 버튼만으로 손쉽게 플레이할 수 있는

www.acmicpc.net

 

📝 문제

쿠키의 신체가 주어졌을 때 심장의 위치와 팔, 다리, 허리의 길이를 구하여라.
머리는 심장 바로 윗 칸에 1칸 크기로 있다.
왼쪽 팔은 심장 바로 왼쪽에 붙어있고 왼쪽으로 뻗어 있으며, 오른쪽 팔은 심장 바로 오른쪽에 붙어있고 오른쪽으로 뻗어있다.
허리는 심장의 바로 아래 쪽에 붙어있고 아래 쪽으로 뻗어 있다.
왼쪽 다리는 허리의 왼쪽 아래에, 오른쪽 다리는 허리의 오른쪽 아래에 바로 붙어있고, 각 다리들은 전부 아래쪽으로 뻗어 있다.
각 신체 부위들은 절대로 끊겨있지 않으며 굽혀진 곳도 없다.

 

⌨️ 입력

5 ≤ N ≤ 1,000.
N은 판의 한 변의 길이를 의미하는 양의 정수다.
*는 쿠키의 신체 부분이고, _는 쿠키의 신체가 올라가 있지 않은 칸을 의미한다. (1 ≤ i, j ≤ N)
쿠키의 신체 조건에 위배되는 입력은 주어지지 않는다.

 

🖥️ 출력

첫 번째 줄에는 심장이 위치한 행의 번호 x와 열의 번호 y를 공백으로 구분해서 출력한다.
두 번째 줄에는 각각 왼쪽 팔, 오른쪽 팔, 허리, 왼쪽 다리, 오른쪽 다리의 길이를 공백으로 구분해서 출력하여라.

 

💡 아이디어

  1. 이중 배열을 순회할 때, 가장 먼저 닿는 *이 머리이자 심장의 열 좌표 행 좌표의 +1이 심장의 행 좌표
  2. 심장의 행 좌표와 같으면서 열보다 적다면 왼쪽, 열보다 크다면 오른쪽
  3. 위의 조건을 만족하지 않으면서 심장의 행 좌표의 별이 몸통
  4. 위의 조건을 만족하지 않으면서 심장의 열 좌표 +-1 의 별이 다리
  5. 레츠고~

 

🧑🏻‍💻 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()

댓글