안녕하세요.
오늘은 파이썬의 abs 함수를 알아보겠습니다.
백준 1002번 터렛 문제를 푸는데 abs함수가 쓰이더라구요.
abs 함수는 절대값을 구하는 함수입니다.
절대값은 다들 아시겠지만 방향을 무시하고 크기만 나타내는 값입니다.
abs 함수를 직접 써볼까요?
print(abs(-1))
위 코드를 실행하면 -1의 크기인 1이 출력됩니다.
쉽죠 ? ㅎㅎ
백준 1002번 문제에서는 두 중심 좌표 사이의 거리와 두 반지름을 뺀 값을 비교할때 쓰였습니다.
터렛 문제는 두 원의 접점이 몇개인지 구하는 문제거든요.
x, y는 두 점의 좌표값이고, r은 반지름의 크기입니다.
그래서 아래와 같은 수식을 이용해 변수 d에 두 점의 거리를 계산해 넣어주었습니다.
d = ((x1-x2)**2 + (y1-y2)**2)**0.5
참고로 **는 제곱이라는 의미입니다. 직관적이죠?
그리고 만약 d값이 0이 아니라면, 두 점이 서로 다른 위치에 있다는 뜻이므로
두 원의 접점 개수를 구하는 조건 식을 넣어주었습니다.
if d:
if ((d > (r1+r2)) or (d < abs(r1-r2))):
print(0)
elif (d == (r1+r2)) or (d == abs(r1-r2)):
print(1)
elif (d < (r1+r2)):
print(2)
여기서 r1+r2가 d보다 작다면 두 원은 접점이 없다는 의미입니다.
마찬가지로 r1-r2의 절대값이 d보다 크다면 역시 접점이 없다는 의미겠죠?
왜냐하면 접점이 1개라도 있으려면 d+r1=r2거나 d+r2=r1이어야 하기 때문입니다.
다음으로 r1+r2가 d와 같다면 두 원의 접점은 1개가 됩니다.
마찬가지로 r1-r2의 절대값이 d와 같을 때도 접점은 1개예요.
세번째 조건도 같은 원리입니다.
r1+r2가 d보다 크면 두 원의 접점이 2개가 됩니다.
자 근데 만약 d가 0이라면?
else:
if (r1==r2):
print(-1)
else:
print(0)
그럼 r이 같을때 두 원은 완벽하게 겹치게 되므로 접점이 무한대입니다.
r이 다르면 동심원이니 접점이 0개가 되구요.
'코딩 > 파이썬' 카테고리의 다른 글
파이썬 최솟값 구하기(feat.백준 1085 직사각형에서 탈출) (0) | 2022.09.13 |
---|---|
파이썬 나눗셈 몫과 나머지 구하기(feat.백준 1271 엄청난 부자2) (0) | 2022.09.13 |
파이썬 sort 함수를 알아보자 (0) | 2022.09.08 |
파이썬 map 함수를 알아보자 (0) | 2022.09.07 |
파이썬으로 여러개의 엑셀 파일을 합병하기 (0) | 2022.07.19 |