문제
출처 : www.acmicpc.net/problem/20157
풍선들의 (X,Y)가 주어졌을때,
호준이가 화살을 쏠때, (화살은 포물선이 아닌 직선으로 날라감) 한번에 터트릴수 있는 풍선의 최대갯수를 구하는 문제다.
풀이
풍선의 갯수가 10만개이다.
일반적인?? 완전탐색으로 모든경우를 볼경우 O(N^2)이 나와서 시간초과가 뜬다.
완전탐색으로 풀되, 저장을 다르게 해야하는데,
나는 딕셔너리에
{기울기, 해당 기울기의 풍선의 갯수} 로 저장해 주는식으로 풀었다.
예를들어, (8,16)위치에 있는 풍선의 경우 ((1,2),1)로 저장을 해준다.
이때, (1,2)를 기울기인 2로 저장해놓지않는데, 그 이유가 이렇게 저장해놓을경우, C언어 표현 범위?를 벗어나는 소수에 대해서 (무한소수) 와 유한소수를 같은 기울기를 가지고 있다고 판단하기 때문이다.
예를들어,
무한소수 3.3333333333333333.......
와
유한소수 3.3333333333333333
을 같은 기울기라고 판단하고 틀렸습니다가 뜬다. long double을 써도 틀림
따라서 X좌표와 Y좌표의 공약수로 저장을 해줘야 한다.
그 이후, 모든 풍선에 대해서 같은 공약수를 갖고있는 풍선들을 찾아주면됨.
소스코드
'알고리즘 (2020 : 08 : 10 ~ ) > 구현, 시뮬' 카테고리의 다른 글
[백준 / BOJ] 1083 소트 (0) | 2020.12.03 |
---|---|
[백준 / BOJ] 19591 독특한 계산기 (0) | 2020.11.30 |
[백준 / BOJ] 2872 우리집엔 도서관이 있어 (0) | 2020.11.06 |
[백준 / BOJ] 2174 로봇 시뮬레이션 (0) | 2020.11.05 |
[백준 / BOJ] 3213 피자 (0) | 2020.10.05 |