Coding test/바킹독님 알고리즘

0x02 기초 코드 작성 요령 2

devRiripong 2023. 12. 18.
반응형

https://blog.encrypted.gg/923

 

[실전 알고리즘] 0x02강 - 기초 코드 작성 요령 II

안녕하세요, 바킹독입니다. 이전 단원에서 오지고 지리게 고통받으셨을텐데 이번에는 훨씬 쉬우니까 걱정을 덜어내시고 마음 편하게 보시면 됩니다. 저 아직 0x18살이니까 급식체 써도 되는거

blog.encrypted.gg

1. STL과 함수 인자

STL vector 변수를 인자로 넘길 때 그냥 넘기면 그냥 복사을 넘기는 것이기 때문에 구조체와 마찬가지로 수정을 해도 원본 값은 바뀌지 않는다. 

STL vector를 인자로 넘기면 복사가 되기 때문에 시간 복잡도가 O(N)이 될 수 있다. 
-> 참조자를 이용해야 한다. 

 

scanf/printf는 C++ string을 처리 할 수 없다. 

scanf/printf를 쓰면서도 C++ string을 활용하고 싶으면 일단 char*으로 입력을 받고 string으로 형 변환을 해서 원하는 작업을 다 끝낸 후에 c_str() 메소드를 이용해 출력해야 한다. 

int main(void)
{ 
	char a[10]; 
	printf("input : "); 
	sacnf("%s", a); 
	string s(a); 
	printf("a is %s\n", a); 
	printf("s is %s\n", s.c_str()); 
}

 

 

scanf, cin  모두 공백 포함 시 공백 앞까지만 입력을 받는다. 

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

string s;
getline(cin, s);

 

 

2. 표준 입출력

cin/cout을 사용할 때 입출력 시간초과를 막기 위해 두 명령을 사용한다.

 std::ios::sync_with_stdio(0);

 -> C stream과 C++ stream의 동기화를 끊는 명령이다.
 -> 이걸 쓰면 cout과 printf를 섞어쓰면 안된다. 
 -> vs에서는 무조건 동기화 유지라 상관 없지만, 채점 서버는 gcc라 신경 써야 한다. 

 

 std::cin.tie(0)

 -> cin 명령을 수행하기 전에 cout 버퍼를 비우지 않도록 하는 코드다.  
 -> 꼬이지 않게 하려고 cin 명령을 하기 전에 cout 버퍼를 비워준다. 하지만 채점 서버에서는 출력 글자만 확인하므로 꼬여도 점수에 상관이 없다.
 -> 그래서 cin 명령 전에 cout 버퍼를 비우지 않아도 된다는 코드를 쓴다. 

cin/cout을 쓸 땐 반드시 저 두 명령을 넣어줘야한다.

 sync_with_stdio를 쓴 이후로는 무조건 cin/cout만 써야 하고, printf/scanf를 쓰면 안된다. 

 

 

endl 쓰지 않는다. endl은 \n와 버퍼를 비우는 기능이다. 채점엔 버퍼를 비울 필요가 없기 때문에 \n을 쓰자. 

 

3. 코드 작성 팁

코딩테스트와 개발은 다르다. 
클린 코드 보다는 더럽게 짜더라도 빨리 짜는게 좋다. 

출력 마지막 공백 혹은 줄바꿈이 있어도 상관 없다. 

디버거를 켜면 꼬이는 느낌을 받을 때가 있어서 디버거는 사용 안하는 것을 권장한다. 그냥 cout 이나 printf로 해도 됨. 근데 쓰는게 나으면 써도 된다.

반응형

'Coding test > 바킹독님 알고리즘' 카테고리의 다른 글

0x01 기초 코드 작성 요령 1  (0) 2023.12.18
0x00 오리엔테이션  (0) 2023.12.05

댓글