정수 곱하기 0이 가능한이유가 궁금합니다.

조회수 756회

안녕하세요. 동전계산프로그램을 만들때 아래코드를 작성하였습니다.

a, b, c = map(int, input().split())
result = a * 10 + b * 50 + c * 100
print(result)

하지만 왜 정수 나누기 0는 오류가나고 정수 곱하기 0이 오류없이 실행되는지 궁금합니다. 예를 들어서 5 나누기 0는 수학적으로는 5 나누기 0/0고 나누기를 곱하기로 바꿀때는 역수를 사용하니까 5 * 0/0라서 결국 5 * 0와 똑같다고 생각합니다. 아니면 0으로 나눈다를 인식하면 반사적으로 오류가 나나요?

2 답변

  • 좋아요

    2

    싫어요
    채택 취소하기

    네. 0으로 나누기 오류는 아주 기계적으로 발생하는 문법상의 오류입니다. 5/0 = (5*0)/0이니까 문제 없이 실행돼야 하는 거 아니냐 싶으실 텐데 그런 차원이 아니고 그냥 숫자/0이 등장하는 순간 인터프리팅/컴파일링 단계가 실패할 거에요.

    그게 왜 그러냐면… 흔히 하는 설명은 5/0이란 5에서 0을 뺄 수 있는 횟수이기 때문에 어떤 답도 정답이 안 된다는 겁니다. 대강 찾아보면, 수학적으로 말해서 5/0이란 곱셈의 역원을 구하는 과정에서 x*0 = 5가 되는 x를 구하는 연산인지라 "정의할 필요가 없고 무의미"하다고 하네요. 이 이상은 대학수학을 공부하신 분들의 전문적인 설명을 기약하기로 하고…

    아무튼 애초에 성립하지 않는 연산인 관계로 대부분의 프로그래밍 언어는 이 연산을 거부하게 되어 있습니다. 사용자가 제수를 임의 지정할 수 있는 나눗셈을 구현하실 때는 무조건 제수 != 0 처리를 해야 한다고 기억하시는 게 좋습니다.

    + 정수 곱하기 0이 가능한 이유는 명확합니다. +5를 0번 더한 것이기 때문에 0이 됩니다. 방금 지은 창고 안에 사과 5개들이 상자가 0개 있다고 하면 그 창고에 사과는 몇 알 있는가? 그건 할 말이 있지요.

    • 감사합니다! noah0508 2021.4.21 09:30
  • 전개한 논리에 오류가 있습니다.

    0은 0/0이 아닙니다. 0/1 또는 0/2 또는 0/3 이죠.

    따라서 0으로 나누기와 0으로 곱하기는 다릅니다. 매우 다릅니다.

    • 생각해보니 역수는 원래숫자 * 역수 = 1이 되어야하는데 0/0 * 0/0 = 1이 성립하지않아서 0/0의 역수는 없네요. noah0508 2021.4.21 10:34

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)