[1스4코2파] 1명의 스위프트 개발자와 4명의 코틀린 개발자, 2명의 파이썬 개발자코딩 테스트 서막 : 1스4코2파

Rule :

하루에 1문제씩 풀기.
한 문제당 30분씩은 고민하기.
왜 그렇게 풀었는지 공유하기.
하루라도 놓친다면 벌금은 1,000원
백준 플래티넘, 프로그래머스 4단계, 개발자 탈퇴 시 모임 탈퇴 가능

START :

[3코1파] 2023.01.04~ (120일차)
[4코1파] 2023.01.13~ (111일차)
[1스4코1파] 2023.04.12~ (22일차)
[1스4코2파] 2023.05.03 ~ (1일차)

Today :

2023.05.03 [120일차]

프로그래머스 LV 2
두 원 사이의 정수 쌍
https://school.programmers.co.kr/learn/courses/30/lessons/181187

문제 설명

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

제한사항

1 ≤ r1 < r2 ≤ 1,000,000

입출력 예

입출력 예 설명

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

문제 풀이 방법

원에 속하는 점의 수를 원의 방정식을 이용해 푸는 그지 같은 문제이당.

x2 + y2 = r2 이므로, 어떠한 x에 대하여 원에 해당하는 점의 수는 int((r2-x2)0.5)
0사분면만 구한 후 4배하고 x, y축 위에 있는 점의 수를 더해서 풀면 되는 것... (ㅗ)

참고한 velog
https://sasca37.tistory.com/320

내 코드

def solution(r1, r2):
    answer = 0
    
    for i in range(1,r2):
        if r1>i:
            tmp = (r1**2-i**2) 
        else: 
            tmp = 0
            
        y1 = int(tmp**0.5)
        y2 = int((r2**2-i**2)**0.5)
        
        answer += y2-y1 + (1 if y1**2 == tmp else 0)
    answer +=1
    
    return 4*answer

증빙

다른 사람 풀이

이거랑

이거는 함수로 예쁘게 풀어서 뽀려와봄

여담

프로그래머스 2단계 10문제 남았다..
남들꺼 안보고 내가 푼건 104개 중에 몇개나 될까
외우면 어짜피 내꺼임 ^^

profile
꿈꾸는 것도 개발처럼 깊게

0개의 댓글