파이썬으로 알고리즘을 풀다가 문득 라이브러리 함수를 사용하지 않고 구현하는 방법을 생각해봤다.
import math math.ceil(3.4) # 4 math.ceil(-3.4) # -3
위와 같이 math의 ceil을 사용하여 올림을 할 수 있다.
그런데 나눗셈에서 몫을 올림하고 싶을 때 굳이 ceil을 쓰지않고
-(-17//5) # 4
위와 같이 구현할 수 있다.
이는 파이썬에서 // 연산자가 버림이 아닌 내림인 점을 이용하는 것인데,
17//5를 하면 3, -17//5는 -4이다.
그래서 음수로 변환 후 나눗셈을 하고 다시 -을 붙여주면 올림이 된다.
round(3.444) # 3 round(3.464, 1) # 3.5 round(3.464, 2) # 3.46 round(34.4, -1) # 30.0 round(36.4, -1) # 40.0
위와 같이 round(수, 자릿수)를 이용해서 반올림을 할 수 있다.
round를 쓰지 않고 반올림을 하는 방법에 대해 생각해보았는데,
좋은 방법인지는 딱히 모르겠으나 일단 메모해놔야겠다.54321을 백의 자리에서 반올림해서 54000의 결과를 얻고 싶을 때,
각 자릿수의 수를 구해서5 * 10000 + 4 * 1000 + (3 >= 5) * 1000
이렇게 계산을 하면 (3 >= 5)가 참일 때는 1, 거짓일 때는 0이 반환되면서 반올림이 된다.
import math math.floor(3.4) # 3 math.floor(-3.4) # -4
import math math.trunc(3.4) # 3 math.trunc(-3.4) # -3