Notice
Recent Posts
Recent Comments
Link
-
기타 :: 백준 :: 여러 직사각형의 전체 면적 구하기 :: 2672 본문
여러 직사각형의 전체 면적 구하기
문제를 푸는것도 어렵지만 자릿수 맞춰 출력하는 것도 조금 까다로운 것 같다..
1 2 3 4 5 6 | long ans = (long)(chk(x, y)*100); if(ans%100 == 0){ System.out.println(ans/100); }else{ System.out.printf("%.2f", ((double)ans)/100); } | cs |
요렇게 했을 때 백준 사이트의 테스트케이스와 codeup에서는 맞았지만 채점 결과 틀렸다고 나왔다.
1 2 3 4 5 6 | double ans = (chk(x, y)); if((long)ans == ans){ System.out.println((long)ans); }else{ System.out.printf("%.2f", (ans)); } | cs |
해결책을 찾다가 요렇게 바꿨을 때 맞았습니다!!가 떴다.
뭐가 다른지 모르겠다. 공부를 더 하면 알 수 있으려나..
[문제 풀이]
이 문제를 처음 접했을 때 가장 먼저 떠오르는 방법은 모든 사각형의 넓이를 모두 구한 후 겹치는 영역을 빼는 방법 이지 않을까 싶다.
나 또한 이 생각을 처음 했었다. 하지만 사각형이 겹쳤는지, 몇번 겹쳤는지를 모두 체크해줘야 하고, 그 외에도 여러 가지 어려움이 있을 것 같아 다른 방법을 생각해봤다.
1. 예제로 나와있는 그림에서 각 사각형의 세로선과 가로선을 연장시킨다.
2. 그러면 크기는 일정하지 않지만 바둑판과 같은 격자무늬가 생긴다.
3. 격자무늬에 해당하는 조그만한 사각형들이 입력받은 큰 사각형에 포함되는지 여부를 체크한다.
4. 큰 사각형에 포함된다면 해당 영역의 넓이를 답에 더해준다.
5. 모든 연산을 끝낸 후 구한 값을 출력해주면 끝!
나는 입력받은 좌표들을 ArrayList에 집어넣고, 입력이 끝난 후 정렬시켜 사용했다.
여기서 주의할 점은, 출력조건이다.
소숫점 이하가 0이면 정수영역만,
0이 아니라면 소숫점 2자리 까지 출력해줘야 함!!
Comments