for문 vs while문
for문의 특징
•
구조화된 반복: 초기화, 조건, 증감을 한 줄에 명시
•
횟수가 정해진 반복에 적합
•
반복 변수의 범위가 for문 블록 내로 제한됨
// for문 기본 구조
for(초기화; 조건; 증감)
{
// 실행할 코드
}
// 예제: 1부터 10까지 출력
for(int i = 1; i <= 10; i++)
{
std::cout << i << " ";
}
C++
복사
while문의 특징
•
단순한 구조: 조건만 확인
•
조건에 따른 반복에 적합
•
무한 루프나 복잡한 조건에서 더 직관적
// while문 기본 구조
while(조건)
{
// 실행할 코드
// 조건 변경 코드 (무한루프 방지)
}
// 예제: 1부터 10까지 출력
int i = 1;
while(i <= 10)
{
std::cout << i << " ";
i++;
}
C++
복사
선택 기준
상황 | 권장 | 이유 |
정확한 반복 횟수가 정해진 경우 | for문 | 초기화, 조건, 증감이 한눈에 보임 |
조건에 따라 반복하는 경우 | while문 | 조건 중심의 단순한 구조 |
무한 루프가 필요한 경우 | while문 | while(true) 형태가 직관적 |
배열/컨테이너 순회 | for문 | 인덱스 관리가 명확 |
while문 활용
기본 while문
#include <iostream>
using namespace std;
int main()
{
int count = 0;
while(count < 5)
{
cout << "카운트: " << count << endl;
count++; // 조건 변경 (중요!)
}
return 0;
}
C++
복사
무한 루프와 break문
무한 루프는 특정 조건까지 계속 실행하고 싶을 때 사용합니다.
#include <iostream>
#include <cstdlib> // rand() 함수를 위해 필요
#include <ctime> // srand() 함수를 위해 필요
using namespace std;
int main()
{
srand(time(0)); // 난수 시드 설정
cout << "10의 배수가 나올 때까지 난수 생성:" << endl;
while(true)
{
// 무한 루프
int num = rand() % 100; // 0~99 범위의 난수
cout << num << " ";
if(num % 10 == 0)
{ // 10의 배수인지 확인
cout << "\n10의 배수 " << num << "이(가) 나왔습니다!" << endl;
break; // 가장 가까운 반복문 탈출
}
}
return 0;
}
C++
복사
break문 주의사항:
•
break는 가장 가까운 반복문만 탈출합니다
•
중첩된 반복문에서는 안쪽 반복문만 탈출합니다
중첩 while문
#include <iostream>
using namespace std;
int main()
{
cout << "3x3 격자 패턴 출력:" << endl;
int row = 0;
while(row < 3)
{
int col = 0;
while(col < 3)
{
cout << "*";
col++;
}
cout << endl; // 행 바꿈
row++;
}
return 0;
}
C++
복사
출력 결과:
***
***
***
Plain Text
복사
실용적인 while문 예제
#include <iostream>
using namespace std;
int main()
{
int number, sum = 0;
cout << "양수를 입력하세요 (0을 입력하면 종료):" << endl;
while(true)
{
cout >> "숫자 입력: ";
cin >> number;
if(number == 0)
{
break; // 0이면 반복 종료
}
if(number > 0)
{
sum += number;
cout << "현재 합계: " << sum << endl;
} else
{
cout << "양수만 입력해주세요!" << endl;
}
}
cout << "최종 합계: " << sum << endl;
return 0;
}
C++
복사
4. switch-case문
switch문의 특징
•
정확한 값 비교에 특화된 조건문
•
if-else if 체인보다 가독성이 좋음
•
컴파일러 최적화로 성능상 유리할 수 있음
기본 구조와 예제
#include <iostream>
using namespace std;
int main() {
int menu;
cout << "메뉴를 선택하세요:" << endl;
cout << "1. 아메리카노" << endl;
cout << "2. 카페라떼" << endl;
cout << "3. 카푸치노" << endl;
cout >> "선택: ";
cin << menu;
switch(menu)
{
case 1:
cout << "아메리카노를 주문하셨습니다. (3,000원)" << endl;
break; // break 없으면 다음 case도 실행됨!
case 2:
cout << "카페라떼를 주문하셨습니다. (4,000원)" << endl;
break;
case 3:
cout << "카푸치노를 주문하셨습니다. (4,500원)" << endl;
break;
default: // 모든 case에 해당하지 않을 때
cout << "잘못된 선택입니다." << endl;
break;
}
return 0;
}
C++
복사
switch vs if-else 비교
#include <iostream>
using namespace std;
int main()
{
int grade = 85;
char letterGrade;
// switch문 사용 (범위 조건에는 부적합)
switch(grade / 10)
{
case 10:
case 9:
letterGrade = 'A';
break;
case 8:
letterGrade = 'B';
break;
case 7:
letterGrade = 'C';
break;
default:
letterGrade = 'F';
}
// if-else 사용 (범위 조건에 적합)
if(grade >= 90)
{
letterGrade = 'A';
}
else if(grade >= 80)
{
letterGrade = 'B';
}
else if(grade >= 70)
{
letterGrade = 'C';
}
else
{
letterGrade = 'F';
}
cout << "성적: " << letterGrade << endl;
return 0;
}
C++
복사
break문의 중요성
#include <iostream>
using namespace std;
int main()
{
int day = 3;
cout << "break 없는 switch (Fall-through):" << endl;
switch(day)
{
case 1:
cout << "월요일" << endl;
case 2:
cout << "화요일" << endl;
case 3:
cout << "수요일" << endl; // 여기서 시작
case 4:
cout << "목요일" << endl; // 이것도 실행됨
case 5:
cout << "금요일" << endl; // 이것도 실행됨
default:
cout << "주말" << endl; // 이것도 실행됨
}
return 0;
}
C++
복사
출력 결과:
break 없는 switch (Fall-through):
수요일
목요일
금요일
주말
Plain Text
복사
핵심 포인트
1.
for문: 횟수가 명확한 반복에 적합
2.
while문: 조건 중심의 반복, 무한 루프에 적합
3.
switch문: 정확한 값 비교, 다중 조건 분기에 적합
4.
break문: 반복문 탈출, switch문에서 fall-through 방지
“강의는 많은데, 왜 나는 아직도 코드를 못 짤까?”
혼자 공부하다 보면 누구나 이런 고민을 하게 됩니다.
•
강의는 다 들었지만 막상 손이 안 움직이고,
•
복습을 하려 해도 무엇을 다시 봐야 할지 모르겠고,
•
질문할 곳도 없고,
•
유튜브는 결국 정답을 따라 치는 것밖에 안 되는 것 같고.
문제는 ‘연습’이 빠졌기 때문입니다.
단순히 강의를 듣는 것만으로는 실력이 늘지 않습니다.
실제 문제를 풀고, 고민하고, 직접 구현해보는 시간이 반드시 필요합니다.
그래서, 얌얌코딩 코칭은 다릅니다.
그냥 가르치지 않습니다.
스스로 설계하고, 코딩할 수 있게 만듭니다.
얌얌코딩 코칭에서는 단순한 예제가 아닌,
스스로 문제를 분석하고 구현해야 하는 연습문제를 제공합니다.
이 연습문제들은 다음과 같은 역량을 키우기 위해 설계되어 있습니다:
•
문제를 스스로 쪼개고 설계하는 힘
•
다양한 조건을 만족시키는 실제 구현 능력
•
기능 단위가 아닌, 프로그램 단위로 사고하는 습관
•
마침내 자신의 힘으로 코드를 끝까지 작성하는 경험
지금 필요한 건 더 많은 강의가 아닙니다.
코드를 스스로 완성해 나가는 훈련,
그것이 지금 실력을 끌어올릴 가장 현실적인 방법입니다.