3. 반복문

dbswjd·2023년 5월 18일
0

c++

목록 보기
4/5

while문

입력 횟수만큼 입력받을 때

int n;
cin>>n;
while(n--){
	//statement
}

while문이 끝나면 n의 값이 -1이 된다
그러므로 이를 유지하고 싶다면 while문 전에 n값을 다른 상수에 저장해두기

배열 동적 할당

int n;
cin>>n;
int *arr = new int[n];

new를 통해 pointer로 해주어야 함

입출력 속도 개선

  1. 추가해줄 코드
ios_base::sync_with_stdio(false);
cin.tie(NULL);
  1. endl보다 \n을 사용하기
  • cin.tie(NULL)의 효과
    : 입출력 묶음을 풀어준다.
    입력과 출력을 한 반복문 안에서 받을 때 입출력 묶음이 묶여있다면 입력 - 출력 - 입력 - 출력을 반복하지만
    입출력 묶음을 풀어준다면 입력 입력 출력 출력을 해줄 수 있게 됨
    -> 매번 출력을 flush 하지 않고 나중에 한 번에 비움

입출력 예제

  1. 속도 빠른 버전
#include <iostream>
using namespace  std;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int i,n, a, b;
    cin>>n;
    for(i=1; i<=n; i++){
        cin>>a>>b;
        cout<<"Case #"<<i<<": "<<a+b<<"\n";
    }
    return 0;
}

3
1 1
2 3
3 4
Case #1: 2
Case #2: 5
Case #3: 7

#include <iostream>
using namespace std;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int n,a,b;
    cin>>n;
    while(n--){
        cin>>a>>b;
        int i=1;
        cout<<"Case #"<<i<<": "<<a<<" + "<<b<<" = "<<a+b<<"\n";
        i++;
    }
    return 0;
}

그러나 틀린 코드
i++을 저렇게 할 시 적용이 되지 않는다..
i는 반복문 밖에서 1로 선언 및 1로 초기화해주어야 한다. 그렇지 않으면 매 반복문마다 초기화되어서 1로 뜰 수밖에 없는 것

#include <iostream>
using namespace std;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int n,a,b;
    int i=1;
    cin>>n;
    while(n--){
        cin>>a>>b;
        cout<<"Case #"<<i<<": "<<a<<" + "<<b<<" = "<<a+b<<"\n";
        i++;
    }
    return 0;
}

이렇게 해주는 것이 맞다.
for문과 while문을 이렇게 활용할 수도 있음

  1. 0 입력 시 탈출
#include <iostream>
using namespace std;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int a,b;
//    do {
//        cin>>a>>b;
//        cout<<a+b;
//    }while(a==0&&b==0);
    while(true){
        cin>>a>>b;
        if(a==0&&b==0) break;
        cout<<a+b<<"\n";
    }
    return 0;
}

저 do-while문으로는 작동하지 않음
for문에서는 break를 어디에 거는지 잘 확인해야 함

ref
https://velog.io/@gogori6565/BOJ-cin.tieNULL%EA%B3%BC-iosbasesyncwithstdiofalse

0개의 댓글