Coding Test/Python (백준, 프로그래머스)

[백준] 3009번 네 번째 점 - Python(파이썬)

ʕ민지ʔ 2024. 2. 10. 17:20

 

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 을 사용하는 방식을 잘 떠올리지 못하는 것 같아서 정리해둔다!!

위 풀이의 메모리와 시간 소요는 아래와 같았다.

 

화이팅화이팅