본문 바로가기

알고리즘

[C/C++] 코드업(codeup) 2628번 케익 자르기

▽문제 바로가기

https://codeup.kr/problem.php?id=2628

 

케익 자르기

주어진 두 잘린 부분이 교차한다면 "$cross$", 교차하지 않는다면 "$not$ $cross$"를 출력한다.

codeup.kr


입력

첫 번째 줄에는 첫 번째 현의 정보를 나타내는 두 정수 a, b가

두 번째 줄에는 두 번째 현의 정보를 나타내는 두 정수 c, d가 입력된다.

(1<=a,b,c,d<=100 : a,b,c,d는 모두 다르다.)

 

출력

주어진 두 잘린 부분이 교차한다면 "cross", 교차하지 않는다면 "not cross"를 출력한다.

 

문제 풀이

 

4조각을 만드는 조건을 찾아야 합니다. 손으로 요리조리 하다 보면 그 조건을 찾을 수 있습니다.

 

한 선을 기준으로 잡으면 나머지 한 선에서 한 점은 기준 선 사이 값을 나머지 한 점은 기준선 밖에 값을 가지면 됩니다.

예를 들어 a, b를 기준으로 잡았으면 c, d 중 한 값은 a와 b 사이 값을 가지고 나머지 한 값은 a와 b 범위 밖(?)의 값을 가지면 됩니다.

 

정렬을 수행하면 편합니다.

 

#include <stdio.h>
#include <algorithm>

using namespace std;

int main() {
    
    int a[2], b[2];
    scanf("%d%d", &a[0], &a[1]);
    scanf("%d%d", &b[0], &b[1]);
    
    //정렬 
    sort(a, a+2);
    sort(b, b+2);
    
    //a[0]과 a[1]을 기준이라 생각했을때
    //b[0]이 a[0]과 b[1]사이에 있고 
    if(b[0]>a[0]&&b[0]<a[1]){
    	//b[1]이 a[0]과 a[1]범위 밖에 있으면 cross 
    	if(b[1]>a[1]) printf("cross");
    	else printf("not cross");
    }
    
    //b[1]이 a[0]과 b[1]사이에 있고
    else if(b[1]>a[0]&&b[1]<a[1]){
    	//b[0]이 a[0]과 a[1]범위 밖에 있으면 cross 
    	if(b[0]<a[0]) printf("cross");
    	else printf("not cross");
    }
    
    else printf("not cross");
        
    return 0;
}