여러분들은 알고리즘 공부를 어떻게 하셨나요?

semtax의 이미지

안녕하세요, 대학교 1학년 컴공 다니는 공대생입니다 :D

요즘 알고리즘 온라인 저지 문제를 풀고있는데요

간단한 문제는 걍 푸는데

DP 라던가 convex hull, 자료구조 같은 문제가 나오면

그냥 멍 때리게 되네요...

ㅠㅠ 역시 관련 책보면서 직접 짜보는 수 밖에는 없겠죠?

hxploit의 이미지

많이 배우고 많이 풀어보는 게 답입니다. 사실 원론적인 알고리즘 공부와, ACM-ICPC/Codejam 등의 문제풀이 대회는
공부하는 게 조금 다릅니다. 물론 결국에는 이론적인 알고리즘 부분이나 다 선행되어야 하지만 문제 풀이를 효과적으로
하기 위해서는 추가적으로 더 알아야 할 것이 많습니다.

이론적인 부분은 Introduction to Algorithms 정도만 보고 다 이해하면 어느 정도 숙지되고,
문제 풀이 같은 경우는 "알고리즘 문제 해결 전략" 이라는 국내 서적을 보시면 큰 도움이 됩니다.
물론 그 외에도 공부해야 할 건 산더미이긴 합니다만.

당연히 그러면서 문제도 많이 풀어봐야 합니다. 보통 정보올림피아드 준비하는 학생들은 USACO/POJ/UVa 는 기본적으로 꾸준히 풉니다.

klenui의 이미지

책한권으로 다 이해되지는 않을겁니다.

저도 10여년전에 'Introduction to algorithms' 이책으로 공부하긴 했는데, 요즘 쉽게 설명된 책들이 많으니 굳이 옛날책을 고집하지 말고 두루두루 보세요.

tyhan의 이미지

이책이 설명이 참 자세히 잘 나와 있는데..
그 만큼 말이 많아 두껍죠 ㅎㅎㅎㅎ

그러나, 저도 이 책 추천 드립니다.

rgbi3307의 이미지

10년 단위로 컴퓨팅환경이 많이 바뀌는듯 합니다.
1990년도에는 PC가 많이 보급되면서
DOS, Windows 환경에서 워드프로세스, 오피스프로그램, PC통신(하이텔), 게임 어플리케이션이 화두였고,
2000년도에는 인터넷이 보급되면서
Web서버(Linux, PHP, Apache, MySQL, Oracle) 설정해서 웹솔루션 만드는 것이 화두였고,
2010년대 지금은 IT 장치들간 상호 연결하는 IoT가 화두입니다.
자료구조와 알고리즘은 컴퓨터 발전역사와 함께하고 있지만,
요즘처럼 이것의 중요성을 다시 깨닫게 되는 상황은 매우 고무적인 일입니다.
IoT 환경의 장치들이 소형화, 저전력화 되면서 고효율성을 요구하다 보니,
운영체제 커널의 중요성이 부각되고, 자료구조 알고리즘을 사용자 UX 중심으로 지능적으로 구현해야 합니다.
이렇게 변화는 환경에서 Linux, Oracle, Apple, Google 등은 자신의 입지를 더더욱 확고히 다지고 있습니다.
이들의 공통점은 컴퓨팅의 원천기술을 가지고 있고, 이것의 바탕에는 자료구조와 알고리즘이 있습니다.
사족이 길어 졌습니다.
이 포스트의 발제자가 처음 얘기한 "알고리즘 공부를 어떻게 하셨나요?"에 대해서 저의 경험을 말씀 드리면,
저는 1990년도에 대학교를 다녔고, 2000년도부터 직장생활을 했습니다.
대학교대 전산과 전자전기제어를 전공하면서 자료구조 알고리즘 수업을 듣기는 했지만
사실 이것을 어디에 어떻게 적용시키는지 이해를 못했습니다.
수업 방향이 너무 이론적인 부분으로 흘러갔다는 부분도 있었겠지요.
2000년도에 직장생활하면서는 당장 이윤이 생기는 Linux 웹서버 구축해서 웹솔루션 만드는 일이 주된 일이었습니다.
그렇다 보니 이미 만들어져 있는 리눅스 배포판 설치하고, MySQL, PHP에서 제공하는 라이브러리를 가져다가
누가 먼저 포팅해서 제품으로 내놓는가? 속도가 중요시 되는 환경이었습니다.
그런데, 저는 학창시절부터 꿈이 하나 있었습니다. "지능형 로봇을 만들어 보고 싶다"라는 거였는데,
학창시절 용산전자상가 돌아다니며 부품을 구해가며 일일히 납땜하며 보드를 만들어
MCU, RAM, ROM, GPIO 붙여서 센서, 모터 구동 시키는 것이 저의 대학생활에 재미를 가져다 주었습니다.
이 경험이 바탕이 되어서인지는 모르겠지만,
리눅스 커널은 어떻게 구동되고, 내가 이것을 효율적으로 사용하려면 어떻게 해야 되는지,
메모리에 데이터는 어떻게 read/write하고 GPIO를 통해 센서와 모터는 어떻게 구동시키는 것이 효율적인지..
이런것을 고민하다보니 이것을 구현하는 C언어에 대해서 파고들고
자연스럽게 자료구조와 알고리즘의 중요성을 깨닫게 되었습니다.
이야기가 길어졌습니다만,
제가 얘기 하고 싶은 요지는 "현장에서 부딪치며 꾸준히 노력하라" 입니다.
저는 맨땅에 해딩하듯이 했는데, 주변에 도움을 받을 수 있는 인적,물적 자원들이 있으면 적극적으로
도움도 요청하고 내가 열심히 성실히하고 있다는 열정도 보여주어야 한다는 것입니다.
그리고 내가 학습한 결과물을 주변에서 이롭게 활용할 수 있게끔 공헌해 보겠다라는 가치관도 있어야
힘들더라도 자기를 지탱하는 버팀목이 될 수 있습니다.

From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))