Technology/Problem Solving

[PS] cin cout 사용시 주의

문베디드 2022. 6. 19. 18:44

문제: 백준 1620번 나는야 포켓몬 마스터 이다솜

 

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 클래스로 입력받게 하면 메모리를 미리 잡아두는게 있지 않을까 싶다.

 

전체 코드는 아래 링크를 참고하자

scanf / printf 문제 풀이

cin / cout 문제 풀이

다른분의 문제 풀이

'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