문제풀이/Baekjoon codeplus

문제풀이/백준(Boj) 단계별 풀이백준 - 단계별로 풀기 9단계 파이썬 - (기본 수학2 단계 (1978번, 2581번, 11653번, 1929번, 4948번, 9020번, 1085번, 3009번, 4153번, 3053번, 1002번)

얄루몬 2021. 7. 24. 12:55

https://www.acmicpc.net/problem/1978

 

1978번: 소수 찾기

첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

www.acmicpc.net

소수 찾기 성공

시간 제한메모리 제한제출정답맞은 사람정답 비율

2 초 128 MB 76801 36374 29704 48.201%

문제

주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.

입력

첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

출력

주어진 수들 중 소수의 개수를 출력한다.

예제 입력 1 복사

4 1 3 5 7

예제 출력 1 복사

3

출처

알고리즘 분류

 

n = int(input())
n_list = list(map(int,input().split()))
list_cnt = 0

for i in n_list:
    cnt = 0

    if i > 1:
        for j in range(2, i+1):
            if i%j == 0:
                cnt +=1
        if cnt == 1:
            list_cnt += 1    
print(list_cnt)

https://www.acmicpc.net/problem/2581

 

2581번: 소수

M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다.  단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.

www.acmicpc.net

소수 출처

시간 제한메모리 제한제출정답맞은 사람정답 비율

1 초 128 MB 55215 21220 18322 39.309%

문제

자연수 M과 N이 주어질 때 M이상 N이하의 자연수  소수인 것을 모두 골라 이들 소수의 합 최솟값을 찾는 프로그램을 작성하시오.

예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로, 이들 소수의 합은 620이고, 최솟값은 61이 된다.

입력

입력의 첫째 줄에 M이, 둘째 줄에 N이 주어진다.

M과 N은 10,000이하의 자연수이며, M은 N보다 작거나 같다.

출력

M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 

단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.

예제 입력 1 복사

60 100

예제 출력 1 복사

620

61

예제 입력 2 복사

64

65

예제 출력 2 복사

-1

출처

Olympiad > 한국정보올림피아드 > 한국정보올림피아드시․도지역본선 > 지역본선 2006 > 중등부 1번

알고리즘 분류

 

M = int(input())
N = int(input())

mn_list = []
for i in range(M, N+1):
    cnt = 0
    
    if i > 1 : #1은 소수가 아니기 때문에 
        for j in range(2, i): #소수 판별기
            if i % j == 0:
                cnt += 1
                break  #소수가 아닐 땐 for문 중단
        if cnt == 0:
            mn_list.append(i)   #소수일 땐 리스트에 항목 append해주기
            
if len(mn_list) > 0 : #리스트에 항목이 있다면 len이 0보다 크다
    print(sum(mn_list)) # 전부 더한 값을 sum 함수로 더해줌
    print(min(mn_list)) #min 함수를 사용해서 리스트 내의 제일 작은 값을 출력해
else:
    print(-1)

 


https://www.acmicpc.net/problem/11653

 

11653번: 소인수분해

첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.

www.acmicpc.net

소인수분해

시간 제한메모리 제한제출정답맞은 사람정답 비율

1 초 256 MB 32333 17427 13748 53.184%

문제

정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오.

입력

첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.

출력

N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다.

예제 입력 1 복사

72

예제 출력 1 복사

2

2

2

3

3

예제 입력 2 복사

3

예제 출력 2 복사

3

예제 입력 3 복사

6

예제 출력 3 복사

2

3

예제 입력 4 복사

2

예제 출력 4 복사

2

예제 입력 5 복사

9991

예제 출력 5 복사

97

103

 

n = int(input())
d = 2
a = 0

for i in range(n):
    if n % d == 0: #n이 2(부터시작)로 나눠지면 if문 아래 시작 (3...계속)
        print(d)
        n = n // d #n은 나머지로 다시 저장해준다.
    elif n % d != 0: #n이 2로 나뉘지 않을 경우 d+1을 해준다 
        d+=1

https://www.acmicpc.net/problem/1929

 

1929번: 소수 구하기

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.

www.acmicpc.net

소수 구하기

시간 제한메모리 제한제출정답맞은 사람정답 비율

2 초 256 MB 110592 31277 22129 27.198%

문제

M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.

출력

한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.

예제 입력 1 복사

3 16

예제 출력 1 복사

3

5

7

11

13

출처

알고리즘 분류

 

<오답>

m , n = map(int,input().split())

for i in range(m,n+1):
    if i >1:
        for j in range(2,i+1):
            if i % j != 0:
                print(i)
                break
            else:
                break

- 출력초과가 뜬다..

- 3에서 16사이의 수를 넣으면 15까지 출력이 되어버림 ㅋㅋㅋㅋ

m , n = map(int,input().split())

for i in range(m,n+1):
    if i >1:
        for j in range(2,i+1):
            if i % j == 0:
                break
            elif j == i-1:
                print(i)
                break
m , n = map(int,input().split())
num_list = []

for i in range(m,n+1):
    if i>1:
        for j in range(2,i):
            if i % j == 0:
                break
            elif j == i-1:
                num_list.append(i)
                break
for i in num_list:
    print(i)

- 둘 다 시간초과가 뜬다 ㅋㅋㅋ ...

- n과 m의 범위에 따라 반복수행해야 하는 부분이 커지기 때문에 시간초과는 당연한 수순.

- 그래서 다른 방법을 찾기로 했다.


 

 

m, n = map(int, input().split())

def isprime(m, n):
  n += 1                          
  prime = [True] * n               
  for i in range(2, int(n**0.5)+1): 
    if prime[i]:                    
      for j in range(2*i, n, i):    
        prime[j] = False

  for i in range(m, n):
    if i > 1 and prime[i] == True: 
      print(i)

isprime(m, n)

- 에라토스테네스의 체라는 분류가 있어서 찾아보니.. 이 방법으로 풀면 될 것 같아서 코드 구현을 진행했다.


https://www.acmicpc.net/problem/4948

 

4948번: 베르트랑 공준

베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼

www.acmicpc.net

베르트랑 공준 출처다국어

한국어   

시간 제한메모리 제한제출정답맞은 사람정답 비율

1 초 256 MB 41309 17024 13995 42.169%

문제

베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다.

이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼프가 1850년에 증명했다.

예를 들어, 10보다 크고, 20보다 작거나 같은 소수는 4개가 있다. (11, 13, 17, 19) 또, 14보다 크고, 28보다 작거나 같은 소수는 3개가 있다. (17,19, 23)

자연수 n이 주어졌을 때, n보다 크고, 2n보다 작거나 같은 소수의 개수를 구하는 프로그램을 작성하시오. 

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 케이스는 n을 포함하는 한 줄로 이루어져 있다.

입력의 마지막에는 0이 주어진다.

출력

각 테스트 케이스에 대해서, n보다 크고, 2n보다 작거나 같은 소수의 개수를 출력한다.

제한

  • 1 ≤ n ≤ 123,456

예제 입력 1 복사

1

10

13

100

1000

10000

100000

0

예제 출력 1 복사

1

4

3

21

135

1033

8392

출처

ICPC > Regionals > Asia Pacific > Japan > Japan Domestic Contest > 2011 Japan Domestic Contest A번

알고리즘 분류

 

def getPrimaryNum_Eratos(N):
    nums = [True] * (N)
    for i in range(2, int(N**0.5) + 1):
        if nums[i] == True:
            for j in range(i+i ,N, i):
                nums[j] = False
    return [i for i in range(2, N) if nums[i] == True]
while True:
    N = int(input())
    if N == 0:
        break
    prime_list = getPrimaryNum_Eratos(2*N + 1)
    answer_list = [num for num in prime_list if num > N]
    print(len(answer_list))

https://www.acmicpc.net/problem/9020

 

9020번: 골드바흐의 추측

1보다 큰 자연수 중에서  1과 자기 자신을 제외한 약수가 없는 자연수를 소수라고 한다. 예를 들어, 5는 1과 5를 제외한 약수가 없기 때문에 소수이다. 하지만, 6은 6 = 2 × 3 이기 때문에 소수가 아

www.acmicpc.net

골드바흐의 추측 출처다국어

한국어   

시간 제한메모리 제한제출정답맞은 사람정답 비율

2 초 256 MB 35416 15127 11818 41.967%

문제

1보다 큰 자연수 중에서  1과 자기 자신을 제외한 약수가 없는 자연수를 소수라고 한다. 예를 들어, 5는 1과 5를 제외한 약수가 없기 때문에 소수이다. 하지만, 6은 6 = 2 × 3 이기 때문에 소수가 아니다.

골드바흐의 추측은 유명한 정수론의 미해결 문제로, 2보다 큰 모든 짝수는 두 소수의 합으로 나타낼 수 있다는 것이다. 이러한 수를 골드바흐 수라고 한다. 또, 짝수를 두 소수의 합으로 나타내는 표현을 그 수의 골드바흐 파티션이라고 한다. 예를 들면, 4 = 2 + 2, 6 = 3 + 3, 8 = 3 + 5, 10 = 5 + 5, 12 = 5 + 7, 14 = 3 + 11, 14 = 7 + 7이다. 10000보다 작거나 같은 모든 짝수 n에 대한 골드바흐 파티션은 존재한다.

2보다 큰 짝수 n이 주어졌을 때, n의 골드바흐 파티션을 출력하는 프로그램을 작성하시오. 만약 가능한 n의 골드바흐 파티션이 여러 가지인 경우에는 두 소수의 차이가 가장 작은 것을 출력한다.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고 짝수 n이 주어진다.

출력

각 테스트 케이스에 대해서 주어진 n의 골드바흐 파티션을 출력한다. 출력하는 소수는 작은 것부터 먼저 출력하며, 공백으로 구분한다.

제한

  • 4 ≤ n ≤ 10,000

예제 입력 1 복사

3

8

10

16

예제 출력 1 복사

3 5

5 5

5 11

출처

ICPC > Regionals > Asia Pacific > Korea > Nationwide Internet Competition > Daejeon Nationalwide Internet Competition 2011 E번

  • 문제를 번역한 사람: baekjoon
  • 문제의 오타를 찾은 사람: dks301

알고리즘 분류

 

# 9020번

def sosu():
    check = [False, False] + [True] * 10000
    
    for i in range(2, 101):
        if check[i] == True:
            for j in range(i + i, 10001, i):
                check[j] = False

    T = int(input())
    for _ in range(T):
        n = int(input())

        A = n // 2
        B = A
        for _ in range(10000):
            if check[A] and check[B]:
                print(A, B)
                break
            A -= 1
            B += 1

sosu()

 


 

https://www.acmicpc.net/problem/1085

 

1085번: 직사각형에서 탈출

한수는 지금 (x, y)에 있다. 직사각형은 각 변이 좌표축에 평행하고, 왼쪽 아래 꼭짓점은 (0, 0), 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램

www.acmicpc.net

직사각형에서 탈출

시간 제한메모리 제한제출정답맞은 사람정답 비율

2 초 128 MB 39655 22973 20474 58.292%

문제

한수는 지금 (x, y)에 있다. 직사각형은 각 변이 좌표축에 평행하고, 왼쪽 아래 꼭짓점은 (0, 0), 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 x, y, w, h가 주어진다.

출력

첫째 줄에 문제의 정답을 출력한다.

제한

  • 1 ≤ w, h ≤ 1,000
  • 1 ≤ x ≤ w-1
  • 1 ≤ y ≤ h-1
  • x, y, w, h는 정수

예제 입력 1 복사

6 2 10 3

예제 출력 1 복사

1

출처

알고리즘 분류

 

<오답>

x, y, w, h = map(int,input().split())

a = w - x
b = h - y

if a > b:
    print(b)
else:
    print(a)

<정답>

x, y, w, h = map(int,input().split())

print(min(x,y,w-x,h-y))

- x, y가 더 짧을 경우를 고려해주지 않았다. 

- 제일 짧은 구간을 찾는 것이기에 찾아서 그만큼 움직여주면 경계로 갈 수 있다!!

 

 


https://www.acmicpc.net/problem/3009

 

3009번: 네 번째 점

세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.

www.acmicpc.net

네 번째 점 출처다국어

한국어   

시간 제한메모리 제한제출정답맞은 사람정답 비율

1 초 128 MB 19286 13766 12509 72.943%

문제

세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.

입력

세 점의 좌표가 한 줄에 하나씩 주어진다. 좌표는 1보다 크거나 같고, 1000보다 작거나 같은 정수이다.

출력

직사각형의 네 번째 점의 좌표를 출력한다.

예제 입력 1 복사

5 5

5 7

7 5

예제 출력 1 복사

7 7

예제 입력 2 복사

30 20

10 10

10 20

예제 출력 2 복사

30 10

x1, y1 = map(int,input().split())
x2, y2 = map(int,input().split())
x3, y3 = map(int,input().split())

x4, y4 = 0, 0
if x1 == x2:
    x4 = x3
elif x1 == x3:
    x4 = x2
elif x2 == x3:
    x4 = x1
    
if y1 == y2:
    y4 = y3
elif y1 == y3:
    y4 = y2
elif y2 == y3:
    y4 = y1

print(x4, y4)

- 위의 문제보다 훨씬 쉬웠다. 

- 패턴을 살펴보면 출력값이 나오려면 x, y가 각각 2개씩 쌍을 이루고 있는 것을 알 수 있다.

- 그렇다면 단순하게 3개의 경우만 생각해서 if문으로 때려박아주면 답이 나온다.

- 다른사람 문제를 보니 list에 넣어주고 count해줘서 count == 1일때 그 수를 출력해주는 형식으로 푸는 사람도 있다.


https://www.acmicpc.net/problem/4153

 

4153번: 직각삼각형

입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.

www.acmicpc.net

직각삼각형 출처다국어

한국어   

시간 제한메모리 제한제출정답맞은 사람정답 비율

1 초 128 MB 29609 15624 14095 52.963%

문제

과거 이집트인들은 각 변들의 길이가 3, 4, 5인 삼각형이 직각 삼각형인것을 알아냈다. 주어진 세변의 길이로 삼각형이 직각인지 아닌지 구분하시오.

입력

입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.

출력

각 입력에 대해 직각 삼각형이 맞다면 "right", 아니라면 "wrong"을 출력한다.

예제 입력 1 복사

6 8 10

25 52 60

5 12 13

0 0 0

예제 출력 1 복사

right

wrong

right

<오답>

while True:
    a, b, c = map(int,input().split())
    d = a+b+c
    if d == 0:
        break
    elif c*c == ((a*a)+(b*b)):
        print('right')
    elif c*c != ((a*a)+(b*b)):
        print('wrong')

- 틀린 정답이라 나온다 ㅎ ..

- 그래서 아예 리스트로 넣어줘서 풀기로 했다. 


<정답>

while True:
    num_list=list(map(int,input().split()))
    num_list.sort()
    
    if sum(num_list) == 0: #만약 리스트의 합이 0일 땐 반복문 종료
        break
    elif num_list[0]**2 + num_list[1]**2 == num_list[2]**2:
        print('right')
    else:
        print('wrong')

- 기본적으로 리스트로 입력받고 sort 함수를 사용해서 내림차순으로 정렬을 한다.

- 입력 받은 리스트의 합이 0이면 종료시킨다.

- 피타고라스 공식을 이용해서 코드를 완성

 


https://www.acmicpc.net/problem/3053

 

3053번: 택시 기하학

첫째 줄에는 유클리드 기하학에서 반지름이 R인 원의 넓이를, 둘째 줄에는 택시 기하학에서 반지름이 R인 원의 넓이를 출력한다. 정답과의 오차는 0.0001까지 허용한다.

www.acmicpc.net

택시 기하학 스페셜 저지출처다국어

한국어   

시간 제한메모리 제한제출정답맞은 사람정답 비율

1 초 128 MB 30765 13143 11441 42.410%

문제

19세기 독일 수학자 헤르만 민코프스키는 비유클리드 기하학 중 택시 기하학을 고안했다.

택시 기하학에서 두 점 T1(x1,y1), T2(x2,y2) 사이의 거리는 다음과 같이 구할 수 있다.

D(T1,T2) = |x1-x2| + |y1-y2|

두 점 사이의 거리를 제외한 나머지 정의는 유클리드 기하학에서의 정의와 같다.

따라서 택시 기하학에서 원의 정의는 유클리드 기하학에서 원의 정의와 같다.

원: 평면 상의 어떤 점에서 거리가 일정한 점들의 집합

반지름 R이 주어졌을 때, 유클리드 기하학에서 원의 넓이와, 택시 기하학에서 원의 넓이를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 반지름 R이 주어진다. R은 10,000보다 작거나 같은 자연수이다.

출력

첫째 줄에는 유클리드 기하학에서 반지름이 R인 원의 넓이를, 둘째 줄에는 택시 기하학에서 반지름이 R인 원의 넓이를 출력한다. 정답과의 오차는 0.0001까지 허용한다.

예제 입력 1 복사

1

예제 출력 1 복사

3.141593

2.000000

예제 입력 2 복사

21

예제 출력 2 복사

1385.442360

882.000000

예제 입력 3 복사

42

예제 출력 3 복사

5541.769441

3528.000000

힌트

유클리드 기하학: 한국어 위키 영문 위키 Wolfram Mathworld

비유클리드 기하학: 한국어 위키 영문 위키 Wolfram Mathworld

택시 기하학: 한국어 위키 영문 위키 Wolfram Mathworld

출처

Contest > Croatian Open Competition in Informatics > COCI 2006/2007 > Contest #1 2번

  • 문제를 번역한 사람: baekjoon
  • 문제의 오타를 찾은 사람: onjo0127

알고리즘 분류

 

 

- 원의 넓이 공식 (반지름)X(반지름)X(원주율 3.14~)

- 택시 기하학 원의 넓이 공식 (반지름)X(반지름)X2

<오답>

r = int(input()) #입력조건 반지름 R이 주어짐

circle = float((r**2)*(3.14))
taxi = float((r**2)*2)

print(circle)
print(taxi)
r = float(input()) #입력조건 반지름 R이 주어짐

circle = float((r**2)*(3.141592))
taxi = float((r**2)*2)

print(f'{circle:.6f}')
print(f'{taxi:.6f}')

- ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 자꾸 idle로 돌리면 답이 이상하게 나와서 요리조리 손봤다..


<정답>

import math
r= float(input()) #입력조건 반지름 R이 주어짐

circle = (r**2)*math.pi
taxi = (r**2)*2


print(f'{circle:.6f}')
print(f'{taxi:.6f}')

- 어이 없지만.. ㅋㅋ math 함수에서 파이를 지원했다 ㅋㅋ ..

- 찾아보니 굳이 자리수 지정을 해주지 않아도 정답으로 인정이 된다고 함.. ㅋ 

import math
r= float(input()) #입력조건 반지름 R이 주어짐

print((r**2)*math.pi)
print((r**2)*2)

- 더 짧게 코드를 구성하고 싶다면 이렇게 따로 변수를 만들어주지 않고 바로 출력에 넣어주면 된다.


https://www.acmicpc.net/problem/1002

 

1002번: 터렛

각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.

www.acmicpc.net

터렛

시간 제한메모리 제한제출정답맞은 사람정답 비율

2 초 128 MB 118086 23445 18462 20.831%

문제

조규현과 백승환은 터렛에 근무하는 직원이다. 하지만 워낙 존재감이 없어서 인구수는 차지하지 않는다. 다음은 조규현과 백승환의 사진이다.

이석원은 조규현과 백승환에게 상대편 마린(류재명)의 위치를 계산하라는 명령을 내렸다. 조규현과 백승환은 각각 자신의 터렛 위치에서 현재 적까지의 거리를 계산했다.

조규현의 좌표 (x1, y1)백승환의 좌표 (x2, y2)가 주어지고, 조규현이 계산한 류재명과의 거리 r1백승환이 계산한 류재명과의 거리 r2가 주어졌을 때, 류재명이 있을 수 있는 좌표의 수를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 이루어져 있다.

한 줄에 x1, y1, r1, x2, y2, r2가 주어진다. x1, y1, x2, y2는 -10,000보다 크거나 같고, 10,000보다 작거나 같은 정수이고, r1, r2는 10,000보다 작거나 같은 자연수이다.

출력

각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.

예제 입력 1 복사

3

0 0 13 40 0 37

0 0 3 0 7 4

1 1 1 1 1 5

예제 출력 1 복사

2

1

0

 

 

<오답>

#1002
import math

t = int(input())

for _ in range(t):
    x1,y1,r1,x2,y2,r2 = map(int,input().split())
    r = math.sqrt((x1-x2)**2 +(y1-y2)**2)
    
    if r == 0 and r1 == r2:
        print(-1)
        
    elif r == r1+r2 or r2 == r+r1:
        print(1)

    elif r> r1+r2:
        print(0)
        
    else:
        print(2)

- 0이 나와야 하는 것이 1이 나와버림. ㅋㅋ 그래서 다시 범위를 설정해주기로 했다.

 

 

 


<정답>

import math
t = int(input())
for i in range(t):
    x1, y1, r1, x2, y2, r2 = map(int, input().split())
    r = math.sqrt((x1-x2)**2 +(y1-y2)**2)
    rs = r1 + r2
    rm = abs(r1 - r2) #절대값을 구해주는 함수
    if r == 0:
        if r1 == r2:
            print(-1)
        else:
            print(0)
    else:
        if r == rs or r == rm:
            print(1)
        elif r < rs and r > rm:
            print(2)
        else:
            print(0)

https://leedakyeong.tistory.com/entry/%EB%B0%B1%EC%A4%80-1002%EB%B2%88-%ED%84%B0%EB%A0%9B-in-python-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%BD%94%EB%93%9C-%EB%B0%8F-%EC%84%A4%EB%AA%85

 

[백준] 1002번 : 터렛 in python 파이썬 코드 및 설명

파이썬으로 백준풀기 : 1002번 터렛 https://www.acmicpc.net/problem/1002 코드 1 2 3 4 5 6 7 8 n = int(input()) for i in range(n) :     x1, y1, r1, x2, y2, r2 = map(int, input().split..

leedakyeong.tistory.com

- 아주 깔끔하고 보기 좋게 설명을 해놓으셨다. 이 티스토리를 가서 정확한 문제 이해를 하면 되겠다.