Computer Science/Algorithm Problem

백준] 2991 - 사나운 개(COCI 2007/2008)

TwinParadox 2017. 12. 18. 23:40
728x90

시간 제한 : 1초

메모리 제한 : 128MB




입력

첫째 줄에 A, B, C, D가 주어진다. 


둘째 줄에는 P, M, N가 주어진다. P는 우체부의 도착 시간, M은 우유배달원의 도착 시간, N은 신문배달원의 도착 시간이다. 매일 아침이 시작하는 시간을 0이라고 한다. 도착 시간은 아침이 시작한 후 지난 시간이다. 예를 들어, P가 3이면, 우체부는 아침이 시작하고 3분 후에 도착한다는 뜻이다.


모든 숫자는 1보다 크거나 같고, 999보다 작거나 같다.




출력

첫째 줄에는 우체부, 둘째 줄에는 우유배달원, 셋째 줄에는 신문배달원이 개 몇 마리에게 공격 받는지 출력한다.




소스코드

#include <iostream>
using namespace std;
int main(void)
{
	int a, b, c, d, p, m, n, pb, mb, nb;
	cin >> a >> b >> c >> d;
	cin >> p >> m >> n;
	pb = ((p % (a + b) > 0 && p % (a + b) <= a) ? 1 : 0) + ((p % (c + d) > 0 && p % (c + d) <= c) ? 1 : 0);
	mb = ((m % (a + b) > 0 && m % (a + b) <= a) ? 1 : 0) + ((m % (c + d) > 0 && m % (c + d) <= c) ? 1 : 0);
	nb = ((n % (a + b) > 0 && n % (a + b) <= a) ? 1 : 0) + ((n % (c + d) > 0 && n % (c + d) <= c) ? 1 : 0);
	cout << pb << '\n' << mb << '\n' << nb;
}




Tip

수학의 나머지 연산을 사용하면 쉽게 풀 수 있다. 나머지 값을 기준으로 크기 비교 등을 통해서 공격 여부를 판단하면 된다. 필자는 삼항연산자를 사용해서 소스가 지저분하나, if문을 사용하면 좀 더 깔끔히 다듬을 수 있을 것이다.



728x90