티스토리 뷰

백준

백준 1000 ~ 1002번

ys.k 2023. 1. 5. 01:33

포스팅에 앞서 내용이 틀릴 수도 있으며, 해당 부분 지적은 감사히 받겠습니다.

1000번과 1001번 문제는 사용자에게 한 줄로 A와 B를 입력받아 더한 값과 뺀 값을 출력해주는 프로그램이다.
필자는 파이썬을 사용하여 문제를 풀었다.
1000번과 1001번은 소스코드만 첨부한다.

1000번

A,B = input().split()
A = int(A)
B = int (B)

print(A+B)
________________________________________________________________________

1001번

A, B =input().split() A= int(A)
B= int(B) print(A-B)
_________________________________________________________________________

오랜만에 다시 파이썬을 사용하니 기초문법이 기억나지 않아 1000번 문제 제출만 10번 넘게 했다..
항상 코딩을 할 때 인터넷에서 즉각적으로 코딩한 탓이다.
앞으로는 기초 문법부터 익혀야겠다.

1002번 문제

문제를 읽고나니 gps 시스템이 먼저 생각났다.
간단하게 요약하면
몇 번 반복을 시행할 것인지 인자를 받고, 순서대로 x1 y1 r1 x2 y2 r2를 한꺼번에 입력받는다.
입력받은 좌표에서 규현이와 승환이의 각 재명이와의 거리를 계산하여 재명이가 존재할 수 있는 위치의 수를 출력하는 프로그램이다.
필자는 3가지로 나누어 문제를 풀었다.
1. 외접할 때
2. 좌표가 같을 때
3. 내접할 때

이유는 좌표가 같을 때는 거리가 모두 같으면 -1을 출력해주고 아니라면 겹칠수가 없기에 0을 출력시켜 주었다.
외접할 때는 거리의 값에서 합연산을 해야 하고, 내접할 때는 차연산을 해야 하여 두 가지로 나누었다.

1002번 소스코드

T = int(input())
arr = []

for i in range(T):
x1, y1, r1, x2, y2, r2 = map(int,input().split())
dis = (((x2-x1)**2)+((y2-y1)**2))**(1/2)
if x2==x1 and y2==y1 : #같은좌표
if(r2==r1):
arr.append(-1)
else:
arr.append(0)
elif(dis>=r2+r1): #외접
if(dis < abs(r1+r2)):
arr.append(2)
elif(dis == abs(r1+r2)):
arr.append(1)
elif(dis > abs(r1+r2)):
arr.append(0)
else: #내접
if(dis<abs(r1-r2)):
arr.append(0)
elif(dis == abs(r1-r2)):
arr.append(1)
elif(dis > abs(r1-r2)):
arr.append(2)
for i in arr:
print(i)
_________________________________________________________________________

느낀 점
1. 문제를 푼 후 다른 사람의 코드를 찾아보니 나보다 훨씬 효율적이게 코드를 사용했다. 나도 더 효율적인 코드를 만들어야겠다.

배운 점
1. 한 줄에 여러 변수를 입력하고 싶으면 a, b, c = map(타입, input().split())을 사용하면 된다. (split()은 공백을 기준으로 나눈다.)

시행착오
1. 분명히 맞았을 거라 생각했지만 문제가 풀리지 않아 발생할 수 있는 7가지의 경우의 수를 모두 입력해 보았다.
외접 중 1개의 위치가 존재하는 논리에 오류가 있었고, 해당 부분을 수정하여 문제를 해결할 수 있었다.

댓글