본문 바로가기
개발/코딩테스트

[Python] 백준 11880번 개미 - 기하학(geometry)

by seopport 2023. 3. 9.
728x90
반응형

백준 홈페이지 문제와 개인적인 풀이를 작성한 글입니다.

 

백준 11880번 : 개미

 

11880번: 개미

승현이는 방학을 맞아 심심하지만, 공부는 하기 싫습니다. 이렇게 방 안에서 하루하루 시간을 낭비하던 중, 승현이는 자신의 직육면체 모양의 지우개에 개미 한 마리가 붙어 있다는 것을 알게

www.acmicpc.net


문제

승현이는 방학을 맞아 심심하지만, 공부는 하기 싫습니다. 이렇게 방 안에서 하루하루 시간을 낭비하던 중, 승현이는 자신의 직육면체 모양의 지우개에 개미 한 마리가 붙어 있다는 것을 알게 됩니다. 사실 이 개미는 우리가 문제를 어떻게 낼 지 잘 몰라서 방에 넣은 로봇입니다.

 

개미 문제 사진
개미 문제 사진

 

이 개미 로봇은 말도 안 되지만 어떠한 시련이 닥쳐도 서로 반대편에 위치한 점 A에서 점 B까지 최단 거리로 이동하며 그 경로를 지우개에 그립니다. 누군가 자신의 지우개에 흔적을 남기는 것을 너무나 싫어하는 승현이는 개미 로봇이 자신의 지우개에 남긴 흔적의 양, 즉 로봇이 이동한 거리를 구하여 우리에게 손해 배상 청구를 하려고 합니다. 개미 로봇은 부피가 존재하지만, 승현이는 정확한 양을 측정하기 귀찮기 때문에 그냥 부피가 없다고 처리하기로 했습니다.

 

입력

첫 줄에 테스트 케이스의 수 T가 주어집니다. (1 ≤ T ≤ 100,000)

각 테스트 케이스마다 한 줄에 하나씩 음이 아닌 정수 a, b, c가 공백을 사이로 두고 주어집니다. 여기서 a는 지우개의 가로의 길이, b는 지우개의 세로의 길이, c는 지우개의 높이를 나타냅니다. (1 ≤ a, b, c ≤ 10^5)

 

출력

각 테스트 케이스마다 한 줄에 하나씩 개미 로봇이 이동한 거리를 출력합니다. 단 꼼꼼한 승현이는 오차가 생기는 것을 원하지 않으므로, 이 거리의 제곱을 출력해야 합니다.

 

예제 입력 1 예제 출력 1
1
1 2 3
18

 

해설

문제를 보고, 시작점과 끝점을 생각하니 제곱들의 합인가? 하고 계산을 했습니다. 1^2 + 2^2 + 3^2 = 14 이기 때문에 예제 출력 1 번과 값이 다릅니다. 이 때 1차적으로, 문제가 이해가 안되어 문제를 틀렸습니다. 다르게 말하면, 문제를 이해하지 못했습니다.

 

다른 분들의 풀이 및 코드를 확인하고 참고하여 작성하였습니다. 필자가 이해한 것 처럼, 조금 상세하게 작성해보도록 하겠습니다.

먼저 직육면체의 전개도를 그려봅시다. 3개의 길이가다른 모든 선에 관련이 있는 꼭지점의 길이의 최솟값을 구하면 됩니다. 총 3가지의 경우가 있습니다. 아래 도면도를 참고 부탁드립니다.

 

도면 1 . ( 3 + 2 ) ^ 2  + 1 ^ 2 = 25 + 1 = 26

도면 1
도면 1

도면 2 . ( 1 + 3 ) ^ 2  + 2 ^ 2 = 16 + 4 = 20

도면 2
도면 2

도면 3 . ( 1 + 2 ) ^ 2  + 3 ^ 2 = 9 + 9 = 18

 

도면 3개 의 값들은 각각 26, 20, 18 입니다. 이 중에서 최솟값은 18이기 때문에 정답은 18로 나오게 됩니다.

 

코드

import sys
input = sys.stdin.readline

n = int(input())
for i in range(n):
    a, b, c = map(int, input().split())
    zA = (a ** 2) + ((b + c) ** 2)
    zB = (b ** 2) + ((a + c) ** 2)
    zC = (c ** 2) + ((a + b) ** 2)
    answer = min(zA, zB, zC)
    print(answer)

 

728x90
반응형