친구에게 낸 퀴즈...

freestyle의 이미지

친구에게 c언어와 프로그래밍을 가르쳐 주기 위해 간단한 수학 퀴즈를 내주었습니다.
문법적인 오류는 제가 잡아주기로 하고요. 사실 논리와 알고리즘이 더 중요한 문제니까요...

 * 1~100까지 소수의 개수를 세는 프로그램을 짜보기
 
 * 22번째 피보나치 수를 출력해보기
 
 * 주어진 두 정수를 소인수 분해에서 둘 중 어느 것이 소수(중복되는 소수는 한 번만 인정)가 적게 나오는지 판단하기

3문제 합쳐서 30분 내에 풀더군요. 제가 문법 집어줘 다시 컴파일 하는 것까지 포함해서...

충분히 수학적인 연습이나 프로그래밍 연습이 되지 않은 상태에서
이 정도로 빠르게 정확한 답을 생각해 낸다는 사실에 놀랐습니다.

제가 둔재라 그런가요? 이 친구가 영특해서 그런가요?

제가 지금 이런 문제를 만난다면 문법적인 장애없이 암기한 트릭 몇 개로 더 빨리 풀 수 있을테지만,
처음 제가 프로그래밍을 배울 때는 한 문제를 하루 이틀동안 잡고 있었거든요...

약간의 좌절을 느끼면서 얼마 안가 제가 배우게 될 거라 생각됩니다.

좀 기분이 묘하네요.

snowall의 이미지

오일러 프로젝트에 도전시켜주시면 좋은 결과가 있겠네요.

--------------------------
피할 수 있을때 즐겨라!
http://snowall.tistory.com

피할 수 있을때 즐겨라! http://melotopia.net/b

dl3zp3의 이미지

솔직히 30분만에 풀 수 있는 게 노말 아닐까요? 효율적인 알고리즘을 생각해야 한다는 조건이 없다면 말이죠.

MasterQ의 이미지

프로그램 경험도 없는 상태에서 30분이면 대단한것 같은데요? 막상 보면 쉬워보이지만 저는 실수도 자주 하고 논리적 실수도 많이 하는 편이라 제대로 돌아가는것 까지 확인하려면 한시간은 족히 다 쓸것 같네요. 친구분이 빨리 프로그램밍에 취미를 붙여서 좋은 개발자가 되었으면 좋겠네요!

JuEUS-U의 이미지

문법적인 오류를 잡아줬기 때문에 가능하지 싶습니다 - _-)

winner의 이미지

문제를 정확하게 설명하고, 옆에서 가이드해주는 사람이 있다면 인생살기 편할 거예요.

samsee의 이미지

도 맞들면 낫다.
아니었을까요 ㅎㅎ 님이 도와주셨기에 친구님도 그런 결과를 보신 걸 꺼예요.

그나저나.. 저는 30분 내로 못 풀것 같은데요;; ㅠㅠ

visualplus의 이미지

오.. 충분히 수학적인 연습이나 프로그래밍 연습이 되지 않은 상태에서 30분만에 풀었다면 이쪽에 정말 재능이 있는것 가닌가요?
3문제를 디버깅하는 시간까지 30분만에 풀면.. 솔직히 전 for문 처음 배웠을 때 많이 헷갈려서 별찍기도 하루종일 생각했었는데;;

나는 키도 머리도 루져.. orz...

dl3zp3의 이미지

for문은 이중적분, 이중급수, 집합기호, list comprehension등과 같이 생각하면 됩니다. 개념들이 서로 통합니다. 물론 이증적분이나 집합기호 같은 건 실행순서의 개념은 없긴 하지만.

이중적분이나 집합기호에 익숙하면 for문을 이중적분기호나 집합기호처럼 생각하면 되고,
for문에 익숙하지만 이중적분의 dummy변수를 햇갈리는 사람은 이중적분을 for문으로 풀어서 생각하면 됩니다.

for x from 1 to 10
  for y from x to 10
     print (x / y)

위의 loop는 다음 식과 통합니다.

\sum_{x=1}^{10} \sum_{y=x}^{10} \frac{x}{y}

비슷한 이중적분은 다음과 같습니다.

\int_{0}^{1} \int_{x}^{1} x \exp(y) \,dy \,dx

이 이중적분의 적분구역은

\{ (x,y) | 0 \le x \le 1, \quad x \le y \le 1 \}

이것은 다음과 동일
\{ (x,y) | 0 \le x \le y \le 1 \}

다시 다음고 동일
\{ (x,y) | 0 \le y \le 1, 0 \le x \le y \}
이걸로 이중적분 순서를 바꿀 수 있죠.

마찬가지로 (x,y)가 for loop에서 돌아가는 구역을 생각해보면 for loop 순서도 바꿀 수 있습니다.

for y from 1 to 10
  for x from 1 to y
     print (x / y)

(물론 for-loop은 적분과는 달리 실행순서가 중요하기 때문에 위처럼 하면 print순서가 달라집니다. 하지만 print(x/y)가 아니라 sum = sum + x/y 였다면 순서가 달라도 상관없겠죠.혹은 Python 3의 set comprehension의 경우도 상관이 없겠죠.)

집합기호로 표시한 적분구역이 list comprehension이라면, 이중적분은 다중 for-문이라고 할 수 있습니다.

ipes4579의 이미지

수학적 문제해결 능력이 좋은 듯 하네요.
저는 문법적 문제가 없고 몇 번 풀어 본 지금 풀려고 해도 30분 걸릴 듯 한데 -_-;
혹시 대학생이시면 좀 더 훈련시켜서 ACM도 내보내보세요 ^-^

chlwldud83의 이미지

제가 저런 문제를 프로그램 배울때 처음 접했다면......
골머리를 썼겠는데요.

요긴 다들 멋진말만 남기더군요.-_-

freestyle의 이미지

그 이후로 objective-c + opengl 공부한지 3개월만에 게임 앱스토어에 올렸습니다.
지금은 잘 나가는 스마트폰 게임 제작 업체에 다니고 있습니다.

----------------------------------------------------------------------------------------
Don't Feed the Trolls!
----------------------------------------------------------------------------------------

익명 사용자의 이미지

내용무

freestyle의 이미지

실상하고 싶은 말은 전 아직도 바닥에서 빌빌대고 있고,
늦게 시작한 친구는 빠르게 도약함에 따른 상대적 박탈감입니다. ㅠ

----------------------------------------------------------------------------------------
Don't Feed the Trolls!
----------------------------------------------------------------------------------------

사랑천사의 이미지

그런 사람들이 있조. 뛰어나고 .. 동시에 몰랐던 무언가를 잡았을 때 그것에 빨리 적응한다거나... 원래 그 쪽에 제능이 있었는데 몰랐을 수도 있겠구요. 근데 2년 전 글이군요.

사람천사

cleansugar의 이미지

프로그래밍 잘 하는 분들은 빌 게이츠 말대로 10배로 생산적입니다.

어느정도 타고난 다음에 노력하면 되는 것 같습니다.

부러운 사람들입니다.

재벌 2세가 재벌이 될 확률과
금메달리스트 2세가 금메달을 딸 확률이 비슷해지도록
자유오픈소스 대안화폐를 씁시다.

아이디의 아이디어 무한도전
http://blog.aaidee.com

귀태닷컴
http://www.gwitae.com