학번 차가 좀 나는 후배가 과 IRC 채널에서 프로그래밍 문제를 묻는데, ProjectEuler.net의 문제를 python으로 풀고 있었다. 올해 신입생이기도 하고해서, 좀 들여다보고 있었는데, 거의 무의식적으로 다음과 같은 가정을 해버렸다.
- 신입생인데 python을 쓴다 — 내가 다닌 학부에서 1학년 때는 C 혹은 Java를 가르친다
- ProjectEuler 같은 매니악한 곳에 신경을 쓴다 — 프로그래밍 하는 애들이 꽤 있는 동아리에 속해있지만 ProjectEuler를 하는 사람은 몇 없다
- (여기서부터 가정) 아마도 KOI 쪽 애인가 보네
라고 생각하고, 알고리즘 쪽은 좀 스킵해서 보고, 언어적인 측면만 조언을 몇 개 해줬는데, 확인해보니 그 쪽 계통 — 그러니까 정보경시대회출신 — 이 아니더라. 사실 굳이 그런 배경이 없어도 흥미로운 언어 + 문제에 관심을 안가질 이유가 없는데 내가 너무 멋대로 생각해버린듯. (사실 신입생 중에 년초부터 저런거 하는 애들이 거의 그쪽 출신이기도 하고)
나 자신도 저런 쪽 배경없이 따라잡…아보겠단 오기로 1학년때 이것저것 공부했던 기억이 있는데 멋대로 생각해버리다니 좀 부끄럽구만 -_-;;
ps. 지금 다시 들여다보는데 실행 시간에 대한 추정 — big-Oh bound 같은 추상적인 해석 — 이나, 이산 수학의 counting / advanced counting에 나오는 “세는 법” 에 대한 쪽이 좀 부족해보이는 느낌…이지만 사실 저건 이산 수학과 자료구조를 배워야(…).
사실 저 잘 세는게 좀 복잡하다. 예를 들어서, 직각삼각형을 만드는 정수인 세 변의 길이 묶음 (a, b, c)에 대해서 빗변이 아닌 a, b가 서로소(relatively prime)인 것들을 특정 길이 아랫쪽에서 만들어내려면 어찌해야하는가?
혹은, n명의 사람들이 파티에 참석해서 모자를 벗었다가, 파티가 끝나고 돌아가는 길에 임의의 모자를 집어 쓰고 나가는데 k명의 사람들이 원래 자기 모자를 쓸 경우의 수는 몇 가지인가 하는 문제 등등 숫자(?)를 센다는 것도 쉬운 일이 아니긴하다…
나 이번 학기에 이산 수학 듣는데…
카운팅이랑 어드밴스드 카운팅 스킵 했다는 ㅎㅎ ;;;
세는 거 하니까 생각났는데 단순히 n elements 가지고 permutation 생성하는 거 짜는데 몇 시간은 쓴 거 같은데 ㅡㅡ;;;
헉 -_-;; 대체 어느 교수님 수업이길래;;;;
n-elements permutation은 std::next_permutation()
(…)
떙큐 ;;;
멀한거지 나는 ㅡㅡ;;;;
C++ + TR1 + boost + … 정도면 왠간한 기본알고리즘들은 다 되요(…)