728x90
문제설명

왼쪽 같이 둥근 케잌을 22번의 칼질로 케잌을 나누려고 한다.

오른쪽 그림과 같이 케익의 둘레에 시계방향으로 1 1001 100까지 일정한 간격으로 번호가 부여되어 있다. 

                 

칼로 자르려고 하는 부분은 22개의 정수로 표현한다. 이 22번의 칼질로 44조각의 케잌을 만들려면 반드시 교차하는 부분이 생긴다. 

칼로 자르려는 부분이 두 군데 주어질 때 칼로 잘리는 부분이 44조각이 되는지 판단하는 프로그램을 작성하시오.

즉, 교차하는지 유무를 판단하시오. 아래 예는 1212 5353 9999 4545를 자른 예를 나타낸다.

 

 

 

입력

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

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

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

 

 

출력

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

 

 

입력예시

12 53

99 45

 

 

 

출력예시

cross

 

 


#include <stdio.h>
int main(void){
    int a,b,c,d,temp;
    scanf("%d %d", &a, &b);
    scanf("%d %d", &c, &d);
    if(a>b){
        temp=a;
        a=b;
        b=temp;
    }
    if(c>d){
        temp=c;
        c=d;
        d=temp;
    }
    if(c>a&&c<b){
        if(d<a||d>b){
            printf("cross");
        }
        else{
            printf("not cross");
        }
    }
    else if(d>a&&d<b){
        if(c<a||c>b){
            printf("cross");
        }
        else{
            printf("not cross");
        }
    }
    else{
        printf("not cross");
    }
}

이 문제를 처음 보았을 때 굉장히 당황했다. 그리고 예시에 있는 것들을 만족시키는 것들을 간단하게 만들었다. 하나는 50보다 작고 하나는 50보다 클때 cross라는 식을 작성했는데 그것이 아니였다. 이것이 되지 않는 이유는 극단적인 값이 나올 때 만족시키지 못하기 때문이다. codeup은 오류 예시가 나와서 확인을 해보았는데 1 100 2 90 일 때 걸렸다. 그럼 여기서는 교차가 되지 않고 각각이 만들어지게 된다. 이를 해결하는 방법을 검색을 통해 찾아내었다.

그것은 바로 c나 d 중 하나가 a와 b 사이에 있고 다른 하나는 그 밖에 있어야 한다는 것이다. 나는 이것을 or로 묶어주었다. 그러면 동시에 만족시킬 일은 없지만 하나 이상 만족시키면 if문에 해당이 되므로 성립이 되게 된다. 이 안에서도 성립 안될 경우를 대비해 not cross 문이 나오도록 만들어주어야 한다.

앞부분 크기 판단은 굳이 필요없을 것 같다. 이것은 첨에 내가 만들어 낸 식을 만족시키기 위한 식이 때문이다. 어쨌든 이렇게 만들어내면 맞다고 나오게 된다.

728x90

+ Recent posts