https://www.acmicpc.net/problem/3009
3009번: 네 번째 점
세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.
www.acmicpc.net
문제
세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.
입력
세 점의 좌표가 한 줄에 하나씩 주어진다. 좌표는 1보다 크거나 같고, 1000보다 작거나 같은 정수이다.
출력
직사각형의 네 번째 점의 좌표를 출력한다.
예제 입력 1
5 5
5 7
7 5
예제 출력 1
7 7
예제 입력 2
30 20
10 10
10 20
예제 출력 2
30 10
풀이과정
점의 좌표를 세 번 입력받고, x좌표와 y좌표 각각 1번만 나온 값이 나머지 좌표의 값이 되기 때문에 이를 구하면 된다는 생각은 들었지만 뭔가 깔끔한 풀이가 생각이 나질 않았다.. 그렇게 나온 풀이..ㅋㅋㅋ
arr = []
for _ in range(3):
arr.append(list(map(int, input().split())))
res_x, res_y = arr[0][0], arr[0][1]
if res_x == arr[1][0]:
res_x = arr[2][0]
elif res_x == arr[2][0]:
res_x = arr[1][0]
if res_y == arr[1][1]:
res_y = arr[2][1]
elif res_y == arr[2][1]:
res_y = arr[1][1]
print(res_x, res_y)
값을 배열로 입력받은 후에, 그냥 일일이 비교해줬다ㅎㅎ
차례대로 들어온 x의 값을 x1, x2, x3이라고 한다면,
x1 == x2인 경우 -> x3
x1 == x3인 경우 -> x2
x2 == x3인 경우 -> x1
y도 동일하게 확인하여 결과를 출력했다.
메모리와 시간 소요는 아래와 같았다.
뭐 크게 나쁘지도,, 좋지도,,
그래서 조금 더 깔끔한 풀이를 찾아봤다.
x=[]
y=[]
for i in range(3):
a,b=map(int,input().split())
if a in x:
x.remove(a)
else:
x.append(a)
if b in y:
y.remove(b)
else:
y.append(b)
print(x[0],y[0])
x와 y를 각각 배열에 넣어주고, 입력받은 값이 배열 안에 있으면 그 값을 배열에서 삭제하고 없으면 추가한다.
이렇게 배열에서 중복되는 값을 제거하여 유일한 값(즉, 한 번만 나와서 문제의 정답이 되는 값)만 배열에 남기 때문에 이를 출력한다.
이 문제 자체가 엄청 어려운 건 아니었지만 내가 배열에서 in 을 사용하는 방식을 잘 떠올리지 못하는 것 같아서 정리해둔다!!
위 풀이의 메모리와 시간 소요는 아래와 같았다.
화이팅화이팅