백준 홈페이지 문제와 개인적인 풀이를 작성한 글입니다.
문제
승현이는 방학을 맞아 심심하지만, 공부는 하기 싫습니다. 이렇게 방 안에서 하루하루 시간을 낭비하던 중, 승현이는 자신의 직육면체 모양의 지우개에 개미 한 마리가 붙어 있다는 것을 알게 됩니다. 사실 이 개미는 우리가 문제를 어떻게 낼 지 잘 몰라서 방에 넣은 로봇입니다.
이 개미 로봇은 말도 안 되지만 어떠한 시련이 닥쳐도 서로 반대편에 위치한 점 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
도면 2 . ( 1 + 3 ) ^ 2 + 2 ^ 2 = 16 + 4 = 20
도면 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)
'개발 > Coding Test - Python' 카테고리의 다른 글
[Python] 이것이 코딩테스트다 with 파이썬 - 곱하기 혹은 더하기 - 그리디 알고리즘 (0) | 2023.03.11 |
---|---|
[Python] 백준 1439번 뒤집기 - 그리디 알고리즘 (0) | 2023.03.10 |
[Python] 백준 11058번 크리보드 - 다이나믹 프로그래밍(DP) (0) | 2023.03.08 |
[Python] 백준 1743번 음식물 피하기 - DFS (0) | 2023.03.07 |
[Python] 이것이 코딩테스트다 with 파이썬 - 문자열 재정렬 - 구현 (0) | 2023.03.06 |