더북(TheBook)

2. 그중 정수 교점만 따로 변수로 저장합니다.

1번의 결괏값이 정수인지 검사하고, 정수라면 해당 교점을 변수로 만들어 저장합니다.

if x == int(x) and y == int(y):
    x = int(x)
    y = int(y)
    pos.append([x, y])

값을 비교할 때는 int()로 좌표를 형 변환해야 합니다. 나누기를 해서 만들어진 실수1는 부동소수점 표시의 한계로 인해 소수점끼리 더하면 값이 바뀌는데, 이 상황에서 값을 비교하면 예상과는 다른 결과가 나올 수 있기 때문입니다.

예) 0.1 + 0.2 == 0.3 #False

만약 float끼리 적극적으로 계산해서 두 값을 비교하는 문제가 나왔다면 내장 라이브러리인 fractions이나 decimal 라이브러리를 사용해 오차를 제거하여 완벽한 상태에서 값을 비교해야 합니다. 또한, 정수로 형을 변환할 때 소수점이 버려지는데 이 수치로 인해 예상과는 다른 결과가 나오는지도 확인해야 합니다. 다행스럽게도 문제에서 소수점이 존재하는 교점을 구할 필요가 없으므로 int() 함수만 사용해서 값을 정수로 만들어도 됩니다. 어떤 방법이든 형 변환이 발생한다면 꼭 추가로 보정해야 하는 사항이 있는지 체크하고 넘어가세요.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.