https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXYmjC8adSkDFAST
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
같은 평면위에 놓인 원과 사각형이 겹치는 관계를 체크하는 문제입니다.
주어진 조건하에서 원과 사각형이 같은 모양일 수가 없기 때문에 가능한 경우는 세개입니다.
1. 원 안에 사각형이 포함됨 = 빨간 셀로판지만 보임
2. 사각형 안에 원이 포함됨 = 파란 셀로판지만 보임
3. 원과 사각형간에 포함관계가 없음 (일부만 겹치거나 아예 겹치지 않음) = 두가지 색이 모두 보임
입력에 따라 조건만 잘 나누어주시면 해결됩니다.
제 풀이에서는 사각형의 네개의 꼭짓점 (a,b) (a,d) (c,b) (c,d)이 하나라도 원 밖에 있는지를 체크하고 (모두 안쪽인 경우 1번 케이스에 해당), 다음 조건문으로 사각형의 모든 꼭짓점이 원 밖에 있는지를 체크(2번 케이스) 아니라면 3번 케이스가 됩니다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
class q11112_SWEA_셀로판지 {
public static void main(String args[]) throws Exception {
int T, a, b, c, d, p, q, r;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
T = Integer.parseInt(br.readLine());
for (int test_case = 1; test_case < T + 1; test_case++) {
st = new StringTokenizer(br.readLine());
p = Integer.parseInt(st.nextToken());
q = Integer.parseInt(st.nextToken());
r = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
a = Integer.parseInt(st.nextToken());
b = Integer.parseInt(st.nextToken());
c = Integer.parseInt(st.nextToken());
d = Integer.parseInt(st.nextToken());
if ((p - a) * (p - a) + (q - b) * (q - b) > r * r
|| (p - a) * (p - a) + (q - d) * (q - d) > r * r
|| (p - c) * (p - c) + (q - b) * (q - b) > r * r
|| (p - c) * (p - c) + (q - d) * (q - d) > r * r) {
if (p + r > c || p - r < a || q + r > d || q - r < b) {
System.out.println("#" + test_case + " YY");
} else {
System.out.println("#" + test_case + " NY");
}
} else {
System.out.println("#" + test_case + " YN");
}
}
br.close();
}
}
728x90
'🔍 알고리즘 > SWEA' 카테고리의 다른 글
[Java] SWEA 7699.수지의 수지맞는 여행 D4 (0) | 2022.07.04 |
---|---|
[Java] SWEA 8382.방향전환 D4 (0) | 2022.07.03 |
[Java] SWEA 8458.원점으로 집합 D4 (0) | 2022.07.03 |
[Java] SWEA 11112.다트게임 D3 (0) | 2022.07.01 |
[Java] SWEA 10966.물놀이를 가자 D4 (0) | 2022.06.29 |