인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

정선우님의 프로필 이미지
정선우

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

8-Z

선생님 8-Z 질문있습니다

작성

·

223

0

해당 문제 시간 복잡도에 대해 궁금해서 문의드립니다.

위의 그림처럼 n(꼭짓점 개수)=100,000이고 x와 평행한 선분이 n/2=50,000개 나올 때 , x=1에서 x=1,000,000까지 스위핑을 해야 하는 사례에서는 시간 복잡도가 5*10^9로 시간 초과가 날 거라 판단하고 다른 방법을 고민하고 풀었는데 스위핑 방식도 가능하네요. 스위핑 방식이 시간초과가 나지 않을 거라는 걸 어떻게 알 수 있나요?

 

항상 빠른 답변해주셔서 감사합니다.

답변 1

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 선우님 ㅎㅎ

스위핑을 해야 하는 사례에서는 시간 복잡도가 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;
정선우님의 프로필 이미지
정선우

작성한 질문수

질문하기