작성한 질문수
10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8-Z
작성
·
223
0
해당 문제 시간 복잡도에 대해 궁금해서 문의드립니다.
위의 그림처럼 n(꼭짓점 개수)=100,000이고 x와 평행한 선분이 n/2=50,000개 나올 때 , x=1에서 x=1,000,000까지 스위핑을 해야 하는 사례에서는 시간 복잡도가 5*10^9로 시간 초과가 날 거라 판단하고 다른 방법을 고민하고 풀었는데 스위핑 방식도 가능하네요. 스위핑 방식이 시간초과가 나지 않을 거라는 걸 어떻게 알 수 있나요?
항상 빠른 답변해주셔서 감사합니다.
답변 1
안녕하세요 선우님 ㅎㅎ
스위핑을 해야 하는 사례에서는 시간 복잡도가 5*10^9로 시간 초과가 날 거라 판단
>> 왜 이렇게 판단하셨나요?
감사합니다.
한번 스위핑에 x=1에서 x=1.000,000까지 이동하니깐 한번 이동에 10^5이고 x축과 평행한 선분이 5*10^4개 있으므로(10^5) * (5*10^4) = 5*10^9으로 계산했고 1억을 넘는 수라 시간초과가 날 거라 생각했습니다
※ 수정 : 10^5이 아니라 10^6이네요. 5*10^10이 정확한 값입니다.
음.. 좌표이동은 O(1)의 시간복잡도를 가집니다.시간복잡도 강의 업데이트 했는데 안보셨으면 참고 부탁드립니다. 전체 좌표를 다 하기 때문에 전체적으로 보면 O(N)이나 이는 입력받으면서 진행하기 때문에 큰 상관이 없습니다.
for(int i = 0; i < n; i++){ cin >> x >> y; x += 500000; y += 500000;
한번 스위핑에 x=1에서 x=1.000,000까지 이동하니깐 한번 이동에 10^5이고 x축과 평행한 선분이 5*10^4개 있으므로
(10^5) * (5*10^4) = 5*10^9으로 계산했고 1억을 넘는 수라 시간초과가 날 거라 생각했습니다
※ 수정 : 10^5이 아니라 10^6이네요. 5*10^10이 정확한 값입니다.