http://kldp.org/node/124415
위의 문제를 풀어보았다.
문제: 어떤 가게가 여는 시간이 a, 닫는 시간이 b라고 하자. x를 입력하면 가게가 열었는지 닫았는지 알려주는 함수를 만들어 보자.
예: a=2시, b=15시. f(x=12)=true, f(x=1)=false, f(x=17)=false
예: a=20시, b=5시. f(x=1)=true, f(x=12)=false, f(x=23)=true
C언어라고 가정하자.
가장 빠르게 떠오르는 답은 다음과 같다.
if a if a
} else{
return false;
}
} else {
if a>x || x>b{
return true;
} else{
return false;
}
}
}
KLDP게시판에 많은 고수분들이 괜찮은 풀이를 올렸는데, 그중에 내가 제안한 것 두가지만 여기서 설명하도록 하겠다.
첫번째로
isOpen(int a, int b, int x){ return ((a-b)(x-a)(x-b)/abs((a-b)(x-a)(x-b))+1)/2; }
일단 ab인 경우에 b
두번째로
return (x-a+n)%n<(b-a+n)%n;
}
여기서 n은 하루의 길이를 나타내는 정수이다. 이런식으로 계산하는 것이 가능한 것은 24시간을 기준으로 할 때 항상 xb일 수 있겠지만(a=b는?) 실제 개념으로는 항상 a
세번째로
return (a-b)(x-a)(x-b)>0;
}
첫번째 답의 변형이다. 셋 중에서 제일 간단한 것 같다
.

댓글 남기기