반복이 정해졌을 때는 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 루프는 특정 작업을 반복해서 수행해야 하지만, 그 반복 횟수를 미리 알 수 없거나, 최소한 한 번은 실행해야 하는 상황에 사용됩니다.
'IT 프로그래밍 > 객체지향프로그래밍' 카테고리의 다른 글
객체지향프로그래밍 그룹 액티비티 5번 문제 해설 (0) | 2024.04.10 |
---|---|
[C++] N개의 정수 중 K와의 차이가 절대값이 작은 정수 출력 프로그램 (0) | 2024.03.10 |
[C++] 1에서 N 사이의 정수들을 모두 종이에 적었을 때 0의 개수 출력 (0) | 2024.03.10 |
[C++] 양의 정수를 이진수로 변환하는 프로그램 (0) | 2024.03.09 |
명품 C++프로그래밍 11, 12 예제 (0) | 2024.03.06 |