User Tools

Site Tools


Sidebar

  • Learn about Wiki
  • Lectures
  • Study
  • Tips
    • 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)