C++ 알고리즘 기초16 -반복문 심화1, continue & break-

1. 증감식 응용

 

i++하면 i를 1씩 증가시키면서 반복문을 수행하지만, 증감식을 변형해서 i의 값을 원하는대로 증감시킬 수 있다

 

i += 2로 하면 i를 2씩 증가시키면서 반복문을 수행

 

#include <iostream>
using namespace std;

int main() {
    // 여기에 코드를 작성해주세요.

    for (int i = 5; i <= 17; i+=2){
        cout << i << " ";
    }
    return 0;
}
5 7 9 11 13 15 17

 

마찬가지로, 감소하는 증감식도 사용 가능하다.

 

i--하면 i를 1씩 감소시키며 i -= c하면 i를 c씩 감소시키며 반복문을 수행할 것이다.

 

감소시킬때는 조건식에 주의해야한다

 

i <= 5로 습관적으로 할 수 있는데, i = 17부터 i를 1씩 감소시키는데 조건식이 i <= 5이면, 반복문을 수행하지 않을 것이다

 

#include <iostream>
using namespace std;

int main() {
    // 여기에 코드를 작성해주세요.

    for (int i = 17; i >= 5; i--){
        cout << i << " ";
    }
    return 0;
}

 

2. 연습문제

 

두 자연수 a, b를 입력받아 a / b 결과를 소수점 20째자리까지 출력하는 프로그램을 작성해보세요.

 

단순히 나눗셈을 하면 20째자리까지 안나오기 때문에, 실제로 나눗셈을 구현해야한다

 

a / b를 계산했을때, 실제로 어떻게 계산하는지를 생각해보고 그 과정을 그대로 구현하면 된다

 

etc-image-0

 

a를 b로 나눈 몫이 정수부분이고, 이를 먼저 출력한 다음에, 소수점 .을 붙여준다.

 

그리고 a를 b로 나눈 나머지에 대해, 10을 곱한 다음 10a를 b로 나눈 몫이 첫번째 소수부분이고 이를 출력한다.

 

그리고 10a를 b로 나눈 나머지가 다시 a가 되어 위 과정을 20번 반복하면 소수점 20째자리까지 나오게 된다.

 

#include <iostream>
using namespace std;

int main() {
    // 여기에 코드를 작성해주세요.

    int a,b;
    cin >> a >> b;

    int q = a/b;
    int r = a % b;

    cout << q << ".";

    for (int i = 1; i <= 20; i++){

        r *= 10;
        q = r/b;
        cout << q;
        r = r % b;
    }
    return 0;
}

 

3. continue

 

반복문 안에서, 특정 조건을 만족하면 continue 아래부분의 코드는 더 이상 실행하지 않고,

 

현재 반복문을 skip하고, 다음 반복문을 수행하게 된다

 

for (int i = 5; i < 11; i++) {

    코드1

    if (i%2 == 0) {
        코드2 
        continue;
    }
        
    코드3
}

 

위와 같은 경우, i = 5,6,7,8,9,10까지 수행되는데...

 

i = 5일때 코드 1,3이 수행되고

 

i = 6이면 코드 1,2가 수행되고 코드 3은 수행되지 않으며 다음 반복문 i = 7로 넘어간다.

 

i = 8,10에서도 마찬가지로, 코드 1,2가 수행되고 코드 3은 수행되지 않으며 다음 반복문 i = 9,11로 각각 넘어가게 된다

 

 

4. 연습문제

 

정수 a 를 입력받아 1부터 a까지의 수 중 다음 조건을 모두 만족하지 않는 수들을 모두 출력하는 프로그램을 작성해보세요.

  • 짝수이면서 4의 배수가 아닌 수
  • 8로 나눈 몫이 짝수인 수
  • 7로 나눈 나머지가 4보다 작은 수

(짝수이면서 4의 배수가 아니거나) (8로 나눈 몫이 짝수이거나) (7로 나눈 나머지가 4보다 작거나)

 

3가지 조건 중 적어도 하나를 만족하면 continue로 넘기고,

 

그렇지 않으면 출력하면 된다

 

#include <iostream>
using namespace std;

int main() {
    int a;
    cin >> a;

    for (int i = 1; i<= a; i++){

        if ((i % 2 == 0 && i % 4 != 0) || ((i / 8) % 2 == 0) || (i % 7 < 4)) {
            continue;
        } else {
            cout << i << " ";
        }
    }
    return 0;
}

 

5. break

 

조건을 만족하는 경우, 가장 가까이에 있는 반복문을 탈출한다

 

for (int i = 6; i < 101; i++) {
	코드1
		if (i % 5 == 0) {
			코드2
			break;
		}
	코드3
}
코드4

 

위와 같은 경우 i = 6,7,8,9까지는 코드 1,3이 수행되다가,

 

i = 10이 된다면 코드1,2가 수행되고 반복문을 탈출한 다음에 코드4가 수행된다

 

---------------------------------------------------------------------------------------------------------------------------------------------------

 

**참고

 

C++에서는 자바와 달리 변수 초기화를 하지 않으면,

 

자동으로 쓰레기 값을 할당한다고 함

 

C++ 변수 선언 및 초기화 방법 (tistory.com)

 

C++ 변수 선언 및 초기화 방법

프로그램 언어에서 기본적으로 알아가는 것이 변수 선언과 변수 초기화 방법입니다. C++에서 변수 선언과 초기화 방법을 어떻게 하는지 알아보겠습니다. 변수 선언 C언어에서는 변수 선언을 블

ponyozzang.tistory.com

 

 

다음 코드에서 int answer;로 answer를 초기화하지 않으면, answer에 임의의 값이 들어가서

 

의도하지 않은 결과가 나올수 있다.

 

 

#include <iostream>
using namespace std;

int main() {
    // 여기에 코드를 작성해주세요.

    int n;
    cin >> n;

    int answer;

    for (int i = 1; i <= 100; i++){
        answer += i;
        if (answer >= n){
            cout << i;
            break;
        }
    }
    return 0;
}

 

---------------------------------------------------------------------------------------------------------------------------------------------------

 

다음은, n이 1 이하가 될때까지 i = 1,2,3,...으로 나누어서 1 이하가 되면 그때까지 나눈 횟수를 출력하는 코드

 

#include <iostream>
using namespace std;

int main() {
    // 여기에 코드를 작성해주세요.

    int n;
    cin >> n;

    int i = 1;
    int count = 0;

    while (true){

        n /= i;
        count += 1;
        i += 1;
        if(n <= 1){
            cout << count;
            break;
        }
    }
    return 0;
}
728x90