투 포인터_주의 사항

·2025년 7월 17일
0

백준 알고리즘

목록 보기
197/270

투포인터 조건식

  • 반드시 이러한 형태로 접근해야 한다.
while( 인덱스 조건식 )
{
	// 문제에서 주어지는 내용에 대한 조건식 
    if(cnt > k)
    
    else if(cnt ==k )
    
    else if(cnt < k)

}

조건 처리

  • 투포인터의 경우, 마지막 인덱스에 대해서도 생각해야 한다.
    나는 sum += v[eend]; 이후에 eend++; 식으로 진행하기 때문에
    while(eend < n) 조건식에 마지막 sum 에 대한 확인이 불가하다.

결론

  • v[eend] 를 대입하거나 누적하는 순간에 반드시 index 초과되는지를 확인하자.

관련 문제

  • 백준 2003번 : 수의 합

  • 백준 15565 : 귀여운 라이언.

  • 수들의 합2 .
    :

  • 귀여운 라이언.

vector<int>v(n);
	for (int i = 0; i < n; ++i)
	{
		cin >> v[i];
	}
	int rionCnt = 0;
	int sstart = 0;
	int eend = 0;
	int resultV = v.size();

	while (sstart <= eend && eend <= n)
	{
		if (rionCnt < k)
		{
			if (eend == n)
				break;
			// 늘려야지 
			if (v[eend] == 1)
			{
				rionCnt++;
			}
			eend++;
		}
		else if (rionCnt == k)
		{
			resultV = min(resultV, eend - sstart);
			if (v[sstart] == 1)
				rionCnt--;
			sstart++;
		}
		else if (rionCnt > k)
		{
			if (v[sstart] == 1)
				rionCnt--;
			sstart++;
		}			
	}
profile
🔥🔥🔥

0개의 댓글