백준 3009번 네 번째 점 | [BACKJOON/Python / 3009]

문제링크

 

3009번: 네 번째 점

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

www.acmicpc.net

문제

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

입력

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

출력

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

 

예제 입력 & 출력

풀이

문제를 이해하기 위해 입력받는 변수를 x, y라고 생각하고 입력받은 3개의 x, y 좌표에 점을 찍은 뒤 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾아야 합니다.

 

첫 번째 입력된 예제로 설명해보면 x가 파랑 화살표, y가 검은색 화살표 방향이고 첫번째 예제입력의 값으로 표기해 보면 저런 형태가 됩니다.

직사각형을 만들기 위해서는 x7, y7의 값이 와야 합니다.

 

문제를 해결하는 방법 중에 규칙성을 찾아보면 x와 y에 동일한 값이 최소한 2번은 있어야 평행한 직사각형을 만들 수 있습니다.

 

x = 30 y = 20
x = 10 y = 10
x = 10 y =20

두 번째 입력예제를 살펴보면 현재 x에 30은 한번 10은 두번 입력되었습니다.

y에는 20이 두번 10은 한번 입력되었습니다. 평행한 직사각형을 만들기 위해 다음에 와야 하는 값이 한 번씩만 입력된 x=30, y=10인걸 알 수 있습니다.

 

전체 코드

a=[0]*3; b=[0]*3

for i in range(3):
	a[i],b[i] =map(int, input().split())

c =a[0]^a[1]^a[2]
d = b[0]^b[1]^b[2]
print(c,d)

해당 코드로 다음기능을 구현할 수 있습니다.

먼저 3번만 입력받으면 되기 때문에 0으로 채워진 배열 a, b를 각각 3개 만들어줍니다.

리스트에 아무 값이 없을 때 a [i], b [i]로 접근하려고 하면 list assignment index out of range 에러가 발생합니다. 

코드의 길이는 늘어나지만 빈 리스트를 만들고 append로 값을 넣어도 상관없습니다.

 

이후에 반복문을 사용하여 사용자에게 입력받은 값을 a, b 배열에 넣어줍니다.

 

새로운 c, d변수에는 입력받은 값들 중에 xor연산을 통해 값이 한 번만 입력된 값을 찾아내고 저장하며 print문으로 출력해 줍니다.

xor연산 후 c 변수에 들어가는 값에 대해 자세히 설명하자면 a ^ a에서 a가 5라고 가정하였을 때 5 ^ 5는 0101 ^ 0101으로 계산되며, 이는 결과적으로 0000 값 즉 0이 됩니다. 이후에 어떤 숫자와 0과의 XOR 연산은 항상 그 숫자 자체를 반환하기 때문에 동일하지 않은 값을 찾을 수 있습니다.

Top