2월 3일(금) - 기하 1 (1004번).......
1004번: 어린 왕자
입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 첫째 줄에 출발점 (x1, y1)과 도착점 (x2, y2)이 주어진다. 두 번째 줄에는 행성계의 개수 n이 주
www.acmicpc.net
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
최초 생각 정리
- t를 입력받은 이후에 사용하는 첫 번째 for문이 가장 밖에 존재
- 두 번째 for문이 나오기전에 x1, y1, x2, y2, n 을 입력받는다
- n을 입력받은 이후에 사용하는 두 번째 for문이 그 안에 존재
- 두 번째 for문 안에서는 c_x, c_y, r 을 입력받고, 행성계 진입/이탈의 횟수를 count 변수에 추가한 이후에 출력
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
문제점
1. judge_in_out 함수는 쉽게 만들어놓은 이후에, x1과y1이 입력된 경우 return 값이 1과 0에 따른 각각의 조건문
그리고 x2와y2가 입력된 경우 return 값이 1이고 0인 상황에 따른 조건문을 각각 만들며 4개를 만들어놓았다
-> 행성계 진입/이탈은 결국 출발점과 도착점에 따른 judge_in_out 함수의 출력값이 다른 경우에만 발생으로 정리
-> judge_in_out(x1, y1, c_x, c_y, r) != judge_in_out(x2, y2, c_x, c_y, r) 인 경우에만 count++로 정리
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
풀이
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <stdio.h>
int judge_in_out(int x, int y, int c_x, int c_y, int r)
{
if ((x - c_x) * (x - c_x) + (y - c_y) * (y - c_y) > r * r)
{
return 1;
}
else
{
return 0;
}
}
int main(void)
{
int t;
scanf("%d", &t);
int x1, y1, x2, y2;
int n;
int c_x, c_y, r;
for (int i = 0; i < t; i++)
{
scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
scanf("%d", &n);
int count = 0;
for (int j = 0; j < n; j++)
{
scanf("%d %d %d", &c_x, &c_y, &r);
if (judge_in_out(x1, y1, c_x, c_y, r) != judge_in_out(x2, y2, c_x, c_y, r))
{
count++;
}
}
printf("%d\n", count);
}
return 0;
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
'백준(C언어) > 23년 2월' 카테고리의 다른 글
정수론 및 조합론 - 1037번 (0) | 2023.02.06 |
---|---|
정수론 및 조합론 - 5086번 (0) | 2023.02.06 |
기하 1 - 1002번 (0) | 2023.02.02 |
기하 1 - 3053번 (0) | 2023.02.01 |
기하 1 - 2477번 (0) | 2023.02.01 |
댓글