이 문제는 좌표 3개의 값을 입력받은 후에 직사각형이 되기 위한 조건을 만족하는 나머지 한 점의 좌표를 구하는 문제이다.
처음에 이 문제를 보고 직사각형 네 점이 항상 만족하는 조건이 무엇인지 생각하고 어떻게 풀어나가야 할 지 고민했었다.
직사각형 4개의 좌표에서 x좌표와 y좌표는 같은 값을 두개씩 가져야 하는 공통점을 발견했다.
예를 들어, 예제 입력 1에서는 (5,5), (5,7), (7,5) 가 입력되었는데 x좌표에서 5는 두개이지만 7은 한번 입력되었으므로 나머지 하나 x좌표는 반드시 7이여야한다. 그리고 y좌표에서도 5는 두개이지만 7은 한번 입력되었으므로 나머지 하나 y좌표는 반드시 7이여야한다는 점이다.
(5,5), (5,7), (7,5) --> (7,7) 이러한 결론이 나오는 것이다.
step1. x좌표와 y좌표를 담을 리스트를 생성해서 입력받은 값들을 각각의 좌표 리스트에 추가해주었다.
x = []
y = []
for i in range(3):
a, b = map(int, input().split())
x.append(a)
y.append(b)
각 x와 y리스트에 이렇게 값이 저장된다.
[5, 5, 7]
[5, 7, 5]
step2. 파이썬의 collections 모듈의 Counter 클래스를 이용해서 각 리스트에 담긴 값들의 빈도수를 계산하였다.
그래서 빈도수가 1인 값을 출력해 주는 방식으로 구현하였다.
cnt_x = Counter(x).most_common()
cnt_y = Counter(y).most_common()
Counter클래스의 most_common메소드를 이용해서 cnt_x, cnt_y의 변수에 각 값들의 빈도수를 저장해주었다.
[(5, 2), (7, 1)]
[(5, 2), (7, 1)]
결과값을 보면 5는 2번 7은 1번 입력되었다는 결과가 나온다.
step3. 조건문을 통해 빈도수 값이 1이면 출력해주도록 하였다.
if cnt_x[1][1] == 1:
print(cnt_x[1][0], end=' ')
if cnt_y[1][1] == 1:
print(cnt_y[1][0])
각좌표의 값은 2개 밖에 없으므로 [1][1]에 담긴 수가 1이면 빈도수 1에 해당하는 숫자를 출력해주도록 하였다.
<전체코드>
import sys
from collections import Counter
input = sys.stdin.readline
x = []
y = []
for i in range(3):
a, b = map(int, input().split())
x.append(a)
y.append(b)
cnt_x = Counter(x).most_common()
cnt_y = Counter(y).most_common()
if cnt_x[1][1] == 1:
print(cnt_x[1][0], end=' ')
if cnt_y[1][1] == 1:
print(cnt_y[1][0])
'백준 문제풀이' 카테고리의 다른 글
[백준 10814번 문제] 나이순 정렬 (0) | 2022.08.13 |
---|---|
[백준 4153번 문제] 직각삼각형 (0) | 2022.08.12 |
[백준 1427번 문제] 소트인사이드 (0) | 2022.08.10 |
[백준 25305번 문제] 커트라인 (0) | 2022.08.09 |
[백준 25304번 문제] 영수증 (0) | 2022.08.08 |