728x90
반응형
#include<cstdio>
#include<cstring>
#include<iostream>
#include<vector>
#include<cmath>
#include<algorithm>
typedef long long ll;
using namespace std;
//가장 바깥에 꽂힌경우 0점인것만 처리.
int main(void)
{
int size;
int len;
int posx,posy;
float distance;
int sum;
float quot;
int i_quot;
scanf("%d",&size);
for(int i = 0; i < size; i++)
{
scanf("%d",&len);
sum = 0;
for(int x = 0; x < len; x++)
{
scanf("%d %d",&posx,&posy);
distance = sqrt((float)(posx*posx) + (float)(posy*posy));
if(distance>200) continue;
quot = distance/20; //실수
i_quot = (int)distance/20; // 정수
if(i_quot - quot == 0)
{
//1.0
if(quot == 0){
sum += 10;
continue;
}
sum += 11 - quot;
}else{
//1.1
sum += 10 - quot;
}
//0 1 2 3 4 5와 0.1을 구분해야함..
}
printf("#%d %d\n",i+1,sum);
}
return 0;
}
풀이방법은 2가지가 있었다. 풀이방법에 앞서 시행착오 먼저..
시행착오
1. 점수 계산법이 20.0 인 경우 r = 40으로 보는걸로 착각했다.
2. 0~200까지의 숫자에서 다중 if문 없이 실수,정수를 구분하는 방법에 대해서 생각을 하는데 30분이 넘게 걸렸다.
풀이법
1. 실수-정수 하면 되는데.. 하.. 이거때문에 기록을 한다.
20.0 40.0처럼 딱 떨어지는 경우 r = 20, 40으로 보는 코드 하나.
길이가 0 인경우 r = 20으로 보는 예외 하나.
그 외에는 20.1 같은건 r = 40 이런식으로 나오게 했다.
2. 배열에 미리 값을 담아두고 푸는방법.
[200*200,180*180,160*160,140...] 이런식으로 점수들을 담아두고
sqrt없이 그냥 x^2 + y^2 으로 해서
하나하나 비교하면서 찍어주는 방식이 있다.
=====END======
배열 값에 대한 하드 코딩 필요없이 어떤 범위라도 처리할 수 있다는것에 의의를 두고..
실수,정수 구분 완료
728x90
반응형
'컴퓨터 > 알고리즘' 카테고리의 다른 글
[SWEA] 10761. 신뢰(로봇 버튼누르기) (4) | 2021.02.09 |
---|---|
[SWEA] 10965. 제곱수 만들기 (에라토스테네스의 체) 빠른속도 (0) | 2021.02.06 |
[SWEA] 11315. 오목 판정 (0) | 2021.02.04 |
[SWEA] 1859. 백만 장자 프로젝트 (0) | 2021.02.03 |
[SWEA] 1954. 달팽이 숫자 (0) | 2021.02.02 |