본문 바로가기
코딩테스트 파이썬/파이썬 프로그래머스 2단계

두 원 사이의 정수 쌍

by 세용용용용 2024. 7. 10.

업데이트 사항

수정 : 2024-07-10 [시간 복잡도 추가]

 

x축과 y축으로 이루어진 2차원 직교 좌표계에 중심이 원점인 서로 다른 크기의 원이 두 개 주어집니다. 반지름을 나타내는 두 정수 r1, r2가 매개변수로 주어질 때, 두 원 사이의 공간에 x좌표와 y좌표가 모두 정수인 점의 개수를 return하도록 solution 함수를 완성해주세요.
※ 각 원 위의 점도 포함하여 셉니다.


제한 사항

  • 1 ≤ r1 < r2 ≤ 1,000,000

입출력 예

r1 r2 result

2 3 20

입출력 예 설명

그림과 같이 정수 쌍으로 이루어진 점은 총 20개 입니다

 

코딩테스트 연습 - 두 원 사이의 정수 쌍 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

나의 코드

def solution(r1, r2):
    answer = 0
    for i in range(1, r2+1):
        for j in range(r2+1):
            now_len = (i**2+j**2)**(1/2)
            if r1<=now_len<=r2:
                answer+=1
            if now_len>=r2:
                break
    answer*=4
    return answer

시간초과....ㅠㅠ

# 시간 복잡도
이차형 시간복잡도.. ( O(n**2) )

 

수정 코드

# 2024-07-10
import math
def solution(r1, r2):
    answer = 0
    
    for x in range(r2):
        max_y = int(((r2**2)-(x**2))**(1/2))
        if r1<=x:
            min_y=1
        else:
            min_y = math.ceil(((r1**2)-(x**2))**(1/2))
        answer+=(max_y-min_y+1)
    answer*=4
    
    return answer
# 시간 복잡도
for x in range(r2) : r2의 값으로 루프를 한바뀌 돔 ( 선형 시간 )
내부계산 : 상수시간

시간복잡도 : 선형시간 ( O(n) )

'코딩테스트 파이썬 > 파이썬 프로그래머스 2단계' 카테고리의 다른 글

이모티콘 할인행사  (0) 2024.07.12
혼자 놀기의 달인  (0) 2024.07.11
과제 진행하기  (0) 2024.07.09
후보키  (0) 2024.07.08
광물 캐기  (0) 2024.07.05