알고리즘 문제 접근법

남형진·2021년 6월 27일
0

직관과 체계적인 접근

어떤 문제의 전체적인 알고리즘 구조와 문제 답안의 얼개를 그려볼 수 있다면,
풀이는 반쯤 성공한 것이라고 말할 수 있다.

그러나 직관 같은 경우는 문제 풀이 경험에서 생기는 경우가 많기 때문에 알고리즘을 처음 접할 때 사용할 수 있는 효율적인 방법이라고 보기에는 적합하지 않다고 생각한다.
(물론 수학적 사고능력과 프로그래밍 실력에 따라 달라질 수 있다고 생각함)

따라서 체계적인 접근 방법을 통해 생각하는 힘을 기르는 것이 중요하다고 생각한다.
그래서 오늘은 아래에 배운 체계적 접근 방법을 정리해보며 생각하는 힘을 길러보자 한다.

체계적인 접근 방법

1. 비슷한 문제를 풀어봤나?

직관과 비슷한 방법이다. 이전에 비슷한 문제를 풀어봤다면, 해당 문제를 풀 때 사용했던 플로우를 적절하게 변경한 뒤 대입하는 방법이라고 볼 수 있다.

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

투박하게 푸는 방법이다. 현대의 컴퓨터는 생각보다 연산속도가 빠르기 때문에 투박하게 알고리즘을 작성해도 문제의 허용 메모리, 시간등을 넘치지 않는 경우가 있다. 그리고 가장 중요한 것은 투박하게 작성한 알고리즘에서 힌트를 얻어서 예리하게 리팩토링 할 수 있다는 점이다.

3. 문제를 푸는 과정을 수식화 할까?

이 방법은 당장 주어진 문제를 풀기 위한 방법이라기 보다는, 푼 문제의 알고리즘을 수식화해서 배우는 점을 통해 나중에 도움을 주는 방법이다.

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

문제를 단순한 버전으로 변형해서 풀어내게 되면, 원래 문제에 직관을 주는 경우가 많다. 문제에 주어진 특정 조건을 제외하거나, 2차원 배경을 1차원으로 변경하거나 하는 것들도 단순화에 포함된다.

5. 그림으로 표현할 수 있을까?

문제의 기하학적인 표현은 사람들의 인지에 더 큰 영향을 줄 수 있고 이것은 곧 결정적인 직관을 얻어낼 수 있는 실마리가 될 수 있다.

6. 수식으로 표현할 수 있을까?

문제를 수식으로 표현하게 되면, 수학적 풀이를 적용할 수 있을 때도 있다.
그렇게 되면 마찬가지로 결정적인 직관을 얻을 수 있는 실마리가 된다.

7. 뒤에서 부터 생각할 수 있을까?

마치 사다리 타기에서 원하는 답을 선택하고 사다리를 타면, 어떤 선택지가 정답인지 알 수 있듯이 뒤에서 부터 생각하는 방법이 문제에 따라 도움을 주는 경우가 있다.

8. 순서를 강제할 수 있을까?

순서의 경우의 수가 너무 많은 문제일 경우 순서를 강제하는 방법이 도움을 주는 경우가 있다.

9. 정규화 할 수 있을까?

문제의 정답들이 여러개인 경우, 정답들이 가지는 필수적인 요소들을 통해 정답을 정규화하고 그것을 통해 알고리즘을 푸는데 도움을 줄 수 있다.

마무리하며

알고리즘 문제를 풀 때, 문제를 이해하고 직관을 통해 답까지 도달 할 수 없다고 생각하면,
위의 체계적인 접근 방법들을 통해서 답을 도출할 수 있다고 생각한다.

profile
세상을 바꾸는 한줄의 코드를 작성하는 개발자

0개의 댓글