반응형
문제
세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.
입력
세 점의 좌표가 한 줄에 하나씩 주어진다. 좌표는 1보다 크거나 같고, 1000보다 작거나 같은 정수이다.
출력
직사각형의 네 번째 점의 좌표를 출력한다.
예제 입력 1 복사
5 5
5 7
7 5
예제 출력 1 복사
7 7
예제 입력 2 복사
30 20
10 10
10 20
예제 출력 2 복사
30 10
그냥 직사각형이였다면 모르겠는데, 축에 평행한 직사각형이라고 하니 조건이 굉장히 간단해졌다.
축에 평행한 직사각형은
ㅇ ㅇ
ㅇ ㅇ
이런식으로, 같은 가로, 세로축의 점들의 가로, 세로 좌표가 같다.
위의 네 점을 차례대로 (1, 2), (2, 2), (1, 1), (2, 1) 이라고 하고 각 점의 x좌표와 y좌표를 따로 묶어보면 아래와 같다.
(1, 2, 1, 2), (2, 2, 1, 1)
x좌표를 보면 1 두개, 2두개
y좌표를 보면 1 두개, 2두개 가 있는걸 볼 수 있다.
따라서, 축이 평행한 경우 위와 같은 패턴을 이용하여 코드를 짜면 될 것 같다.
import collections
class Fourth:
# 축에 평행한 직사각형을 만들기 위해서는
# 직사각형의 꼭짓점들의 좌표는 x, y값들 각각 n, n, t, t 와 같이 두 값이 각각 2개씩있다.
# 따라서 입력받은 세 좌표값을 x, y 각각의 묶음으로 놓고, 짝이 없는 수가 남은 네 번째 점의 좌표가 될 것.
def solve(self, inputXlist, inputYlist):
#가로, 세로별 특정 좌표별, key value 쌍 만들기
#key : 좌표, value : 갯수
xCount = collections.Counter(inputXlist)
yCount = collections.Counter(inputYlist)
#value값이 1인 key를 추출하기위해 reverse
reverse_xCount = dict(map(reversed, xCount.items()))
reverse_yCount = dict(map(reversed, yCount.items()))
#value값이 1인 key값 추출
x = reverse_xCount.get(1)
y = reverse_yCount.get(1)
return "{} {}".format(x, y)
if __name__ == "__main__":
a = Fourth()
#x좌표, y좌표를 각각 리스트로 전달
inputXlist = []
inputYlist = []
for _ in range(3):
x, y = map(int, input().split())
inputXlist.append(x)
inputYlist.append(y)
print(a.solve(inputXlist, inputYlist))
참고자료
https://seong6496.tistory.com/72
반응형
'코딩테스트 > 알고리즘 문제풀이' 카테고리의 다른 글
[파이썬] 3053 : 택시 기하학 (0) | 2021.07.28 |
---|---|
[파이썬] 4153 : 직각삼각형 (0) | 2021.07.27 |
[파이썬] 1085 : 직사각형에서 탈출 (0) | 2021.07.27 |
[파이썬] 9020 : 골드바흐의 추측 (0) | 2021.07.24 |
[파이썬] 4948 : 베르트랑 공준 (0) | 2021.07.21 |
댓글