목차
나머지 연산은 프로그래밍에서 정말 많이 사용하는 연산자 입니다. 나머지 연산자(%)에 대해서 아직 잘 모른다면 아래 링크를 통해 확인 바랍니다.
음수를 양수로 나머지 연산하기
나머지 연산자를 활용하지만 아마도 음수의 나머지 연산은 어떻게 동작하는지 생각해 보지 않았을 것입니다. -21이라는 숫자를 5로 나눈 나머지를 구한다고 하겠습니다. 답이 무엇일지 생각해 보시기 바랍니다.
a = -21
b = 5
print(a % b)
a라는 숫자를 5로 나눈 나머지가 정답이 되기 때문에 몫이 -4가 되고 나머지는 -1이라고 생각할 수 있습니다. 하지만 실제 나머지 연산을 통해 나오는 값은 4 입니다.
이 값이 어떻게 나왔을지 생각해 보겠습니다. 파이썬의 나머지 연산의 정의를 보면 다음과 같이 되어 있습니다.
X == (X // Y) * Y + (X % Y)
따라서 위 식에 대입하면 다음과 같습니다.
-21 == (-21 // 5) * 5 + (-21 % 5)
-21 // 5 는 -4가 아닌 -5가 됩니다. // 기호는 나누어진 값을 내림하는 것입니다. 그래서 파이썬 공식 문서에도 // 기호는 floor division이라 되어 있습니다. -21 / 5는 -4.2 입니다. 이 값을 내림하면 -5가 됩니다. 따라서 -5 * 5 는 -25가 되고 (-21 % 5)는 4가 되는 것입니다.
좀 더 이해하기 쉽게 설명하자면 나머지 연산이란 다음의 식에 따릅니다.
A = B * n + r
여기서 n은 B와 곱해서 A를 초과하지 않는 최대의 정수 입니다. 5를 곱해 -21보다 크지 않은 가장 큰 정수는 -5를 곱해 나온 결과인 -25 입니다. -25에서 4를 더하면 -21이 되기 때문에 나머지 연산의 결과는 4가 되는 것입니다.
양수를 음수로 나머지 연산하기
반대의 경우를 생각해 보겠습니다. 21을 -5로 나머지 연산을 하는 경우 입니다.
a = 21
b = -5
print(a % b)
b가 음수이기 때문에 혼란스러울 수 있지만 차근차근 생각하면 이해할 수 있습니다. 21을 -5로 나누면 -4.2가 되고 이 값을 내림하면 -5가 됩니다. -5 * -5는 25가 되고 원래 수인 21이 되기 위해서는 -4를 더해주어야 합니다. 그래서 a % b의 결과는 -4가 됩니다.
좀 더 쉽게 기억하기
음수와 양수를 사용한 나머지 연산은 흔하게 나오는 경우는 아닙니다. 따라서 어렵게 생각할 필요 없이 일단 두 수를 나누어 몫을 구합니다. 그리고 몫이 정수가 아닌 실수라면 내림을 해주어 값을 구합니다. 그리고 원래 값이 되기 위해 더해주어야할 값을 찾으면 쉽게 나머지 연산의 결과를 찾을 수 있습니다.
연습하기
나머지 연산을 연습하기 위해서 아래 문제를 풀어보시기 바랍니다. 문제의 정의와 파이썬의 // 연산과 % 연산이 좀 달라 생각을 해야 풀 수 있습니다.
https://www.acmicpc.net/problem/16428
'알고리즘 설명' 카테고리의 다른 글
교란 순열이란? (0) | 2024.03.22 |
---|---|
한 붓 그리기 가능한 경우 (0) | 2024.03.15 |
2차원 배열 회전하기 (0) | 2024.01.24 |
파이썬의 문자를 숫자로, 숫자를 문자로 바꾸기 (0) | 2023.11.20 |
최소공통조상(LCA) (0) | 2023.10.09 |