개발

정처기 실기 단골문제, 파이썬 몫 나누기, 나머지 나누기 (/, //, %)

대부분의 프로그래밍 관련 문제에서 단골로 나오는 연산자가 바로 몫 나누기(/, 슬래쉬)와 나머지 나누기(%, 퍼센트)다.
그 중 단골 연산자는 나머지 나누기(%)로 현업에서는 거의 쓰이지 않지만 프로그래밍 문제로는 정말 단골 연산자이다.

프로그래밍에서의 나누기

대부분의 C, C++, Java등에서도 이 나머지 나누기는 예전부터 언어별 차이없이 제공되는 연산자이므로 사람들 뇌리에 쉽게 박혀있다보니 자주나오는거일수도 있겠다.

그리고 다음으로 자주나오는게 몫 나누기(/)이다.
거창하게 몫나누기라고해봤자 우리가 일반적으로 나누기라 하는 기본연산을 지칭하는것이다.

쉽게말해서 7을 2로 나누면 통상적으론 3.5라고 대답하겠지만 여기서 3 부분이 몫이고 0.5부분이 나머지라고 볼 수 있다.
프로그래밍에선 이 부분을 분리해서 다루는데, 그 이유중에 하나가 숫자를 담는 변수의 자료형이 대부분 정수(Integer)이기 때문이다.

* 정수: 소수점을 사용하지않고 나타내는 숫자. 1, 2, 3... 등
* 실수: 소수점을 사용해 나타내는 숫자. 1.5, 3.14, 5.55555... 등

즉 대부분의 프로그래밍 언어에서 정수 7를 2로 나누면 실수 3.5가 나오는게 아니라 정수 3이 프로그램 결과로 나오게 된다.

int number = 7;
print(%d, number / 2); # 3이 출력된다Copy

반대로 이를 소수점이 있는 실수로 표현하고 싶으면 int 자료형이아닌 float, double 등 실수를 처리할 수 있는 자료형을 선언 후 연산을 하면 소수점이 있는 결과가 표기가된다.

float number = 7;
print(%f, number / 2) # 3.5 출력Copy

이런 경우 그냥 '나누기'를 실행한거지 정수형 '몫'을 구하는 나누기를 실행했다는 의미는 아닐것이다.


파이썬에서 나누기

그러면 파이썬에선 이런 나누기는 어떻게 제공될까?
를 알아보기이전에 파이썬에서의 변수 선언에 대해 먼저 이야기해보자.

파이썬을 써본사람은 알다시피 파이썬은 변수 선언시 별도의 자료형을 선언하지 않는다.
알아서 넣어지는 데이터에따라 자료형을 자동으로 생성해주는 동적 타이핑 방식을 채택했다.

그래서 파이썬의 경우에는 아래와 같이 숫자의 나눗셈을 실시하면 의도와 다르게 결과가 출력된다.

print(7 / 2) # 출력: 3.5Copy

프로그래밍좀 해봣던 사람이면 당연히 3으로 나와야하는 결과가 실수형으로 3.5로 나오는 상황이나오는것이다.
이는 파이썬에서 나누기 연산을 기본적으로 '실수'로 처리하기 때문이다.
그러므로 우리가 7 나누기 2를 했을때 3이 나오는 결과를 얻으려면 실제 나누기가아닌 '몫을 구하는 나누기'로 처리해야하는 상황이 필요한것이다.

이를위해 파이썬에선 몫 나누기 연산자를 별도로 아래와 같이 지원한다.

몫 나누기 (//)

print(7 // 2)   # 출력: 3
print(-7 // 2)  # 출력: -4  (버림 방향으로 간다)Copy

슬슬 이해가 되려는 찰나, 갑자기 음수 나누기값이 -3이 아님에 당황했을것이다.
이건또 왜이러냐면 파이썬의 경우에는 몫 나누기(//)를 실행할때 일단 실수로 나눗셈을 계산하고 이후의 나머지 부분을 내림처리(floor)를 하기때문이다.
즉 3.5의 내림처리는 3인거고, -3.5의 내림처리는 -4가 되는 것이다.


나머지 나누기 (%)

다행이 나머지 나누기는 타 언어와 같이 별 특이점은 없다.

print(7 % 3)   # 출력: 1
print(-7 % 3)  # 출력: 2Copy

좀 특이한점이 있다면 음수의 나머지 나누기의 결과값이 무조건 양수로 제공된다는 점이다.
-7을 3으로 나눈다면 몫 -2와 나머지 -0.5로 결과가 나올텐데, 파이썬의 경우 이 나머지를 무조건 양수로 치환(abs)해서 결과로써 제공한다.


몫과 나누기 동시에 얻는법

뭐 이럴일은 거의없겠다만, 몫과 나머지를 동시에 얻는법도 존재한다.

print(divmod(7, 3))    # 출력: (2, 1)
print(divmod(-7, 3))   # 출력: (-3, 2)Copy

연산자까지는 아니고 특정 함수를 사용해서 몫과 나머지를 튜플형식의 데이터로 반환받을 수 있다.


문제

다음 파이썬 코드의 출력결과를 적으시오.
print(-7 // 2)
print(7 % 2)
print(-7 % 2)Copy


해설

1.    -7 // 2
-7 ÷ 2 = -3.5 나눗셈 처리를 먼저 한후, floor 방향으로 내림 → -4 출력

2.    7 % 2
7을 2로 나눈 나머지를 반환함 -> 1 출력

3.    -7 % 2
-7을 2로 나눈 나머지를 반환함, 나머지는 -1이지만 파이썬에서는 나머지를 양수로 치환함. -> 1 출력

결과: -411

#Python
0 개의 댓글
개발 카테고리의 다른 글
04/29
2025 정처기 실기에서 나온 파이썬 리스트 컴프리헨션 (리스트 for문 + if문 축약 생성)
정처기 실기 코딩 문제는 날이가면갈수록 난이도가 우주를 돌파하고있는것 같다.매번 기존 기출문제를 상회하는 방식의 코드를 보여주면서 전공자든 비전공자든 헷갈리게 만드는 요소만 오지게 나오는것같다. 이번에 봣던 시험에서는 특정 리스트의 for문과 if문을 한줄로 축약해 표현하는 파이썬의 리스트 컴프리헨션(List...
04/29
파이썬 리스트 슬라이싱 [:], [::] 정리 (콜론, 더블콜론)
난 실무에 파이썬을 잘 이용하지는 않지만 정보처리기사를 준비하는도중 파이썬 관련 문법이 몇번 제법 나와서 알게된 사항이다. 개인적으로 공부도하고 정리도 할겸 포스팅을 남겨본다. 파이썬 리스트 슬라이싱리스트 슬라이싱(List Slicing)이라고 파이썬에서 리스트를 다룰때 사용하는 선택자 기법이 있다.우리가 흔히...
자바스크립트로 만드는 유저 조회수 카운터 기능
04/24
자바스크립트로 만드는 유저 조회수 카운터 기능
내 사이트 조회수는 469인데애드센스 조회수는 117... 뭐냐 이거! 사이트를 운영하는 입장에서 사이트의 활성도를 보는 가장 기본적인 척도는 바로 '조회수'이다.말그대로 조회수는 내 사이트의 특정 페이지의 조회가 얼마나 되었는지 보여주는 정량적 수치로 '방문자수'와 더불어 중요한 지표로 사용된다. 방문자수의 경우...
×