천장함수를 바닥함수로 표현하는 법Permalink

n0,k>0n \ge 0, k > 0 라 할 때,

nk\dfrac{n}{k} 에 대해서 nk\left\lfloor \dfrac{n}{k} \right\rfloor는 단순히 코드로 n / k 로 표현할 수 있다.

nk\left\lceil \dfrac{n}{k} \right\rceiln+k1k\left\lfloor \dfrac{n+k-1}{k} \right\rfloor 로 흔히 쓰여 코드에선 (n+k-1)/k 로 얻는 것이 흔하다.

이걸 좀 더 그림과 함께 보자.

image.png

흔히 이 영역에 nn이 있다면 nk\left\lfloor \dfrac{n}{k} \right\rfloor11 이 된다. 이 때의 구간은 [k,2k1][k, 2k-1] 이다.

천장함수(올림 연산)을 보자

nk=2\left\lceil \dfrac{n}{k} \right\rceil=2 가 되려면 구간은 [k+1,2k][k+1,2k] 이고, 다음과 같다.

image.png

여기에 k1k-1 를 더한 구간은 [2k,3k1][2k,3k-1] 로, 올바르게 천장함수의 역할을 수행하게 됨을 알 수 있다.

image.png

따라서 nk=n+k1k\left\lceil \dfrac{n}{k} \right\rceil=\left\lfloor \dfrac{n+k-1}{k} \right\rfloor 이다.

0번째 인덱스부터 K씩 증가하는 수의 포함 개수Permalink

어떤 수가 k1,2k1,3k1,k-1,2k-1,3k-1,\dots 처럼 되면 구간 길이 nn에서 이 수가 표시되는 개수는 nk\left\lfloor \dfrac{n}{k} \right\rfloor 로 깔끔하게 표현된다.

당연히 코드는 n/k 이다.

하지만 어떤 수가 0,k,2k,3k,0, k, 2k, 3k,\dots 처럼 늘어나며 표시된다고 하자.

그럼 [0,n][0, n] 구간에서 위 수가 표시되는 개수는 얼마일까?

n=3kn=3k 라 하자. 그럼 다음과 같이 총 44개가 포함된다.

image.png

이를 천장함수의 표현으로 표현하면 n+1k\left\lceil \dfrac{n+1}{k} \right\rceil 개가 포함된다고 할 수 있다.

이는 바닥함수로 n+kk=nk+1\left\lfloor \dfrac{n+k}{k} \right\rfloor=\left\lfloor \dfrac{n}{k} \right\rfloor+1 이다.

Comments