Algorithm

[알고리즘 문제해결 전략] 2. 문제 해결 전략

프로성장러 2020. 4. 17. 00:38

프로그래밍은 문제해결이다.

 

많은 제약조건과 요구사항을 이해하고 최선의 방법을 찾아내는 것이 프로그래머가 하는 일이다. 문제해결능력은 추상적인 기술이기 때문에 훈련하기 어렵다. 프로그래밍 대회는 문제 해결 기술을 연마하기에 좋은 방법중 하나다.

 

2.2 문제해결 과정

문제해결과정을 단계별로 나눠보자. 문제를 해결하기위해 거쳐야할 과정들을 세분화 함으로써, 어디가 부족하고 어디를 개선해야하는지 판단할 수 있게된다. 

 

1. 문제를 읽고 이해한다

2. 문제를 익숙한 용어로 재정의한다

3. 어떻게 해결해야 할 지 계획을 세운다.

4. 계획을 검증한다.

5. 프로그램으로 구현한다.

6. 어떻게 풀었는지 돌아보고 개선할 방법이 있는지 찾아본다.

 

 

2.3 문제 해결 전략

문제와 답의 구조에 대한 직관은 문제 해결전략에서 가장 강조되어야할 중요한 요소이다. 직관은 시간이 지나면서 발달하는 것이고, 직관을 발달시키기 위해서는 결국 막막한 문제들을 해결해나가며 경험을 쌓아가야한다.

 

막막한 문제를 해결해야 할 때는 체계적인 접근법을 사용하여 점진적으로 전진해보자

 

체계적인 접근을 위한 질문

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

- 단순한 방법에서 시작해볼까?

- 내가 문제를 풀어가는 과정을 공식화 할수 있을까?

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

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

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

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

- 순서를 뒤집어서 생각해서 풀 수 있을까?

- (순서가 없는 문제에) 순서를 강제할 수 있을까?

- 문제를 정규화할 수 있을까?

 

 

3.2 좋은 코드를 짜기 위한 원칙

- 간결한 코드

- 적극적인 재사용

- 표준 라이브러리 활용

- 자료구조, 알고리즘 등을 항상 같은 형태로 작성

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

- 모든 자료를 정규화 하기

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