누워서 읽는 알고리즘

Publish date: 2009-09-20
Tags: algorithm 임백준 puzzle 면접

인상 깊은 단락

p27

빨간눈 승려 문제

p57

폰 노이만 일화

p59

1~100중 하나의 숫자가 남았을때 남은 숫자 확인

99개의 값을 저장할 수 있는 배열 item[O], item[1], , item[98]이 있댜 1부터 100까지의 값이 들어 있는 집합 {1, 2, 3, , 100}에서 무작위로 수를 꺼내서 배열에 저장했다. 집합에 들어 있는 원소의 수는 100개인 데 반해서 배열은 값을 99개까지만 저장할 수 있으므로 집합 안에 하나 의 숫자가 남았다. 남은 것이 어느 수인지 확인할 수 있는 프로그램을 작성하라.

‘누워서 읽는 퍼즐북’ 274페이지에도 나온 문제이다.

p60

하지만 회사에서 프로젝트를 수행하면서 느낀 점은 프로그래밍은 혼자서 하는 바둑이나 테니스 같은 게임이 아니라 팀이 단결해서 호흡을 맞추어야하는 축구에 더 가깝다는 사실이었다.

p67

196문제

p69

역사는 정해진 길만을 가기 위해서 다람쥐 같은 삶을 반복하는 사람들이 아니라 아무 것도 정해지지 않은 미지의 세계에 자신의 삶을 던지는 용기 있는 사람들에 의해서 쓰여진다.

p103

‘행복한 프로그래밍: 컴퓨터 프로그래밍 미학 오디세이'라는 책에서 필자는 피보나치 알고리즘을 재귀 알고리즘을 이용해서 구현했다. 그래서 프로그램의 성능에 대해서 질문을 던진 여럿 독자가 있었다. 그 때는 ‘재귀의 미학'에 초점을 맞추느나 ‘효율성'을 희생시켰다면 이 책에서는 ‘최적화'에 눈길을 돌린 셈이다. 이렇게 ‘성능'과 ‘미학'이 반듯 ㅣ일치하지 않는 경우도 있다. 그와 같은 경우에 어느 쪽을 선택할  것인가 하는 문제는 프로그래머 자신의 ‘철학'에 달려있다.

p128

카누스 교스의 강연 중

그래서 우리는 컴퓨터 프로그래밍을 하나의 예술로 생각한다. 그것은 그 안에 세상에 대한 지식이 축적되어 있기 때문이고 기술과 독창성을 요구하기 때문이고 그리고 아름다움의 대상을 창조하기 때문이다. 어렴풋하게나마 자신을 예술가라고 의식하는 프로그래머는 스스로 하는 일을 진전으로 즐길 것이며, 또한 남보다 더 훌륭한 작품을 내놓을 것이다.

We have seen that computer programming is an art, because it applies accumulated knowledge to the world, because it requires skill and ingenuity, and especially because it produces objects of beauty. A programmer who subconsciously views himself as an artist will enjoy what he does and will do it better. Therefore we can be glad that people who lecture at computer conferences speak about the state of the Art.

http://faq.ktug.org/faq/LiterateProgramming?action=download&value=knuth-turingaward.pdf

p129

1992년에 출판된 책 ‘문학적 프로그래밍(Literate Programming, Center for the Study of Language and Information,1992)은 카누스 교수의 논문과 ‘생각하는 프로그래밍’의 저자 존베틀리의 칼럼이 묶여진 책입니다. 이 책의 서문은 다음과 같습니다.

컴퓨터 프로그램을 작성하는 일은 재미있다. 그리고 잘 작성된 프로그램을 읽는 것도 재미있다. 세상에서 가장 즐거운 일 중 하나는 여러분이 작성한 컴퓨터 프로그램을 다른 사람들 혹은 여러분 자신이 읽고 기쁨을 얻는 것이다. 컴퓨터 프로그램은 또한 유용한 작업을 수행할 수도 있다. 세상에서 가장 큰 성취감을 맛보는 순간은 여러분이 창조한 무엇이 사회의 부와 진보에 기여한다는 사실을 깨닫는 순간이다. 어떤 사람들은 컴퓨터 프로그램을 작성함으로써 돈을 벌기도 한다. 따라서 프로그래밍은 세 가지 측면에서 결실을 맺는 행위다. 미학적으로, 인류학적으로 그리고 경제적인 면이 바로 그러한 결실에 해당한다.

http://faq.ktug.or.kr/faq/LiterateProgramming?action=download&value=knuthweb.pdf 에 원문이 있음.

comments powered by Disqus