네 개의 변 길이가 담긴 리스트가 주어졌을 때, 이 네 변이 직사각형을 형성할 수 있는지 판별하는 문제를 살펴보겠습니다.
예를 들어 입력이 sides = [10, 30, 30, 10]이라면, 10과 30이 각각 두 개씩 짝을 이루고 있으므로 결과는 True가 됩니다.
해결 접근 방식
직사각형은 마주 보는 두 변의 길이가 서로 같아야 한다는 성질을 이용합니다. 다음 순서로 조건을 검사합니다.
- 네 변의 길이가 모두 같다면(정사각형도 직사각형에 포함됨)
True를 반환합니다. sides[0]과sides[1]이 같고,sides[2]와sides[3]이 같다면True를 반환합니다.sides[0]과sides[3]이 같고,sides[2]와sides[1]이 같다면True를 반환합니다.sides[0]과sides[2]가 같고,sides[3]과sides[1]이 같다면True를 반환합니다.- 위 조건 중 어느 것도 만족하지 않으면
False를 반환합니다.
구현 예제
아래 코드를 통해 더 쉽게 이해할 수 있습니다.
def solve(sides):
if sides[0] == sides[1] == sides[2] == sides[3]:
return True
elif sides[0] == sides[1] and sides[2] == sides[3]:
return True
elif sides[0] == sides[3] and sides[2] == sides[1]:
return True
elif sides[0] == sides[2] and sides[3] == sides[1]:
return True
return False
sides = [10, 30, 30, 10]
print(solve(sides))입력
[10, 30, 30, 10]
출력
True
정리
이 알고리즘은 최대 몇 번의 비교만으로 직사각형 여부를 판별하므로 시간 복잡도는 O(1)입니다. 네 변의 배열 순서에 따라 짝이 지어지는 위치가 달라질 수 있기 때문에, 가능한 모든 짝 조합을 검사하는 것이 핵심입니다. 참고로 이 방법은 변의 길이만으로 직사각형을 판별하므로, 실제 기하학적 배치(각도 등)까지 고려해야 하는 상황에서는 추가 검증이 필요할 수 있습니다.