알고리즘/백준
[Bronze I] 택시 거리 - 17247 (python)
KimMinGyun
2024. 6. 27. 12:37
사칙연산, 기하학, 수학
택시 거리는 바둑판 모양의 도로망을 가진 도시에서 점 A에서 B까지의 최단 거리를 구할 경우 도로를 따라서만 가는 가장 짧은 거리를 뜻한다.
위의 사진에서는 빨간색 선이 택시거리이다. 즉, 점 A의 좌표가 (x1, y1)이고 점 B의 좌표를 (x2, y2)라고 했을 때, 두 장소 사이의 택시 거리 D는 다음과 같다.
D=|x2−x1|+|y2−y1|\(D = |x_2 - x_1| + |y_2 - y_1|\)
인접한 0과 0, 0과 1, 1과 1 사이의 거리를 1이라고 할 때, 두 1 사이의 거리를 구하는 프로그램을 작성하시오.
첫 줄엔 문자열의 높이 N과 가로 M이 주어진다. (2 ≤ N, M ≤ 1,000) 이다.
두 번째 줄부터 M개의 숫자 0또는 1이 예제 입력과 같이 N개의 줄에 걸쳐 입력된다.
1는 항상 두 개만 입력된다.
주어진 숫자들에서 1과 1사이의 택시 거리를 구하시오.
코드
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(n)]
ab_point = []
for i in range(n):
if 1 in arr[i]: # 1이 있는 경우
for j in range(m):
if arr[i][j] == 1:
ab_point.append((i, j))
print(abs(ab_point[1][0] - ab_point[0][0]) + abs(ab_point[1][1] - ab_point[0][1]))
1이 있을 경우만 반복문을 돌기에 시간을 단축한다.
확인을 해주지 않을 경우