[PS] 프로그래밍, 알고리즘 문제를 풀기 위해 어떻게 접근해야 할까?

2023. 12. 18. 00:25IT 정보

 

프로그래밍 문제를 해결하는 것은 종종 어려울 수 있습니다.

이럴 때 문제 해결 과정을 단계별로 나누어 접근하면 효과적인데요.

 

어떻게 문제를 풀 것인가(How to Solve It)에 따르면, 문제 해결 과정은 네 단계로 나눌 수 있습니다.

1) 문제 이해, 2) 해결 계획 수립, 3) 계획 수행, 4) 회고 및 개선.

 

 


이러한 내용을 프로그래밍 대회를 위한 접근 방법으로 관찰해 보면 여섯 단계로 구성됩니다.

 

1. 문제를 읽고 제대로 이해하기 

프로그래밍 문제를 해결하는 첫 번째 단계는 문제를 주의 깊게 읽고 이해하는 것입니다. 많은 분들이 이 단계를 가볍게 여겨 실수를 저지르는데, 특히 프로그래밍 대회에서는 문제의 궁극적 목적과 세부 조건을 완전히 파악하는 것이 중요합니다. 성급한 판단은 작은 실수로 이어져 문제 해결에 큰 영향을 미칠 수 있습니다.

 

잘못 해석하지 않도록 꼼꼼하게 읽자

 



2. 읽기 쉽게 재정의하고 추상화하기

문제 해결의 두 번째 단계는 문제를 자신의 언어로 재정의하고 추상화하는 것입니다. 이 과정은 복잡한 문제를 직관적으로 이해하는 데 중요하며, 문제를 수학적이나 전산학적 개념으로 단순화함으로써 해결 방법을 찾는 데 도움을 줍니다. 

문제의 글이 많은 경우, 문제를 반복해서 읽기 어렵듯이 자신만의 언어 또는 방식으로 추상화하여 한 곳에 적어놓는 것이 좋습니다. 대표적인 예로 주석을 사용하여 코드 입력창에 적어볼 수도 있습니다.

 

추상화는 문제의 본질을 재구성하는 과정으로, 이를 통해 어려운 문제도 쉽게 변환하거나 반대로 쉬운 문제를 복잡하게 만들 수 있습니다. 따라서 효과적인 추상화를 어떻게 할지 고민해보는 것은 좋은 프로그래머가 되는 과정이기도 합니다.

 

내가 이해하기 쉽게 적어보고 추상화하기

 

3. 계획 세우기 

 

문제 해결의 세 번째 단계는 해결 계획을 세우는 것입니다. 이 단계에서는 문제를 해결하는 방법을 결정하고, 적절한 알고리즘과 자료 구조를 선택합니다 (완전탐색을 쓸까, 이분탐색을 써서 문제를 풀까?).

단순한 문제는 쉽게 해결할 수 있지만, 복잡한 문제는 이 과정에서 심도 있는 고민이 필요하며 많은 시간을 소요하게 됩니다.

어떤 알고리즘, 접근법을 사용할 지 계획해 보기

 

 

4. 계획 검증하기

문제 해결의 네 번째 단계는 계획(3단계)을 검증하는 것입니다. 이 과정에서는 설계한 알고리즘이 모든 경우에 대해 요구 조건을 만족하는지 확인하고, 실행 시간과 메모리 사용량이 문제의 제한 조건 내에 있는지 검증합니다.

(대표적으로 이분 탐색 문제의 경우는 시간복잡도가 log N 방식을 사용해야 문제가 풀리며, 자신이 계획한 알고리즘이 log N 이내라는 조건이 만족하는지 판단하며 검증합니다.).

구현하지 않고 계획(3단계)이 맞는지 아닌지 먼저 검증하기

 

 

5. 계획 수행하기

문제 해결의 다섯 번째 단계는 실제로 프로그램을 작성하는 것입니다. 고안된 알고리즘이 아무리 우수해도, 그것이 정확하고 효율적으로 구현되지 않으면 프로그램은 제대로 작동하지 않으므로 구현 단계의 중요성은 매우 큽니다.

 

 

계획대로 정확하고 효율적인 구현에 집중하기 

 

 

 

+ 회고하기 (6번째)

문제 해결의 여섯 번째 단계는 회고하는 것으로, 자신의 해결 과정을 되돌아보고 개선하는 과정입니다. 

문제를 한 번 푼 후에 다시 검토하면 더 효율적인 알고리즘을 발견하거나 더 간결한 코드를 작성할 수 있는 기회를 제공합니다. 이 단계는 문제 해결 기술을 연마하고, 사용한 방법을 비판적으로 평가하여 능력을 향상하는 데 중요합니다.

 

회고를 효과적으로 수행하기 위해서는 문제 해결 시 자신의 코드와 경험을 기록하는 것이 좋습니다. 이 기록은 문제 해결 방식에 대한 깨달음, 오답의 원인 및 해결 방법을 포함해야 하며, 이를 통해 자주 발생하는 실수를 줄이고 필요한 통찰력을 개발할 수 있습니다.

또한 다른 사람들이 해결한 같은 문제의 코드를 살펴보는 것도 좋은 학습 방법입니다.
각각의 코드는 서로 다르며, 이를 통해 새로운 해결 방식이나 통찰을 얻을 수 있습니다. 

따라서 혼자서만 문제를 풀기보다는 그룹 스터디나 온라인 커뮤니티를 통해 다른 사람들과 함께 학습하며 서로의 아이디어에서 영감을 얻는 것이 효과적입니다.

 

해결 과정을 돌아보며 배운 점을 정리하고, 
다른 사람의 코드도 참고하여 통찰을 얻기

 

 

 

정리하면,

1. 문제 읽기와 이해: 문제를 세심하게 읽고 정확히 이해하는 것이 중요합니다.
2. 재정의와 추상화: 문제를 자신의 언어로 재정의하고 추상화하여 문제의 본질을 파악합니다.
3. 계획 세우기: 해결 방법을 결정하고 적절한 알고리즘과 자료 구조를 선택합니다.
4. 계획 검증하기: 설계한 알고리즘의 정확성과 효율성을 검증합니다.
5. 계획 수행하기: 프로그램을 작성하며 정확하고 효율적인 구현에 집중합니다.
+ 회고하기: 해결 과정을 돌아보며 배운 점을 정리하고, 다른 사람의 코드도 참고하여 통찰을 얻습니다.

 

꼭 위의 방식으로 접근해야 한다는 것은 아니며, 단지 접근하는 방법을 기술한 내용입니다.

 

여러분의 프로그래밍 실력 향상돌핀코딩이 응원하겠습니다!

https://dolphincoding.io

 

돌핀코딩 - 인공지능 돌고래와 함께하는 즐거운 코딩 교육 플랫폼

인공지능 돌고래와 함께하는 온라인 코딩 교육 플랫폼

dolphincoding.io:443

 

(참고 자료)

https://www.yes24.com/Product/Goods/8006522

 

알고리즘 문제 해결 전략 세트 - 예스24

이 책은 프로그래밍 대회 문제를 풀면서 각종 알고리즘 설계 기법과 자료 구조에 대해 배우고, 나아가 문제 해결 능력까지 키울 수 있도록 구성되어 있다. 각 장에는 독자가 스스로 프로그램을

www.yes24.com