for문을 통해 뭔가를 할 때 아무 생각없이 작성하기 전에

원하는 값이 가까운 쪽을 유추할 수 있는지 생각해보자.

이걸 느낀 게 최대공약수를 찾는 문제의 함수를 작성해보면서 인데, 

int GetGCD(int a, int b)
{
	int iGCD = 1;
	for (int i = Smaller(a, b); i > 0; --i)

		if (isDividedBy(a, i) && isDividedBy(b, i))
		{
			iGCD = i;
			break;
		}
	return iGCD;
}

이렇게 작성할 때 만약 입력한 두 수 a, b중 작은 수가 큰 수의 약수였다면 바로 브레이크로 빠져나오게 되며

최악의 경우에만 1까지 내려가서 서로소가 된다.

 

반면

for (int i = 1; i <= Smaller(a, b); ++i)
	if (isDividedBy(a, i) && isDividedBy(b, i))
		iGCD = i;

이렇게 작성하면 1부터시작해서 두 수 중 작은 수에 도달할 때까지 전부 다 체크하게 된다.

 


 

for문으로 STL을 순회할 때

 

1. 이터레이터

for(auto iter = v.begin(); iter != end(); ++iter) { ... }

2. 범위기반 for문

for(const auto& n : v) { ... }

3. size()를 이용한 for문

for(int i = 0; i < v.size(); i++)

3번을 사용할 때에

for(size_t i = 0, len = v.size(); i < len; ++i)

처럼 사용하자.