IT 프로그래밍/객체지향프로그래밍

반복문 for과 while 명품 C++프로그래밍 예제9번

기술1 2024. 3. 6. 17:58
반응형

반복이 정해졌을 때는 for문이 사용하고 언제 입력할지 미리 알 수 없는 상황에서는 while을 사용해서 하면 됩니다. 

 

이 반복을 몇 번 해야 하는지 말하기 어려운 상황에서는 while을 사용해서 자연스럽게 할 수 있습니다. 물론 모든 for문으로 바꿀 수 있습니다. 

 

하지만 완전히 초보라는 전제하에서 생각하기 쉽게 할 때는 반복의 횟수가 정해져 있을 때는 for, 아닐 때는 while이 생각하기 편합니다. 

 

#include <iostream>

using namespace std;

int main()
{
	int count_odd = 0, sum = 0;
	int tmp;

	while (count_odd < 10){
		cin >> tmp;
		if (tmp % 2 == 1){
			sum += tmp;
			count_odd++;
		}
	}

	cout << "The sum is" << sum << endl;

	return 0;

}

아주 단순한 방식입니다. 홀수가 10개 나오면 그 합을 구해주는 것입니다. while문이 이 조건이 참일 동안 안에 있는 문장을 반복 실행하는 것입니다. 

 

예제9번


처음 풀이

#include <iostream>

using namespace std;

int main()
{
	int odd, sum = 0;
	int tmp;
	cin >> tmp;

	while(tmp != -1)
	{ 
		tmp % 2 == 1;
		sum += tmp;

		cin >> tmp;
	}
	cout << "Your odd sum is :" << sum << endl;

}

계속 cin이 되어야 하는데 방법을 생각을 못해서 이런 식으로 해주었습니다. 이런 식으로 해도 되는 것 같긴 한데 무언가 어색하긴 한데 정답에도 이런 식으로 풀더라고요.

 

두번째 풀이

#include <iostream>

using namespace std;

int main()
{
	int odd, sum = 0;
	int tmp;
	
	while(true)
	{
		cin >> tmp;
		if (tmp == -1)
			break;
		if (tmp % 2 == 1)
			sum += tmp;
	}
	cout << "Your odd sum is :" << sum << endl;

	return 0;
}

break문을 걸어서 해준 풀이도 있습니다. 하지만 이 break문 같은 경우 프로그래밍에서 대체할 수 있으면 대체하는 것이 좋다고 인식이 되어 있는데요. 하지만 이 풀이가 조금 더 깔끔하게 보이긴 해서 이 풀이로 해도 무방할 것 같습니다.

 

break문은 가장 안쪽 while문이나 for문이나 switch문을 빠져나가는 것입니다.  

 

 

문제10번


#include <iostream>

using namespace std;

int main()
{
	int integer = 0;
	int count = 0;
	int sum = 0;
	cin >> integer;
	
	while (true)
	{
		int sum = 0;
		count++;
		sum += integer;
		
		if (sum <= 0)
		{
			break;
		}

		cin >> integer;

	}

	cout << "Count is :" << count << endl;

	return 0;
}

해당 문제를 풀 때 0으로  sum을 초기화를 해야 하는데 0이하의 조건이 달려 있어서 어떻게 해야 하지 고민을 하다가 while을 true로 해놓고 break문을 작성하는 방식으로 해주었습니다. 

 

정석풀이

#include <iostream>

using namespace std;

int main()
{
	int integer = 0;
	int count = 0;
	int sum = 0;
	
	do {
		cin >> integer;
		count++;
		sum += integer;
	} while (sum > 0);
	cout << "Count is :" << count << endl;

	return 0;
}

하지만 더 쉬운 방법이 있었습니다. 바로 do while문을 이용하는 것인데요. do-while문은 조건을 평가하기 전에 루프 본문을 최소한 한 번 실행하는 데 사용하는 문입니다. 루프는 루프의 본문을 적어도 한 번 실행해야 하며 그 후에 조건을 평가하여 반복할지 결정합니다. 

 

do while을 사용해야 하는 경우

1. 최소한 한 번의 루플 본문을 실행해야 하는 경우

2. 사용자 입력을 처리하는 경우

3. 후 처리 작업을 수행하는 경우 

 

이렇듯 do-while 루프는 특정 작업을 반복해서 수행해야 하지만, 그 반복 횟수를 미리 알 수 없거나, 최소한 한 번은 실행해야 하는 상황에 사용됩니다. 

반응형