강의실/정보영재

제가 알고리즘 공부를 하면서 자주 보는 책중 하나가 구종만님이 지은 알고리즘 문제해결 전략 이라는 책입니다.

 

그 책의 서문에 다음과 같은 글이 있어서 인용해 봅니다.

 

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

프로그래밍을 하기 위해서는 많은 것을 알아야 합니다.

<중략>

이렇게 많은 제약 조건과 요구사항을 이해하고 최선의 방법을 찾아내는 능력을 문제해결 능력이라고 합니다.

그러나 문제 해결 능력을 훈련하기란 굉장히 어렵습니다.

문제해결능력은 추상적인 기술이기 때문입니다.

 

그렇다면 이러한 문제 해결 능력을 훈련하기 위한 방법은 무엇일까요?

이 책에서는 여러 프로그래밍 대회에 참가하면서 문제해결 기술을 익혀 가는 것을 추천하고 있습니다.

 

오늘은 학생들에게 꼭 필요한 문제해결능력을 키우기 위한 방법에 대해 알아 볼까 합니다.

1. 많은 문제를 풀어 보자.

   - 온라인 채점 사이트를 이용해서 될수 있으면 많은 문제를 풀어 보는 것이 도움이 될 수 있습니다.

   www.acmicpc.net

   www.jungol.co.kr

   algospot.com

   train.usaco.org/usacogate

   www.topcoder.com/tc

   위와 같은 사이트 외에도 좀더 찾아 보면 다양한 사이트가 존재 합니다.

   이러한 온라인 채점 사이트에서 꾸준히 문제를 풀어 보면서 자신이 아는 것을 이용해서 직접 프로그래밍을 작성해 보는 것이 중요 합니다.

 

2. 프로그래밍 대회에 많이 참여해 보자.

초중고 - 한국정보올림피아드, 한국코드페어,NYPC

대학생 - ACMICPC(대학생 프로그래밍 경시대회)

일반인 - 탑코더, 구글코드잼,코드포스 등

다양한 대회에 참여 해 보면서 자신의 실력을 가늠해 보고 실전 경험을 쌓을 수 있습니다.

 

==========================================================================

   - 프로그래밍 대회에서 요구하는 대부분의 알고리즘 대회는 어떤 UI와 같은 부분을 사용하지 않고 단순히 텍스트 파일을 읽어 들여 텍스트 파일을 출력하는 문제가 대부분입니다. 따라서 UI 구현 보다는 참가자는 문제를 해결하는데에만 집중할 수가 있습니다.

   - 시간제한과 메모리제한에 따른 문제 해법으로 자신이 알고 있는 알고리즘으로 해결이 안되는 경우 또 다른 새로운 방법을 생각해 볼 수 있기 때문에 자신이 배운 알고리즘으로는 해결이 안되는 경우가 대부분이기 때문이 원리를 찾고 그 원리를 새로운 해법을 이용해서 해결을 시도 하면서 해법을 찾아 보면서 문제해결능력을 키울 수 있습니다.

  - 프로그래밍 대회에서는 다양한 테스트 케이스를 가지고 자신이 생각해 보지 못한 경우도 나오기 때문에 다양한 각도에서 문제를 바라보는 훈련으로 문제해결 능력을 키울 수 있습니다.

 

문제 해결 능력을 키우기 위해서는 많은 문제를 풀어 보는 방법 밖에 없는 것을 확인해 보았는데요.

학생들이 간혹 두려워 하는 것이 끝도 없는 이 알고리즘을 계속 파고 들어야 하나? 라는 벽에 부딪히게 됩니다.

 

이럴때 저도 학생에게 "끝을 봐야지?" 라는 말을 못합니다.

사실 저도 아직 이 알고리즘의 끝이 어딘지 모르기 때문입니다.

 

제가 어렸을때 의문을 가졌던 부분이 있습니다.

우주의 끝은 있을까? 라는 질문이었죠.

이 생각만 하면 끝이 없다는 것은 더 생각 하기 싫었지만 끝이 있다면 그 끝이 끝난 그 밖은 무엇일까? 라는 생각에 사로 잡혀서 많이 고민을 했었던 적이 있는데요.

 

이 알고리즘 세상에도 끝이 있을까? 라는 궁금증이 생기네요.^^

아직도 수시로 새로운 알고리즘이 튀어 나오고 새로 발견되고 있고 아직 해결하지 못한 문제들도 있으니까요

 

하지만 저희가 1년정도 꾸준히 같이 공부해 온 한 학생을 보면서 훈련이 중요하다는 것을 느끼는 한 학생이 있는데요. 그 학생은 처음에 정말 수학을 암기형 으로 풀어 온 학생인데 지금은 원리를 찾으려고 노력하고 해법을 찾으려고 하는 학생이 되어 있음을 보면서 이 사실만은 얘기해 줄 수가 있을것 같아요.

"알고리즘 공부를 꾸준히 하다보면 어느새 성장해 있는 자신의 모습을 볼 수 있을거야" 라고요.

 

저희가 풀어 보는 알고리즘 문제의 유형들이 대부분 수학적인 사고력을 응용하게 되고 그 원리를 찾아 내는 것에 초점이 맞춰져 있다 보니 아무래도 생각하는 힘이 커지는 것을 확인 할 수가 있었습니다.

 

문제해결능력을 키우고 싶은 학생은 알고리즘 공부의 참맛을 느껴 보시길 바랍니다.^^

 

인천 서구 알고리즘학원 - 원당컴퓨터학원

 

 

 

 

 

9 0
  • 유하v 2019.08.09 18:31 신고    

    창의적인 사고방식을 갖는것이 중요할것 같네요ㅎ

  • 휴식같은 친구 2019.08.09 20:03 신고    

    논리적인 사고력이 가장 중요한것 같습니다.
    잘 보고 갑니다.

  • 행복사냥이 2019.08.09 22:53 신고    

    역시 꾸준함이 중요하군요.^^

  • 버블프라이스 2019.08.10 04:14 신고    

    알고리즘 공부를 하시면서 구종만님이 지은 ‘알고리즘 문제해결 전략’ 책을 보시는군요? 읽어보지 못했지만 좋은 책인것 같습니다. 논리적인 사고력, 다른 분야에서도 중요한 것 같습니다^^

  • 핑구야날자 2019.08.10 06:52    

    프로그래밍이 생각하는 능력을 키워 주는 건 확실히 맛난 거 같아요

  • 공수래공수거 2019.08.10 09:12 신고    

    프로그래밍은 문재해결이다 아주 좋은 말이로군요^^

  • 청결원 2019.08.11 07:03 신고    

    포스팅 잘 보고 갑니다
    행복한 주말 보내세요~

  • 잉여토기 2019.08.11 10:41 신고    

    끝을 꼭 봐야지하는 것보다는 꾸준히 채점해가며 실력을 차츰차츰 키워나가는 게 좋겠네요.

  • *저녁노을* 2019.08.12 05:33 신고    

    잘 보고가요.
    즐거운 한 주 되세요^^