백준(Java)/23년 7월
[Java] 백준 - 17386번: 선분 교차 1
C0MPAS
2023. 7. 20. 15:23
7월 20일(목) - 기하학 (17386번)
17386번: 선분 교차 1
첫째 줄에 L1의 양 끝 점 x1, y1, x2, y2가, 둘째 줄에 L2의 양 끝 점 x3, y3, x4, y4가 주어진다. 세 점이 일직선 위에 있는 경우는 없다.
www.acmicpc.net
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
문제점
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
풀이
(C언어 풀이 활용)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static class point{
long x;
long y;
public point(long x, long y){
this.x = x;
this.y = y;
}
}
static int ccw(point a, point b, point c){
long temp = (a.x * b.y) + (b.x * c.y) + (c.x * a.y);
temp = temp - (a.y * b.x) - (b.y * c.x) - (c.y * a.x);
if(temp > 0)
{
return 1;
}
else if(temp < 0)
{
return -1;
}
else
{
return 0;
}
}
static int cross_or_not(point a, point b, point c, point d){
int first = ccw(a,b,c) * ccw(a,b,d);
int second = ccw(c,d,a) * ccw(c,d,b);
if(first<=0 && second<=0)
{
return 1;
}
else
{
return 0;
}
}
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
point a = new point(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
point b = new point(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
st = new StringTokenizer(br.readLine(), " ");
point c = new point(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
point d = new point(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
System.out.println(cross_or_not(a,b,c,d));
}
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ