C와 C++에서 제공하는 입출력
구분 | C | C++ |
헤더 | stdio.h | iostream / cstdio |
입력 | scanf | cin / scanf |
출력 | printf | cout / printf |
기본적으로 C++ 코드에서는 C에서 사용하는 함수들을 가져다 쓸 수 있다.
그래서 #include <stdio.h> 를 사용해도 된다.
만약 C++ 표준으로 사용한다면 #include <cstdio>를 사용한다.
이번에는 문자열을 입력받아 처리하는 문제이다.
문자열 처리 편리를 위해 string 클래스를 사용하여 입력받는 코드를 짰는데 string 클래스는 cin 을 사용해서 입력받아야 하기 때문에 다른 변수는 scanf로 입력받고 문자열만 cin으로 받았다.
결과는 시간초과
cin 이 문제였기 때문에 아래 코드 처럼 char cname[100] 을 선언하여 scanf로 입력받고, 다시 string으로 변경하였다.
1
2
3
|
char cname[100];
scanf("%s", cname);
string name = cname;
|
cs |
시간 초과가 해결되고 문제가 풀렸다
또다른 해결 방법은 입출력 버퍼의 동기화를 해제하는것이다. 아래 코드를 입출력 받기전에 추가하자
1
2
3
|
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
|
cs |
설명 참조: https://ansohxxn.github.io/cpp/iospeed/
두가지 방법을 모두 해보니 동기화 해제후 cin/cout 만 사용하면 실행시간이 160ms 으로 scanf/printf 를 사용한 192ms 보다 빠르긴 하다. 하지만 사용자가 입출력 동기화를 맞춰줘야하는 것 같다. 이해도가 떨어지는 나로썬 일단 printf, scanf만 사용하는것이 정신건강에 좋을 것 같다.
그런데 왜 cin/cout 사용으로 char배열을 사용 안했는데 메모리는 더 잡아먹은 걸까? 추측은.. string 클래스로 입력받게 하면 메모리를 미리 잡아두는게 있지 않을까 싶다.
전체 코드는 아래 링크를 참고하자
'Technology > Problem Solving' 카테고리의 다른 글
[PS]백준 N-Queen 문제 풀이모음 (7) | 2022.07.31 |
---|---|
[PS]알고리즘 강의 (0) | 2022.06.14 |
[PS]공부진도 (0) | 2022.06.11 |
[PS]맞왜틀 시리즈6 범위 (3) | 2022.06.08 |
[PS]맞왜틀 시리즈5 변수 범위 (2) | 2022.05.21 |