본문 바로가기

Programming

[Algorithm] 1. 도입

728x90
반응형

문제 해결 과정


1. 문제를 일고 이해하기 

문제 설명을 공격적으로 읽으며 문제가 원하는 바를 완전히 이해하는 과정이 필요하다.

2. 재정의와 추상화

문제를 추상화 시키고 재정의 하여 문제에 쉽게 접근할 수 있도록 만든다.

3. 계획

문제를 어떤 방식으로 해결할지, 어떤 알고리즘과 자료구조를 사용할지 결정한다.

4. 계획 검증

설계한 알고리즘으 모든 경우에 요구조건을 충족하는지 증명하고, 걸리는 수행 시간을 확인하며 메모리 사용량 제한을 지키는지를 검사해야한다.

5. 계획 수행

검증이 완료되면 프로그램을 작성한다.

6. 회고

문제를 해결한 과정을 동이켜 보고 개선한다.


문제를 풀지 못 했을 때   

문제를 해결하지 못하였을 경우 다른 사람의 풀이 방법을 참조한다. 하지만 복기를 동반하여야 한다.

문제 해결 전략

문제를 해결하기 위해서는 직관과 체계적인 접근방법이 필요하다. 다음은 체계적인 접근을 위한 질문들이다.

- 비슷한 문제를 풀어본 적이 있던가?

- 단순한 방법에서 시작할 수 있을까?

- 문제를 푸는 과정을 수식화 할 수 있을까?

- 문제를 단순화할 수 없을까?

- 그림으로 그려볼 수 있을까?

- 수식으로 표현할 수 있을까?

- 문제를 분해할 수 있을까?

- 뒤에서부터 생각해서 문제를 풀 수 있을까?

- 순서를 강제할 수 있을까?

- 특정 형태의 답만 고려할 수 있을까?

 

좋은 코드를 짜기 위한 원칙

- 간결한 코드 작성하기

메크로를 적절히 사용하면 간결한 코드를 만들 수 있다.


- 적극적으로 코드 재활용하기

코드를 모듈화 하여 사용한다.


- 표준 라이브러리 사용

스택, 큐 등 표준 라이브러리는 셀 수 없이 검증되었기 때문에 메모리 관리나 정당성 증명에 신경 쓸 필요 없이 사용 할 수 있다.


- 항상 같은 형태로 프로그램을 작성

프로그래밍을 공부하다 보면 같은 실행을 하는 알고리즘도 여러가지 방법으로 작성하게 된다. 하지만 이런 방식은 나중에 실수를 일으킬 수 있다. 따라서 자주 작성하는 알고리즘과 코드에서는 한번 검증된 코드를 계곡해서 사용 할 필요가 있다.


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

모호한 명명법은 실수를 유발할 수 있습니다. 모호하지 않는 변수명과 함수명을 사용하는 버릇을 들이고, 사용하는 언어의 표준 라이브러리에서 사용하는 명명 규약을 익혀야 한다.


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

같은 자료가 두개 이상의 표현을 가지게 되면 미묘한 버그들을 만들 수 있다.


- 코드와 데이터를 분리하기


자주 하는 실수 

- 산술 오버플로

- 배열 범위 밖 원소에 접근

- 일관되지 않은 범위 표현 방식 사용

- Off-by-one 오류

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

- 스택 오버플로

- 다차원 배열 인텍스 순서 바꿔 쓰기

- 잘못된 비교 함수 작성

- 최소, 최대 예외 잘못 다루기

- 연산자 우선순위 잘못 쓰기

- 변수 초기화 문제

- 너무 느린 입출력 방식 선택


반응형