프로그래밍 언어마다 나눗셈을 하는 방식이 다르다.
이는 각 언어의 설계자마다 나눗셈을 할 때, 반올림을 양수의 무한대로 할지 음수의 무한대로 할지 결정하는데
파이썬과 루비의 같은 경우는 음수의 무한대로 가는 방법을 선택했다.
-
//연산
# 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
-
% 연산
- 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
python의 나눗셈 특성을 이해하고 https://www.acmicpc.net/problem/2884를 풀어보자.
'프로그래밍 언어 > Python' 카테고리의 다른 글
입력받은 숫자를 한자리씩 나누기. (한 줄 출력, list에 저장) (0) | 2020.04.28 |
---|---|
상속, 메소드 오버라이딩, super (0) | 2020.04.21 |
input() 대신 sys.stdin.readline() 사용 (0) | 2020.04.13 |
메서드, 함수 (0) | 2020.04.06 |
클래스(Class), 메서드(method), 인스턴스(Instance), 객체(Object), self (0) | 2020.04.06 |
댓글