User Tools

Site Tools


study:algorithms:coding_and_debugging

03. 코딩과 디버깅에 관하여

좋은 코드를 짜기 위한 원칙

1. 간결한 코드 작성

  • 예시 C macro 활용

2. 적극적으로 코드 재사용하기

  • 같은 코드가 3번 이상 반복하면 항상 함수로 분리해 재사용

3. 항상 같은 형태로 프로그램 작성하기

  • while , do-while

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

  • judge → isInsideCircle

5. 모든 자료를 정규화해서 저장하기

  • 기약분수, 각도, UTC, String Encoding

6. 코드와 데이터 분리하기

자주 하는 실수

1. Arithmetic overflow

2. 배열 범위 밖 원소에 접근

3. 일관되지 않은 범위 표현 방식 사용하기

  • half-open interval
  • stl begin() / end()

4. off-by-one

5. 컴파일러가 잡아 주지 못하는 상수 오타

6. 스택 오버플로우

7. 다차원배열 인덱스 순서 바꿔쓰기

8. 잘못된 비교 함수 작성

9. 최소, 최대 예외 잘못 다루기

  • 소수에 2가 포함됨

10. 연산자 우선순위 잘못 쓰기

  • if ( b & 1 == 0 )

11. 너무 느린 입출력 방식 선택

  • gets vs cin

12. 변수 초기화 문제

  • 예제 입력화일 두번 사용하기

디버깅과 테스팅

1. 디버거 대신 사용

  • 작은 입력에 제대로 실행되나 확인하기
  • Assertion 사용
  • 중간 결과 값 출력

2. 테스팅 - 스캐폴딩

  • 건물이나 보수할때 공사하는 사람들이 걸어다니기 위해 설치하는 임시 구조물
  • 자동차의 브레이크와 같은 효과

(브레이크가 없으면 천천히 달릴거지만 브레이크가 있으니 빨리 달릴 수 있다.)

  • regression test

변수 범위의 이해

1. Arithmetic overflow

  • 대부분 프로그래밍 언어가 미경고

2. 너무 큰 결과

  • real 32bit vs 64bit

3. 너무 큰 중간 값

4. 너무 큰 무한대 값

  • 2^31-1 을 무한대 값으로 사용?

5. 오버플로 피해가기

  • 더 큰 자료형으로 캐스팅
  • 연산 순서 바꾸기

6. 자료형의 프로모션

  • 정수형 | 실수형 → 실수형
  • 정수형 | 정수형 or 실수형 | 실수형 → 너 넓은 범위의 자료형으로 변환
  • int보다 작은 정수 → 정수형
  • unsigned | signed → unsigned

실수자료형의 이해

1. IEEE754

  • 이진수로 실수를 표기
  • 부동 소수점 표기법
  • 무한대, 비정규수등 특수한 값이 존재

2. 실수의 이진표기법

  • 1011.101 (bin) → 11.625 (hex)

3. 부동 소수점 표기

  • 32bit, sign(1), exp(8), mantissa(23)
  • 64bit, sign(1), exp(11), mantissa(52)

4. 실수 연산 아예 하지 않기

  • 곱셈과 나눗셈의 순서 바꾸기
  • 양변 제곱하기
  • 좌표계를 정수배
study/algorithms/coding_and_debugging.txt · Last modified: 2019/02/04 14:26 (external edit)