[브론즈 1] 백준 10041 - 관광 (파이썬)
글 작성자: pental
https://www.acmicpc.net/problem/10041
풀이
- W, H: 전체 지도 크기 (사용되지 않음)
- N: 방문할 지점 수
- P: 각 방문 지점의 좌표
- 인접한 지점 (x1, y1) → (x2, y2)로 이동할 때 거리 계산 방식:
- y1 > y2일 때: 단순 맨해튼 거리
- |x1 - x2| + |y1 - y2|
- y1 ≤ y2일 때: 체스의 킹처럼 이동 (대각선 허용)
- max(|x1 - x2|, |y1 - y2|)
answer = 0
for i in range(N - 1):
x1, y1 = P[i]
x2, y2 = P[i + 1]
# 방향을 통일 (x1 <= x2)
if x1 > x2:
x1, x2 = x2, x1
y1, y2 = y2, y1
항상 x1 ≤ x2로 만들어 방향을 일관되게 처리한다.
if y1 > y2:
# 아래 방향으로 가는 경우: 맨해튼 거리 사용
answer += abs(x1 - x2) + abs(y1 - y2)
else:
# 위 또는 같은 y로 가는 경우: 대각선 이동 허용
answer += max(abs(x1 - x2), abs(y1 - y2))
y축 방향을 기준으로 조건에 따른 다른 방식의 거리 계산을 적용한다.
코드
# 백준 10041 - 관광
# 분류 : 수학
W, H, N = map(int, input().split())
P = [list(map(int, input().split())) for _ in range(N)]
answer = 0
for i in range(N - 1) :
# i - > i + 1
x1, y1 = P[i]
x2, y2 = P[i + 1]
if x1 > x2 :
x1, x2 = x2, x1
y1, y2 = y2, y1
if y1 > y2 :
answer += abs(x1 - x2) + abs(y1 - y2)
else :
answer += max(abs(x1 - x2), abs(y1 - y2))
print(answer)
'Programming > 백준' 카테고리의 다른 글
[브론즈 2] 백준 10040 - 투표 (파이썬) (0) | 2025.05.04 |
---|---|
[브론즈 2] 백준 14471 - 포인트 카드 (파이썬) (0) | 2025.05.04 |
[골드 3] 백준 4179 - 불! (파이썬) (0) | 2025.05.03 |
[실버 5] 백준 31738 - 매우 어려운 문제 (파이썬) (0) | 2025.05.03 |
[골드 4] 백준 10830 - 행렬 제곱 (파이썬) (0) | 2025.05.03 |
댓글
이 글 공유하기
다른 글
-
[브론즈 2] 백준 10040 - 투표 (파이썬)
[브론즈 2] 백준 10040 - 투표 (파이썬)
2025.05.04 -
[브론즈 2] 백준 14471 - 포인트 카드 (파이썬)
[브론즈 2] 백준 14471 - 포인트 카드 (파이썬)
2025.05.04 -
[골드 3] 백준 4179 - 불! (파이썬)
[골드 3] 백준 4179 - 불! (파이썬)
2025.05.03 -
[실버 5] 백준 31738 - 매우 어려운 문제 (파이썬)
[실버 5] 백준 31738 - 매우 어려운 문제 (파이썬)
2025.05.03