티스토리 뷰
#. 좋은 코드를 작성하기 위한 원칙
ㅇ 간결한 코드 작성하기
- 가장 간결한 코드, 읽기 쉬운 코드 작성
ㅇ 적극적으로 코드 재사용하기
- 코드의 모듈화
- 코드가 세 번 이상 등장한다면 항상 해당 코드를 함수로 분리해 재사용한다는 기본 원칙을 세우기
- 항상 코드를 깔끔하게 작성하고 유지하는 데 신경을 써보기
- 간결한 코드가 디버깅 시간에 엄청난 차이를 가져다 줌
- 이상적인 세계에서는 한 함수가 두 가지 이상의 일을 해서는 안 된다고 말함
ㅇ 표준 라이브러리 공부하기
- 표준 라이브러리의 사용
- 언어의 문자열, 동적 배열, 스택, 큐, 리슽, 딕셔너리 등의 자료 구조, 정렬 등의 표준 알고리즘 구현 사용법을 반드시 잘 알아 두기
ㅇ 항상 같은 형태로 프로그램 작성하기
ㅇ 일관적이고 명료한 명명법 사용하기
- 사용하는 언어의 표준 라이브러리에서 사용하는 명명규약을 익히기
ㅇ 모든 자료를 정규화해서 저장
- 같은 자료를 두 가지 형태로 저정하지 않는 것
- 프로그램이 자료를 입력받거나 계산하자마자 곧장 이루어져야 함
- ex) 유리수를 항상 약분하여 기약 분수로 표현 or 시간대 조합 or 문자열 인코딩
ㅇ 코드와 데이터 분리하기
1 2 3 4 5 6 | static String[] monthName = {"January", "February", ... "December"}; static int[] daysIn = {13, 28, ... 31}; // static int[] coordinateDx = {2, 2, -2, -2}; static int[] coordinateDy = {1, -1, 1, -1}; | cs |
+. 참고 도서
ㄴ Clean Code (https://book.naver.com/bookdb/book_detail.nhn?bid=7390287)
- 변수와 함수의 명명법, 함수의 구성, 주석 쓰는 방법
- 깨끗하고 잘 구성된 코드의 여러 우너칙과 적용 예
#. 자주 하는 실수
ㅇ 산술 오버플로
- 변수의 표현 범위를 벗어나는 값을 사용하는 경우
ㅇ 배열 범위 밖 원소에 접근
ㅇ 일관되지 않은 범위 표현 방식 사용
- ex) 함수 내에서 사용하는 표현 방법과 함수 밖에서 사용하는 표현 방법이 서로 다른 경우
- 한 가지 방법으로만 범위를 표현
ㅇ off-by-one 오류
- 계산의 큰 줄기는 맞지만 하나가 모자라거나 많아서 틀리는 코드의 오류
- 부등호 연산자를 혼동하여 원소를 하나 더 적게 혹은 많이 순회하는 경우
ㅇ 컴파일러가 잡아주지 못하는 상수 오타
ㅇ 스택 오버플로
- 콜 스택이 오버플로해서 프로그램이 강제종료 되는 것
- 재귀 호출의 깊이가 너무 깊어져서 발생
ㅇ 다차원 배열 인덱스 순서 바꿔 사용하기
ㅇ 잘못된 비교 함수 작성
ㅇ 최소, 최대 예외 잘못 다루기
- 가능한 입력 중 최소 값과 최대 값이 예외가 되는 문제들을 고려 안하는 경우
- ex) 소수 판별 함수에서 1, 2를 고려 안하고 넘어가는 경우
ㅇ 연산자 우선순위 잘못 사용하기
- 헷갈릴 경우 괄호로 적절히 감싸기
ㅇ 너무 느린 입출력 방식 선택
- 자신이 사용하는 언어에 어떤 입출력 방식이 지원되는지 확인하고 어느 쪽이 빠른지 미리 점검해보기
ㅇ 변수 초기화 문제
- 이전 입력에서 사용한 전역 변수 값을 초기화하지 않고 그대로 사용하는 것
- 테스트 방법으로 예제 입력 파일을 두 번 반복해서 써보기
+. 디버깅 대신 눈으로 검증해보기
ㅇ 작은 입력에 대한 결과 확인
- 예제의 입력 크기가 클 경우
ㅇ 단정문 사용
- 주어진 조건이 거짓일 때 오류를 내고 프로그램을 강제 종료시키는 함수
ㅇ 프로그램의 계산 중간 결과 확인
- 문제가 생기는 범위를 좁힐 수 있음
참고 : 알고리즘 문제 해결 전략
'PS > Algorithm' 카테고리의 다른 글
[Algorithm] 재귀 호출(Recursion) (0) | 2019.09.02 |
---|---|
[Algorithm] 프로그램 수행 시간 짐작하기 (0) | 2019.09.02 |
[Algorithm] 알고리즘 시간 복잡도 분석 (0) | 2019.09.01 |
[Algorithm] 프로그래밍 문제 해결 과정, 전략 (0) | 2019.08.29 |
[Algorithm] 국,내외 프로그래밍 대회 (0) | 2019.08.29 |