1. 제일 짤막한건 cstring 헤더에 있는 memset 활용 (비추천)

 

2. for문 사용해서 값을 하나하나 다 바꾸는 것. 실수할 여지가 적음(추천)

 

3. fill 함수 활용. 실수할 여지가 적고, 코드도 짧음 (추천)

 

int a[21];
int b[21][21];

// 1.memset
memset(a, 0, sizeof a);
memset(b, 0, sizeof b);

// 2.for
for(int i = 0; i < 21; i++)
	a[i] = 0;
for(int i = 0; i < 21; i++)
	for(int j = 0; j < 21; j++)
    	b[i][j] = 0;
        
// 3.fill
fill(a, a+21, 0);
for(int i = 0; i < 21; i++)
	fill(b[i], b[i]+21, 0);
블로그 이미지

Sunullo

겸손함이란, 숙이는게 아니라 확실하게 준비하는 것 분수를 아는 것

,

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

scanf/printf랑 달리

cin/cout 은 ios::sync_with_stdio(0), cin.tie(0) 이라는 두 명령을 실행시켜야 함

 

이걸 안해두면 입출력의 양이 많을 때 시간초과가 발생할 수 있음

 

평소 Cstream과 C++stream이 동기화 되어 있기 때문에

cin/cout만 쓸거면 동기화를 끊는 ios::sync_with_stdio(0)로 명령을 내리는 것

 

but, visual studio2017/2019 등에서는 무조건 동기화를 유지하고 있어서

sync_with_stdio(0)를 무시함

하지만 보통의 채점 서버는 gcc를 사용하므로 분명히 차이가 있다함

 

해서 위의 명령어를 입력했다면

printf 와 cout등을 같이 쓰면 안된다 함

 

cin.tie(0)는 버퍼 관련 명령어이다

 

보통 우리가 입력을 하면 바로바로 화면에 출력되는거 같겠지만,

입력한 것의 일정량을 출력 버퍼 라는 곳에 일정량씩 담아뒀다가

콘솔화면에 옮겨주는 것

입력 버퍼 말고도, 출력 버퍼가 있는데

입력과 출력을 번갈아가면서 쓸 때

콘솔창 안에서 순서가 꼬이는 것을 방지하기 위해

cin 명령을 수행하기 전에 cout버퍼를 비워준다.

근데 온라인 저지 사이트에서는 출력 결과만 보므로 이 동작이 필요 없다.

cin.tie(0) 또는 cin.tie(nullptr) 를 사용해서 그 동작을 생략토록 한다.

블로그 이미지

Sunullo

겸손함이란, 숙이는게 아니라 확실하게 준비하는 것 분수를 아는 것

,

scanf/printf 에서는 C++ string을 사용할 수 없다 함

 

C에서는 char* 을 다루기 때문..

만약 scanf/printf 를 쓰면서도 string을 쓰고 싶다면

일단 char*로 입력을 받고

string으로 형변환해서 원하는 작업을 다 끝낸 후에

c_str() 메소드를 이용해 출력하면 된다 함

 

ex) 공백을 포함한 문자열을 받을 때는 밑에 3가지 예 중에서 getline이 가장 유리

char a1[10];
scanf("%[^\n]", a1);

char a2[10];
gets(a2); // gets 함수는 C++14 이상에서는 제거됨
puts(a2);

string s;
getline(cin, s);
cout << s;

 

블로그 이미지

Sunullo

겸손함이란, 숙이는게 아니라 확실하게 준비하는 것 분수를 아는 것

,

예를들어

func(vector<int> A) 이런식으로 쌩으로 넘기면

매개 원본으로부터 복사하는 비용이 때문에 시간복잡도가 제곱이 되어버린다 함

 

해서 func(vector<int>& A) 이런식으로 참조자를 사용해서

매개인자의 주소를 넘겨서 사용하는 식으로 해야 효율적임

복사 비용이 필요치 않으니ㅇㅇ

블로그 이미지

Sunullo

겸손함이란, 숙이는게 아니라 확실하게 준비하는 것 분수를 아는 것

,