본문 바로가기

Notice
Recent Posts
Recent Comments
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
더보기
Archives
관리 메뉴

(종만북) 대회용 좋은 코드를 짜기 위한 원칙 본문

종만북 부수기

(종만북) 대회용 좋은 코드를 짜기 위한 원칙

알광(Algwang) 2018. 11. 30. 18:07

* 간결한 코드를 작성하기
 - 코드가 짧을수록 오타나 단순한 버그가 생길 우려가 줄어들고 디버깅도 쉬워짐

* 적극적으로 코드 재사용하기
 - 같은 코드가 세 번 이상 등장한다면 함수로 분리해서 재사용하자 !
 - 간결한 코드에 익숙해지면 비슷한 코드를 짤 때 처음부터 간결하게 코딩할 수 있게 됨

* 표준 라이브러리 공부하기
 - 시간 제한이 있는 프로그래밍 대회에서는 많이 사용되고 검증된 라이브러리등을 사용하는 것이 좋다.
- 다른 사람이 이해하기도 쉬워짐

나중에 스스로 알고리즘을 만들어보고 싶다는 꿈이 있어서 자료구조나 알고리즘을 직접 구현해보는 연습을 하고 사용도 하지만 1분 1초가 급한 대회에서는 사용해도 좋을 듯 하다.

* 항상 같은 형태로 프로그램을 작성하기
 - 도구가 아닌 문제에 집중할 수 있도록 하기 위한 방법
 - 같은 코드를 더 좋게 작성하는 방법을 찾지 말라는 뜻이 아님 !
 - 코드 검증은 상당히 어려운 작업이기 때문에 대회에서 사용할 익숙하고 검증된 형태를 습관화하라는     뜻

* 일관적이고 명료한 명명법 사용하기


1
2
3
int a, b;
int arr[100][100];
int count;
cs


보다는


1
2
3
int start, end;
int map[100][100];
int nodeCount;
cs


와 같이 하라는 뜻인건가..?
 - 사용하는 언어의 표준 라이브러리에서 사용하는 명명 규약을 익히는 것도 좋다.
bool judge보다는 bool isInsideCircle처럼 명명을 모호하지 않고 확실하게 !
[ 지금 가장 고쳐야할 부분 ]

* 모든 자료를 정규화해서 저장하기
 - 예를 들어 유리수를 저장하는 클래스를 만들 때, 6/9와 2/3은 같다 !
 - 불필요한 중복을 피하기 위해 2/3으로 저장하는 것이 좋다.
 - 다른 예는 각도 ! ( 30˚ = -330˚ )
 - 정규화는 자료를 입력받자마자 하는 것이 좋다 !!

* 코드와 데이터를 분리하기
 - ex) 월을 숫자가 아닌 영어로 출력해야하는 경우
 - if문의 연속이 아닌 const string monthName[]을 통해 정의해놓으면 쉽다.
 - 또 다른 예로 체스판에서 말이 움직일 수 있는 경우 또한 knightDx, knightDy 배열을 통해서
   정의해준다면 쉽게 풀 수 있다.
 - 이런 방식으로 정의해주지 않아서 코드가 쓸데없이 길어졌던 경우가 많으므로 고쳐야할 부분 !



'종만북 부수기' 카테고리의 다른 글

(종만북) 알고리즘 공부 시작 !  (0) 2018.11.30
Comments