티스토리 뷰




프로젝트 오일러란?


결론부터 말하면 수학 문제를 풀고, 답을 공유하고 점점 어려운 문제에 도전할 수 있는 웹사이트다.

      https://projecteuler.net/about (오리지날 사이트)

      http://euler.synap.co.kr/ (한국어 번역 사이트)

회원가입을 하고 문제에 대한 올바른 답을 정답란에 넣어 제출하면 정답여부를 확인할 수 있고, 정답인 경우에는 포럼이 열려 내 코드를 공유하거나 다른 사람이 올린 코드를 살펴볼 수 있다.


오리지날 사이트는 영어로 되어있어 어려워 하는 분들이 많아 사이냅소프트에서 친절하게 한국어 번역 사이트를 운영하고 있다.


필자가 생각하는 이 사이트의 장점은 아래와 같다.

    알고리즘 능력을 키울 수 있다.

    답을 공유할 수 있어 다른 사람의 풀이 방식을 보며 새로운 관점으로 다시 문제에 접근 할 수 있다.

    하루 짧은시간의 투자로 매우 큰 성취감을 느낄 수 있다.


근데 왜 하필 수학문제인가? 라는 질문을 가질수도 있다.


필자가 생각하기엔 결국 모든 프로그래밍은 숫자놀이이기 때문에 주제를 수학문제로 하지 않았나 싶다.


지금 내가 타이핑하는 이 문자들도 특정 코드와 매칭이 되어있고 이 또한 결국 숫자다.. 1과 0의 조합으로 모든 것이 동작하기 때문에 그 근간인 숫자문제 풀이를 통해 우리의 말랑한 두뇌를 기계화(?)시키기 위해 그런게 아닐까 ?? :D


잠시 다른 이야기로 빠졌는데 다시 본론으로 돌아와 이러한 알고리즘 능력이 우리에게 왜 필요한지 알아보자.



알고리즘의 중요성

숫자를 입력하면 같은 아웃풋을 내는 함수 A와 B가 있다.


입력한 숫자가 100을 넘지 않을 때는 두 함수 모두 1ms 안에 연산을 마치고 결과를 리턴했지만 숫자가 커질수록 


함수 B의 성능은 매우 안좋아졌으며, 1억이 넘어가자 값을 리턴하는데 30분 이상 소요되었다.


반면에 함수 A의 경우 10억이 넘는 숫자에도 100ms안에 연산을 마치고 결과를 리턴했다.


이 둘의 차이가 무엇일까?


바로 내부 로직의 구현 즉, 알고리즘의 차이다.


효율적인 알고리즘 도입을 통해 개발자는 하드웨어 성능을 최대로 이끌어 낼 수 있다. 따라서 임베디드 펌웨어 개발과 같은


다소 제한적인 하드웨어 스펙에서의 프로그래밍 시 매우 중요하다.


이처럼 알고리즘 개발 능력은 개발자에게 중요한 능력이며 이는 프로젝트 경험을 통해 축적되기도 하지만 이런 첼린지를 통해 


스스로 트레이닝 할 수도 있다.


프로그래밍에 익숙하지 않은 사람이라면 한문제 한문제가 어렵다고 느껴질 수도 있지만, 하나씩 해결하다보면


점차 문제를 대하는게 부담스럽지 않고 즐겁게 느껴질 것이다.




마치며

모든 학습에는 일장일단이 있는법!


필자와 함께 한문제씩 풀어나가며 다양한 각도로 문제를 살펴보도록 하고 개발자로서의 자질을 쑥쑥 키워나가보도록 하자!



댓글