안 쓰던 블로그

음수를 나머지 연산하려면 어떻게 해야 할까? 본문

알고리즘/Algorithm

음수를 나머지 연산하려면 어떻게 해야 할까?

proqk 2019. 7. 6. 15:16
반응형

음수를 나머지 연산하려면 어떻게 해야 할까요?

 

질문에 앞에 먼저 음수 나눗셈을 해봅시다. 10/-2를 한다고 했을 때, 10/-2 ‘-2를 몇 번 더해야(빼야) 10이 나올까?’와 같은 의미입니다. 10 -(-2) -(-2) -(-2) -(-2) -(-2) 라고 쓸 수 있는데, 횟수로는 5번이지만 -2를 더하면 안 되고 빼야 되기 때문에 10/-2 -5입니다. 같은 의미로 10=-2*-5 ‘10 -2 -5번 더한() 수다라고 할 수 있겠네요.

 

그러면 이제 나머지를 구해봅시다. 7/-3의 몫은 -2입니다. 그러면 나머지는? -(-3)-(-3)을 한 뒤 남은 수는 1이니까 나머지는 1입니다. -7/-3은 어떻게 나올까요? -7을 만들기 위해서는 -3-3-3을 해야 합니다. 몫은 3이고 -9가 나왔으니까 나머지는 2가 나옵니다. 이런 계산을 어떻게 구현해야 할까요?

 

사실 음수 나눗셈의 의미는 양수처럼 명확히 정의되지 않아서 언어에 따라 결과가 다르게 나온다고 합니다. 예를 들어 C언어는 기본적으로 버림을 하고(5/2 float 2.5) 음수 나머지도 허용합니다. 그래서 -7=3*-2 – 1로 봅니다. 반면 파이썬은 기본적으로 내림을 하고(5/2 float 2.0) 양수 나머지만 허용합니다. 그래서 -7=3*-3 + 2로 봅니다. (참고: https://stackoverflow.com/questions/19517868/integer-division-by-negative-number) 만약 C언어로 음수 나눗셈을 구현하고자 한다면 파이썬처럼 나누고 내림차순 하는 과정을 거쳐서 나머지를 양수로 만들면 되지 않을까 생각합니다.

 

 

관련 문제- 백준 16428 A/B - 3

https://www.acmicpc.net/problem/16428

 

16428번: A/B - 3

첫째 줄에 A와 B가 주어진다. (-1010000 ≤ A, B ≤ 1010000, B ≠ 0)

www.acmicpc.net

 

반응형
Comments