- 문제를 읽고 이해하기 -> 단서를 찾자!
- 재정의와 추상화 -> 문제의 본질을 찾자!
- 계획 세우기 -> 해결 단계 구체화
- 계획 검증하기 -> 오류 검증
- 계획 수행하기 -> 실행 단계
- 회고하기 -> Review 단계, 자신의 경험을 기록으로 남겨보자.
=> 다른 사람의 풀이를 자신의 풀이(해결법)과 대조해 실패원인을 분석하고 이후에 다시 풀어보기.
- 직관과 체계적인 접근
- 체계적인 접근을 위한 질문들.
- 비슷한 문제를 풀어본적이 있는가?
- 단순한 방법에서 시작할 수 있는가?
- 내가 푸는 방법을 수식화 할 수 없을까?
- 그림으로 그려볼 수 없을까?
- 수식으로 표현할 수 있을까?
- 문제를 분해할 수 있을까?
- 뒤에서부터 생각해서 문제를 풀 수 있을까?
- 순서를 강제할 수 있을까?
- 특정 형태의 답만을 고려할 수 있을까?
-
도입: 코딩의 중요성을 간과하지 말라.
-
코딩과 디버깅에 관하여(좋은 코드를 짜기 위한 원칙)
- 간결한 코드를 작성하기 -> 전역변수를 사용하기(알고리즘 풀이에 관해서만 하자!), 매크로를 사용한 코드 단축가능
- 적극적으로 코드 재사용하기 -> 이상적인 세계에세는 한 함수가 두 가지 이상의 일을 해서는 안 된다 말함.
- 표준 라이브러리 공부하기, 쓸 수 있는(이미 검증된) 라이브러리를 활용해 문제해결 속도를 높이자!
- 항상 같은 형태로 프로그래밍 작성하기(나만의 코딩 양식을 만들어 궂너에 맞춰 작성하는 연습을 하자.)
- 일관적이고, 명료한 명명법 사용하기(함수나 변수 이름 작성 시 직관적인 작명을 해 가독성을 높히자.)
- 모든 자료를 정규화해서 저장하기, -> 같은 자료를 두 가지 이상의 표현법으로 표현하지 말고, 하나의 기준을 맞춰 사용하자. (deg, protion...)
- 코드와 데이터를 분리해 정리하자 -> 가독성을 높히는 가장 쉬운 방법이다.
- 산술 오버플로 -> 데이터의 사용 위치와 범위에 대해 어느정도 계산하며 코드를 작성하자
- 배열 외부 원소에 접근하는 경우, 배열 및 포인터 사용시, 주소의 범위를 자료형에 맞계 계산해 접근하는 습관을 기르자.
- 일관되지 않은 범위 표현 방식 사용하기, -> 특히 열린구간과 닫힌 구간의 value 포함 구간에 맞춰 코드를 작성해야함. cpp -> [)
- 하나 보니 느낀 Tip
- get() -> 저수준 입력(빠름, 코드 복잡)
- cin -> 고수준 입력(느림(상대적으로), 코드 간결)