-
[python] Codility Lesson 6-4. NumberOfDiscIntersections공부/알고리즘 2021. 8. 16. 13:44
1. Sorting section에 위치한 문제라 sort를 해야 시간복잡도에서 무사히 통과하리라 생각했지만 쉽게 방법이 떠오르지 않아 손 내키는데로 작성해 보았다.
원의 중심은 list에서 순차적으로 증가하니, 2중 for문을 돌면서 first_비교원의 최대값이 second_비교원의 최소값보다 크거나 같은경우 answer_count += 1
정확도는 100%를 달성했지만 performance에서 망가진 O(N*2) 코딜리티는 N*2을 가만두지 않는다 ㅠㅠ
def solution(A): answer_count = 0 for i in range(len(A)-1): for j in range(i+1, len(A)): if i+A[i] >= j-A[j]: answer_count +=1 if answer_count > 10000000: answer_count = -1 return answer_count
2. 깔끔한 정답을 찾아 보았다.
정말 대단하다, 어떻게 이런 생각을 할 수 있을까 같은 사람이 ㅠㅠ
1. 가장 최소범위를 지나는 원을 시작으로 포함되는 원을 만날때 마다 r += 1, 그리고 t += 1
2. for 문을 돌면서 d[1] == 1, 즉 원이 하나 완성된 것을 만나면 t -= 1
def solution(A): disc = [] for i, v in enumerate(A): disc.append((i-v, -1)) disc.append((i+v, 1)) disc = sorted(disc) t = 0 r = 0 for d in disc: if d[1] == 1: t -= 1 else : r += t t += 1 return r if r <= 10000000 else -1
728x90'공부 > 알고리즘' 카테고리의 다른 글
[python] Codility Lesson 7-1. Brackets (0) 2021.09.03 [python] Codility Lesson 6-3. Triangle (0) 2021.09.02 [python] Codility Lesson 6-2. MaxProductOfThree (0) 2021.07.27 [python] Codility Lesson 6-1. Distinct (0) 2021.07.27 [python] Codility Lesson 5-4. PassingCars (0) 2021.07.27