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를 계산했을때, 실제로 어떻게 계산하는지를 생각해보고 그 과정을 그대로 구현하면 된다

 

 

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;
}
TAGS.

Comments