2. C++ 입출력(ps관점)

2022. 7. 14. 20:05코딩테스트/C++&자료구조기본

기본 입력

  • 문제를 풀다보면 파일 자체로 입력받는 문제들도 있지만, 백준을 기준으로 볼때 대부분의 문제들은 데이터를 입력받아서 서, 데이터를 가공한후, 데이터를 출력해야합니다. 입력을 하는 경우 `scanf`와 `cin`을 사용하는데, 두가지의 장점이 다르니 한번 알아봅시다.

scanf

  • 장점 : 특정상황과 특정 변수를 지정해서 받을수 있음.
  • 단점 : 받은 데이터의 자료형이 고정됨.

특정변수

코드 변수
%d int(정수형)
%c char(문자형)
%s string (문자열)
%lf double (실수형)
%ld long long (정수형

특정상황

ex) x.xx 와 같은 소수점을 포함한 실수에서 정수부분과 소수부분을 나눠서 받고싶은 경우

#include<iostream>

using namespace std;

int a, b;

int main(){
    scanf("%d.%d", &a,&b);
    printf("정수부분 : %d ", a);
    printf("소수부분 : %d" , b);

    return 0;
}

cin

  • 보편적으로 많이 쓰는 방법
  • 개행문자를 기준으로 받음 ( 띄어쓰기, 줄바꿈 )
    #include<iostream> 
    using namespace std; 
    string a; 
    int main(){
    	cin >> a;
    	cout << a << endl;
    	return 0 ; 
    }

기본출력

출력은 기본적으로 coutprintf를 사용한다.

coutcin과 같이 사용하면 되고 printf와 같은 경우는 특수한 상황에서도 쓰인다.

문자를 아스키 코드로 변환해서 출력

#include<iostream>

using namespace std;

int main(){
    char a;
    scanf("%c", &a);
    printf("%d", a);

    return 0;
}

위의 변수 a 는 문자의 자료형을 가지고 있지만 printf 에서 정수형의 출력을 하므로, 문자 a의 아스키 코드가 출력된다


붙어서 입력받는 경우

우리는 문제를 풀다보면 입력이 붙어 있는 경우가 있습니다.

4  4
1010
1111
0000
1111

와 같은 입력을 하나씩 저장하거나 사용해야 하는 경우가 있습니다.

string으로 변환

#include<iostream>

using namespace std;
int a[50][50];
int n, m;
string s;

int main(){
    cin >> n >> m;
    for( int i = 0; i < n; i++;){
        cin >> s;
        for(int j = 0; j< m; j++){
        a[i][j] = s[j];
        }
    }
    return 0;
}

와 같이 a에 저장하는 방법이 있습니다.

scanf 사용

#include<iostream>

using namespace std;
int a[50][50];
int n, m;

int main(){
    cin >> n >> m;
    for( int i = 0; i < n; i++;){
        for(int j = 0; j< m; j++){
            scanf("%1d", &a[i][j]);
        }
    }
    return 0;
}

이렇게 d 앞에 붙은 1은 한자리의 int만 받겠다는 뜻이 될수 있습니다.


getline

cin은 개행문자 (띄어쓰기)도 구분해서 받습니다. 그렇다면 "안녕하세요. 이곳은 N0.1 코딩이야기 입니다." 와 같은 한문장 전체를 받고싶다면 어떻게 해야 할까요?

#include<iostream>
using namespace std; 
string s;
int main(){
    getline(s, cin);
    return 0;
}

정답코드를 보는 것 처럼 getline을 사용하면 받을수 있습니다.


입력이 계속 주어지는 경우

문제를 풀다보면 보통의 문제들은 입력이 quit 이나 -1을 입력 받으면 그만 받도록 설정되어있거나, 몇개의 입력을 받을지 처음에 받고 그 수만큼 입력을 받는 경우가 대다수 입니다.
하지만 입력을 주다가 안줄때 끝난다고 명시되어 있다면 아래의 코드 두개중 하나를 사용해서 문제를 풀어 나가시면 됩니다
while(scanf("%d ", &n) != EOF)
while ( cin >> n)

'코딩테스트 > C++&자료구조기본' 카테고리의 다른 글

4. 연산자  (0) 2022.07.28
3. 문자열  (0) 2022.07.26
1. C++의 기본 예제와 자료형  (0) 2022.07.08