728x90
* 문제
https://www.acmicpc.net/problem/15973
[ 코드 ]
# box1의 a점(ax,ay), box1의 b점(bx,by)
ax,ay=0,0
bx,by=0,0
# box2의 c점, d점
cx,cy=0,0
dx,dy=0,0
def point(ax,ay,bx,by,cx,cy,dx,dy):
if((ax,ay)==(dx,dy) or (bx,by)==(cx,cy) or (bx,ay)==(cx,dy) or (ax,by)==(dx,cy)) :
return True
else:
return False
def line(ax,ay,bx,by,cx,cy,dx,dy):
# 꼭짓점 하나 일치
if(((bx,by)==(cx,dy) and by>cy) or (((bx,ay)==(cx,cy) and dy>ay))
or((dx,cy)==(ax,ay) and by>cy) or ((dx,dy)==(ax,by) and dy>ay)
# 변 일치
or ((bx,by)==(cx,dy) and (bx,ay)==(cx,cy)) or ((ax,ay)==(dx,cy) and (dx,dy)==(ax,by))
or ((cx, cy) == (ax, by) and (bx, by) == (dx, cy)) or ((ax, ay) == (cx, dy) and (dx, dy) == (bx, ay))
# 그 사이(a,b의 한 변에 c,d가 겹침)
or (ax==dx and (ay<cy<by or ay<dy<by)) or (bx==cx and (ay<cy<by or ay<dy<by))
or (by==cy and (ax<cx<bx or ax<dx<bx)) or (ay==dy and (ax<cx<bx or ax<dx<bx))
# 그 사이(c,d의 한 변에 a,b가 겹침)
or (ax == dx and (cy < ay < dy or cy < by < dy)) or (bx == cx and (cy < ay < dy or cy < by < dy))
or (by == cy and (cx < ax < dx or cx < bx < dx)) or (ay == dy and (cx < ax < dx or cx < bx < dx))
# 내부 한 변 일치(ab안에 cd)
# or (ay==cy and ax<cx<bx and ax<dx<bx and ay<dy<by) or (ax==cx and ay<cy<by and ay<dy<by and ax<dx<bx)
# or (by==dy and ax<cx<bx and ax<dx<bx and ay<cy<by) or (bx==dx and ay<cy<by and ay<dy<by and ax<cx<bx)
# 내부 한 변 일치(cd안에 ab)
# or (ay==cy and cx<ax<dx and cx<bx<dx and cy<by<dy) or (ax==cx and cy<ay<dy and cy<by<dy and cx<bx<dx)
# or (by==dy and cx<ax<dx and cx<bx<dx and cy<ay<dy) or (bx==dx and cy<ay<dy and cy<by<dy and cx<ax<dx)
):
return True
else:
return False
def null(ax,ay,bx,by,cx,cy,dx,dy): #cy>by or ay>dy
#dx<ax or bx<cx or min(cy,dy)>max(ay,by) or min(ay,by)>max(cy,dy)
#우,좌,상,하 바깥에서 안 접할 때
if(bx<cx or dx<ax or by<cy or dy<ay):
return True
#안에서 안 접할 때
elif(bx-ax<dx-cx and by-ay<dy-cy and (cx<ax<dx and cx<bx<dx) and (cy<ay<dy and cy<by<dy)): #속에 들어감
return True
elif(bx-ax>dx-cx and by-ay>dy-cy and (ax<cx<bx and ax<dx<bx) and (ay<cy<by and ay<dy<by)): #속에 들어감
return True
else:
return False
# main 함수
ax,ay,bx,by=map(int,input().split())
cx,cy,dx,dy=map(int,input().split())
if(line(ax,ay,bx,by,cx,cy,dx,dy)):
print('LINE')
elif (point(ax,ay,bx,by,cx,cy,dx,dy)):
print('POINT')
elif(null(ax,ay,bx,by,cx,cy,dx,dy)):
print('NULL')
else:
print('FACE')
[ 결과 ]
-----------------------------------------------------
case를 다 따져주는 것이 쉽지는 않은 것 같다.
아래의 그림을 보고 빠진 부분이 없는 지 확인해보면 좋을 것 같다 :)
* point
* line
* null
※ 제 글이 도움이 되었다면 공감 부탁드려요 :)
반응형
'파이썬' 카테고리의 다른 글
pdftotree 이용법 (pdf를 html로 변환) (0) | 2021.06.17 |
---|---|
[ Python ] 정규표현식(re), 맨 마지막에 \n 없이 출력하기, 패턴 찾기 (0) | 2021.06.14 |
[ Python ] 백준 10157 - 실패.. (0) | 2021.06.13 |
[ Python ] 2차원 배열 (리스트) (0) | 2021.06.13 |
[ Python ] 백준 11729 - 시간초과 해결!! (0) | 2021.06.06 |