For Programmer

백준 3009번 파이썬 문제풀이(기본수학2 - 네번째 점) 본문

코팅테스트/백준 문제 모음

백준 3009번 파이썬 문제풀이(기본수학2 - 네번째 점)

유지광이 2021. 10. 4. 12:47
728x90

 

1. 배열의 count함수를 사용하지 않은 경우(if문 분기)

x1, y1 = map(int, input().split())
x2, y2 = map(int, input().split())
x3, y3 = map(int, input().split())
x4, y4 = 0, 0

# x축
if x1 == x2:
    x4 = x3
elif x2 == x3:
    x4 = x1
elif x1 == x3:
    x4 = x2

# y축
if y1 == y2:
    y4 = y3
elif y2 == y3:
    y4 = y1
elif y1 == y3:
    y4 = y2

print(x4, y4)

-> 간단하게 설명하면 직사각형은 x좌표 2개가 같고 y좌표 2개가 같다. 그 공식을 이용하여 같은 x좌표가 2개 존재한다면 나머지 남은 하나의 값이 정답 x좌표가 되고 똑같이 y좌표에도 적용이 된다. 

 

하지만 count함수를 사용하면 더 깔끔하게 문제를 해결할 수 있다.

xArray = []
yArray = []
for _ in range(3):
    x, y = map(int, input().split())
    xArray.append(x), yArray.append(y)

for i in range(3):
    if xArray.count(xArray[i]) == 1:
        resultX = xArray[i]
    if yArray.count(yArray[i]) == 1:
        resultY = yArray[i]
print(resultX,resultY)

-> 입력받은 x좌표와 y좌표들을 배열에 집어 놓고 배열에서 개수를 세며 한개만 있는 x좌표와 y좌표를 찾아 그값이 정답이 된다.

 

+ remove 함수를 이용한 해결방법

while True:
    array1 = list(map(int,input().split())) #리스트의 형태로 받는다.
    if array1.count(0) == 3: #0이 3개이면 반복문 탈출
        break
    maxNum = max(array1) #제일 큰값을 따로 빼놓는다.
    array1.remove(maxNum) #큰값을 배열에서 제거한다.
    
  
    if maxNum ** 2 == array1[0] ** 2 + array1[1] ** 2: #피타고라스의 방정식이 성립한다면
        print("right") #right출력
    else: #그렇지않다면
        print("wrong") #wrong출력

-> 오름차순이 생각이 나지 않을 때 사용할 수 있는 좋은 방법이다. 제일 큰값을 따로 변수에 저장해놓은 후 최대값만 배열에서 제거해주면 된다.

728x90
Comments