Python

[Python] Python 문제풀이 (사각형 충돌조사)

땅콩새싹 2020. 10. 12. 19:37
반응형

 


 

문제

사용자로 부터 2개의 사각형의 좌표를 입력 받아 2개의 사각형이 겹치는지를 검사하는 프로그램을 작성하시오.

단, 두 사각형이 겹치는지 체크하는 부분은 반드시 함수로 작성하시오.

 

입력 & 출력

첫번째 사각형의 x1좌표 : 10
첫번째 사각형의 y1좌표 : 10
첫번째 사각형의 x2좌표 : 20
첫번째 사각형의 y2좌표 : 20
두번째 사각형의 x1좌표 : 15
두번째 사각형의 y1좌표 : 15
두번째 사각형의 x2좌표 : 30
두번째 사각형의 y2좌표 : 30
두개의 사각형이 겹침!

 

코드설명

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
def check_rec():
    rec_x1=int(input('첫번째 사각형의 x1좌표 : '))
    rec_y1=int(input('첫번째 사각형의 y1좌표 : '))
    rec_x2=int(input('첫번째 사각형의 x2좌표 : '))
    rec_y2=int(input('첫번째 사각형의 y2좌표 : '))
 
    rec2_x1=int(input('두번째 사각형의 x1좌표 : '))
    rec2_y1=int(input('두번째 사각형의 y1좌표 : '))
    rec2_x2=int(input('두번째 사각형의 x2좌표 : '))
    rec2_y2=int(input('두번째 사각형의 y2좌표 : '))
 
    maxrec_x = max(rec_x1,rec_x2)
    minrec_x = min(rec_x1,rec_x2)
    maxrec_y = max(rec_y1, rec_y2)
    minrec_y = min(rec_y1, rec_y2)
 
    if not minrec_x < rec2_x1 < maxrec_x and not\
    minrec_x < rec2_x2 < maxrec_x and not\
    minrec_y < rec2_y1 < maxrec_y and not\
    minrec_y < rec2_y2 < maxrec_y:
        return '두개의 사각형이 겹치지 않음!'
    else:
        return '두개의 사각형이 겹침!'
 
print(check_rec())

문제에서 두 사각형이 겹치는지 체크하는 부분은 반드시 함수로 작성하라고 했기 때문에 사각형을 체크해주는 함수를 선언해 줍니다.

그리고 첫번째 사각형과 두번째 사각형의 좌표를 입력받아 줍니다. 사각형은 각각 두개의 x좌표와 두개의 y좌표를 입력 받았습니다.

그리고 우리는 첫번째 사각형을 기준으로 보고, 첫번째 사각형에 두번째 사각형이 겹치는지 또는 겹치지 않는지 조사해야 하기 때문에 첫번째 사각형의 입력받은 x좌표의 최대값, 최소값 또 y좌표의 최대값, 최소값을 max(), min()함수를 통해 변수에 각각 저장시켜 줍니다.

이 문제의 핵심 알고리즘이 다음 if문인데 두번째 사각형의 입력받을 좌표가 기준으로 잡은 첫번째 사각형의 최소값보다 작고 최대값보다 큰 곳에 찍혀야 두 사각형은 겹치지 않게 됩니다. 코드만 보고 이해하려면 조금 복잡하지만 천천히 코드를 따라가면서 종이에 그려보는게 이해가기 더 쉽습니다!

조건이 만족하면 '두개의 사각형이 겹치지 않음!'을 출력하고 이외에는 '두개의 사각형이 겹침!'을 출력합니다.

 

실행결과

 

반응형