코딩테스트/Python

[python 구름] 개미와 진딧물

nahkim 2023. 5. 14. 15:34

📜 접근 방법

  1. 개미와 진드기의 위치를 저장한다.
  2. 개미의 갯수를 저장한다.
  3. 개미의 저장 위치와 진드기의 저장 위치를 기준으로 맨해튼 거리로 m이하인지 확인한다. (개미 한마리를 기준으로 전체 진드기의 위치 중 가장 가까운 것만 변수에 넣어둔다.)
    1. 맨해튼 거리로 m 초과라면 개미의 갯수 - 1 을 한다.

 

❌ 실패 코드

리스트 전체를 받아서 맨해튼 거리를 계산하려니까 너무 많은 시간을 소요했다.

 

✅ 정답 코드

import sys
input = sys.stdin.readline

n, m = map(int, input().split())
ants, aphids = [], []

for i in range(n):
	ground = list(map(int, input().split()))
	for j in range(n):
		if ground[j] == 1:
			ants.append([i, j])
		elif ground[j] == 2:
			aphids.append([i, j])

ants_len = len(ants)
for y1, x1 in ants:
	min_dist = 9 ** 9
	for y2, x2 in aphids:
		dist = abs(y2 - y1) + abs(x2 - x1)
		min_dist = min(min_dist, dist)
	if min_dist > m:
		ants_len -= 1
print(ants_len)

 

💡알게 된점

지도로 된 좌표같은 경우 내가 자동적으로 리스트로 입력받아서 저장하는 것을 알았다. 지도 전체를 저장해서 풀려고 하지 않고 문제를 해결하는 방법을 잘 생각해봐야겠다.