본문 바로가기

Problem Solving/깨달은 점

modular 연산 이용

a / b 형식에서 몫과 나머지를 이용하는 계산의 경우 3으로 나눈다고 가정했을 때

 

이 식을

int ans = n * m / 3;
if( n * m % 3) ans++;

이렇게 사용할 수 있다.

 

int ans = (n * m + 2) / 3​ 
// ( 나누는 수 - 1 ) 만큼의 값을 더해서 나누면 원하는 값을 한번의 나눗셈 연산으로 구할 수 있다.

 

탐색 문제에 자주 나오는 4방향 direction의 경우

상하좌우 방향을 사용해야하는 경우

이렇게 사용할 수 있다.

int dir = 0; // 방향

dir = ( dir + 1 ) % 4;

// 0, 1, 2, 3, 0, 1, 2, 3... 이 반복된다

 

3, 2, 1, 0 의 순서로 돌려면 다음과 같이 하면 된다.

int dir = 0; // 방향

dir = ( dir + 3 ) % 4;

// 3, 2, 1, 0, 3, 2, 1, 0... 이 반복된다

 

thanks to. mola