본문 바로가기
알고리즘

[cpp]백준 14266번 나는 가르친다 스위핑을

by algosketch 2021. 9. 19.
더보기

오늘 시간 낭비한 것에 대한 푸념

 

 풀이는 맞았는데, 실수로 디버깅하려고 작성한 코드를 안 지워서 정답률 및 시간 손해를 봤다... ㅠㅠ 그것도 두 문제나...

 구현이 길어지면 단계별로 테스트하기 위해 다음과 같이 로그를 찍어보는 코드를 넣었는데, 제출할 때 이를 인지하지 못 한 게 사건의 발단이었다. 그래서 위와같이 8번의 맞왜틀을 시전했다. 처음 코드에서 44번 라인만 지우니 맞더라...

 

https://www.acmicpc.net/problem/14266

 

14266번: 나는 가르친다 스위핑을

영선이는 BOJ 캠프의 강사다. 이번에 스위핑에 대한 세미나를 진행하였는데, 그 연습문제를 만들었다. “1사분면 정수 좌표계에 n개의 점이 주어질 때, 원점을 지나는 직선 중 직선위의 점들이 최

www.acmicpc.net

 

 원래 풀이를 잘 안 쓰는데 이 문제는 아무도 풀이를 안 적은 것 같아서 올려 본다.

1. 원점과 (x1, y1), 원점과 (x2, y2) 사이의 기울기를 구한다.
2. 둘 중 기울기가 작은 것에는 1 을, 큰 것에는 -1 을 매핑해 준다.
3. 기울기와 매핑된 것을 통째로 같은 배열에 넣고 정렬해 준다. (만약 기울기가 같다면 -1 과 매핑된 것이 앞에 온다.)
4. 배열을 순회하면서 매핑된 -1 혹은 1 을 계속 더한다.

마지막까지 더하면 0 이 되어야 하고 중간에 음수가 나오면 안 된다.

ex. (4, 4), (8, 2) 라면 기울기와 매핑된 결과는 (1, 1), (0.25, -1) 이다.
이것을 기준으로 시뮬레이션 하면 기울기 0~0.25 까지 0, 0.25~1 까지 1, 1 이후는 0이 된다.