KEEP GOING

[python] 백준 17086번 : 아기상어2 본문

code review/greedy

[python] 백준 17086번 : 아기상어2

jmHan 2022. 1. 23. 16:10
반응형

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

 

17086번: 아기 상어 2

첫째 줄에 공간의 크기 N과 M(2 ≤ N, M ≤ 50)이 주어진다. 둘째 줄부터 N개의 줄에 공간의 상태가 주어지며, 0은 빈 칸, 1은 아기 상어가 있는 칸이다. 빈 칸의 개수가 한 개 이상인 입력만 주어진다.

www.acmicpc.net

 

1. 코드 구현

import sys
n,m = map(int, input().split())
sharks = []
for i in range(n):
    # 한 행씩 받아오기 
    places = list(map(int, input().split()))
    for j, place in enumerate(places):
        if place == 1:
            # 상어의 위치 
            sharks.append((i, j))

res = -1e9
for i in range(n):
    for j in range(m):
        minDist = 1e9
        for x, y in sharks:
            # 상어와의 최소거리 구하기
            distance = max(abs(i-x), abs(j-y))
            minDist = min(distance, minDist)
        # 모든 최소 거리 중 최대 거리 구하기 
        res = max(minDist, res)

print(res)

 

여기에서 상어와의 거리를 구할 때 왜 거리 정보를 distance = max(abs(i-x), abs(j-y)) 와 같이 구하는지 의문일 수 있다. 그 이유를 설명하기 위해 예시를 가져왔다. 

 

예를 들어, 상어가 있는 위치인 (1,4)와 (0,0)와의 거리를 구한다고 가정하자. 상어는 대각선으로도 이동할 수 있기 때문에 두 점 사이의 거리는 4이다. 이는 x좌표의 차이와 y좌표의 차이 중 더 큰 값을 통해 구할 수 있는 값이다. 따라서 distance = max(abs(i-x), abs(j-y)) 와 같은 방식으로 거리를 구할 수 있다. 

반응형
Comments