[python_파이썬]백준_3009번_네 번째 점_풀이

2024. 4. 25. 22:29코드리뷰

728x90
반응형

공부하는허딩크 : https://www.youtube.com/live/X8BZ4tX6OOw?feature=shared

문제를 쉽게 봤다. 그래서 아래와 같이 풀었는데 틀렸네. => 너무 쉽게 생각해서 첫번째 예시만 통과되도록 설계

구하려는 점이 왼쪽 밑, 왼쪽 위, 오른쪽 밑에 있을 경우에는 max로 하면 안됨

구하려는 위치에 따라서 수학적 연산이 달라져야 해서 아래의 코드는 버리자.

import sys
input = sys.stdin.readline

X1, Y1 = map(int, input().split())
X2, Y2 = map(int, input().split())
X3, Y3 = map(int, input().split())
a = [X1, X2, X3]
b = [Y1, Y2, Y3]


print(max(b), max(a))

 

이거 조금 고민되네. 해결 될 듯하면서도 잘 안되네.

 

예제를 잘 살펴보았다. 직사각형임으로 숫자들의 공통요소를 생각해봤는데 아래와 같이 나온다.

(5, 7) / (5, 5) / (7, 5)가 주어질 경우 x = [5, 5, 7] / y = [7, 5, 5] => x에 7이 하나니까 x = 7 / y에 7이 하나니까 y = 7

(1, 2) / (1, 1) / (3, 2)가 주어질 경우 x = [1, 1, 3] / y = [2, 1, 2] => x에 3이 하나니까 x = 3 / y에 1이 하나니까 x = 1

이게 되네? 

 

근데 코드로 어떻게 뽑아낼까... for로 돌려야 하나? count함수가 있었던거 같은데? 딱히 바로 생각 나는 코드는 없다.

고민중...

 

<첫번째 정답 : 일단 생각나는대로 코드를 작성했다. 숫자가 1개인걸 확인하는 방법을 고민하다 count함수를 사용>

import sys
input = sys.stdin.readline

X1, Y1 = map(int, input().split())
X2, Y2 = map(int, input().split())
X3, Y3 = map(int, input().split())
a = [X1, X2, X3]
b = [Y1, Y2, Y3]
answer = []

for i in a:
    if a.count(i) == 1:
        answer.append(i)

for i in b:
    if b.count(i) == 1:
        answer.append(i)
       
print(answer[0], answer[1])

 

<수정할때 오류 코드>

for i, j in zip(a, b):
    if a.count(i) == 1:
        print(i, end = ' ')
    elif b.count(j) == 1:
        print(j)

코드를 줄이려고 고민하다가 이렇게 zip함수를 활용했는데 이건 아닌듯하다. x, y순서도 문제고, 출력도 문제가 됨.

 

오래걸리니까 고민은 pass 다른 사람들 코드 참조

import sys
input = sys.stdin.readline

X = []
Y = []

for _ in range(3):
    A, B = map(int, input().split())
    X.append(A)
    Y.append(B)
for i in range(3):
    if X.count(X[i]) == 1:
        ans_X = X[i]
    if Y.count(Y[i]) == 1:
        ans_Y = Y[i]

print(ans_X, ans_Y)

 

이 코드가 제일 깔끔하다.

728x90
반응형