본문 바로가기
프로그래밍 언어/Python

음수의 //연산과 %연산

by Sondho 2020. 4. 12.

프로그래밍 언어마다 나눗셈을 하는 방식이 다르다.

이는 각 언어의 설계자마다 나눗셈을 할 때, 반올림을 양수의 무한대로 할지 음수의 무한대로 할지 결정하는데

파이썬과 루비의 같은 경우는 음수의 무한대로 가는 방법을 선택했다.

 

  • //연산

# python에서 양수의 //연산을 할 경우
print("29/60 :", 29/60)    # 0.48333333333333334
print("29//60 :", 29//60)  # 0

# python에서 음수의 //연산을 할 경우
print("-29/60 :", 29/60)    # -0.48333333333333334
print("-29//60 :", 29//60)  # -1

참고 : https://stackoverflow.com/questions/19517868/integer-division-by-negative-number

 

Integer division by negative number

What should integer division -1 / 5 return? I am totally confused by this behaviour. I think mathematically it should be 0, but python and ruby are returning -1. Why are different languages behaving

stackoverflow.com

 

  • % 연산

  - python의 % 연산자는 항상 분모와 기호가 같은 부호로 반환된다.


먼저 생각해야 하는 건 10/2=5가 무엇을 뜻하는지 생각을 해야 한다. 

10/2라는 말은 2를 이용해서 10을 만들 수 있는 방법에 대해 생각하는 문제이다.

10 = 2+2+2+2+2 다시 말해 2가 5개 있어야 한다는 10이 정확하게 만들어진다는 말이고 10 = 2x5 + 0으로 쓸 있다.

1/24 = 24x0 + 1 (몫 : 0, 나머지 : 1)

-1/24 = 24x(-1) + 23 (몫 : -1, 나머지 : 23)

# python에서 양수의 %연산
print("1/24 :", 1/24)    # 0.041666666666666664
print("1//24 :", 1//24)  # 몫 : 0
print("1%24 :", 1%24)    # 나머지 : 1

# python에서 음수의 %연산
print("-1/24 :", -1/24)   # -0.041666666666666664
print("-1//24 :", -1//24) # 몫 : -1
print("-1%24 :", -1%24)   # 나머지 : 23

 

이는 유용히 쓸 수 있는데

그 예로 day일 전은 무슨 요일인지 구하는 것이다.

day = 8
week = (2-day) % 7

if week == 0:
    print("월요일")
elif week == 1:
    print("화요일")
elif week == 2:
    print("수요일")
elif week == 3:
    print("목요일")
elif week == 4:
    print("금요일")
elif week == 5:
    print("토요일")
elif week == 6:
    print("일요일")
# 실행결과
화요일

참고 : https://stackoverflow.com/questions/3883004/the-modulo-operation-on-negative-numbers-in-python

 

The modulo operation on negative numbers in Python

I've found some strange behaviour in Python regarding negative numbers: >>> -5 % 4 3 Could anyone explain what's going on?

stackoverflow.com

 

 

 

python의 나눗셈 특성을 이해하고 https://www.acmicpc.net/problem/2884를 풀어보자.

 

2884번: 알람 시계

문제 상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모든 방법을 동원해보았지만, 조금만 더 자려는 마음은 그 어떤 것도 없앨 수가 없었다. 이런 상근이를 불쌍하게 보던, 창영이는 자신이 사용하는 방법을 추천해 주었다. 바로 "45분 일찍 알람 설정하기"이다. 이 방법은 단순하다. 원래 설정되어 있는 알람을 45분 앞서는 시간으로 바꾸는 것이다.

www.acmicpc.net

 

 

 

댓글