본문 바로가기
알고리즘

바킹독 알고리즘 0x02강 기초 코드 작성 요령 2 요약본

by 치우치지않는 2023. 1. 27.

1. C++ 에서 C 의 포인터 역할을 하는 것 == 참조자

참조자는 포인터에도 * 를 붙일 필요가 업시, 인자에만 & 를 붙여서 넘겨주면 그 뒤에는 그냥 지역 변수처럼 써도 되어서 편한 듯!

2. vector 는 크기가 정해져 있지 않은 가변 배열이며, vector 헤더에 선언되어 있다. 

이처럼 개발자가 편하게 사용할 수 있는 다양한 알고리즘과 자료구조가 저장되어 있는 라이브러리를 Standard Template Library 줄여서 STL 이라고 한다. vector 역시 STL 에 구현된 자료구조.

Vector 의 경우 배열이긴 하지만, 구조체처럼, 함수 인자로 보낼 경우 원본에 영향을 줄 수 없다.

STL을 함수 인자로 넘길 경우 생길 수 있는 또 다른 단점! 복사본을 만들기 때문에, 그에 따른 비용이 들어간다. 여기서의 비용은 시간으로, 배열의 길이가 n 이라면 O(n) 의 시간이 걸리게 되는 셈이다.

이러한 문제를 해결하기 위해 참조자 & 를 사용한다. 

이를 통해 복사 과정을 거치지 않아 O(1) 의 시간으로 원하는 결과를 도출할 수 있다.

3. C++ 에서는 printf scanf 대신 cin cout 을 사용한다.

한 가지 주의해야 할 점은, 공백을 포함한 문자열을 입력받을 시 공백부터는 입력받지 못한다. 이 문제를 해결하기 위해서는 getline 함수를 사용한다. 대신, 저장되는 타입은 c++ 의 string 타입이어야 함을 명심하자.

4. 시간 줄이는 팁! 

만약 cin/cout 과 printf/scanf 중 한 개만을 골라서 쓰는 상황이라면, 동기화를 해줄 필요가 없으므로, ios::sync ~~ 문장을 추가하여 시간을 아낄 수 있다.

또 버퍼 이슈를 막기 위해서 cin.tie() 함수가 존재하는데, 온라인 채점 사이트에서는 출력값만으로 정답을 채점하므로 이 함수의 인자에 0 을 넘겨 cin.tie(0) 을 적어줌으로써 시간을 절약할 수 있다.

5. endl 은 절대 쓰지 말기. 줄바꿈이 필요하면, 개행문자 \n을 출력할 것.

6. 코테에서의 코드 작성 팁

    6-1. 코테를 통과하는 것 !== 좋은 코드를 작성하는 것 

좀 더럽더라도, 왜? 라는 질문에 대답하지 못하더라도, 내가 빠르게 짤 수 있는 방법이 있다면, 1초라도 시간을 아낄 수 있다면, 그 방법을 사용하는 것이 맞다.

  6-2. 맨 마지막 공백이나 줄바꿈은 없어도 맞다고 처리되므로, 생각하지 않아도 된다.

  6-3. 코테에서 나오는 코드의 길이는 끽해야 100줄 이내이다. 따라서 디버거 사용은 지양하자. (cout 으로 확인하는 것 추천)

  6-4. 30분 고민해도, 도저히 갈피가 안잡힌다면, 다른 사람 코드를 보고 공부하자.

댓글