Problem Solving/깨달은 점 (3) 썸네일형 리스트형 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 .. modular 연산 특징 백준 문제를 풀다보면 값이 커질 경우 모듈러 연산을 하여 작아진 값을 답으로 제출해야 하는 경우가 있다. 덧셈, 뺄셈, 곱셈이 모듈러와 섞였을 때 이전까지는 감만 알고 썼는데 한번 짚어보고 가는것도 좋을 것 같다. 1. (a + b) % M = ((a % M) + (b % M)) % M 2. (a - b) % M = ((a % M) - (b % M)) % M 3. (a * b) % M = ((a % M) * (b % M)) % M 같이 풀어볼 만한 문제 https://www.acmicpc.net/problem/15829 15829번: Hashing APC에 온 것을 환영한다. 만약 여러분이 학교에서 자료구조를 수강했다면 해시 함수에 대해 배웠을 것이다. 해시 함수란 임의의 길이의 입력을 받아서 고정된 길.. [c++] using namespace std;를 쓰는게 왜 나쁜 습관인가요? using namespace std; 보다 std::cout, std::cin 사용을 권장한다. > 설명 당신이 foo와 bar이라는 이름을 가지 두개의 라이브러리를 사용한다 하자. foo에서는 blah()를 bar에서는 quux()를 사용한다고 하자. 그런데 어느날 bar 라이브러리가 업데이트 되어 blah()가 추가 되었다고 하자. 당신이 만약 bar의 blah()를 사용하려 한다면 수정에 꽤 많은 시간을 들여야 할 것이다. 아래와 같이 사용하였다면 수정할 필요가 없었을 것이다. using namespace foo; using namespace bar; foo:blah(); bar:blah(); bar:quux(); 출처 : stackoverflow.com/questions/1452721/why-is.. 이전 1 다음