왜 숫자는 0부터 세어야 하는가

“왜 프로그램에서는 숫자를 1부터 세지 않고 0부터 세느냐” 의 문제는 프로그래밍을 처음 공부할 때부터 절 사로잡은 주제 중 하나입니다. 여기에 대해서는 위대한 선인이 옛날에 논한 글이 있어 선배 rica 사마가 링크를 던져주신 바 있었는데, 불초 후배놈이 워낙에 공부를 싫어하고 게을러 빠진지라 오늘에야 읽어 봤습니다.

간간이 보면 도움이 될 것 같은 내용인지라, 살짝 메모해 둡니다.

[#M_[접어 놓습니다]|[닫기]|* 저 혼자 볼 생각으로 썼는지라 발로 번역했습니다. 대충 의미만 통할 뿐이니 너무 믿지는 마시기 바랍니다.(뻔뻔)먼저 연속한 자연수 2, 3, …, 12 를 표기하는 방법을 생각해 보자. “…” 없이 표기하는 방법으로는 아래 네 가지를 생각해볼 수 있다.

a) 2 ≤ i

b) 1

c) 2 ≤ i ≤ 12

d) 1

이 방법들 중 특별히 더 좋은 방법이 있는 것일까? 그렇다. a) 와 b) 는 수열의 길이를 한 번에 구할 수 있다.( 13 – 2 = 12 – 1 = 11 ) 결과적으로 이렇게 쓸 경우에 이웃한 영역을 알아보기도 쉽다.

ex) 2 ≤ i

이렇게 놓고 보면 a와 b 모두 괜찮아 보인다. 하지만 가장 작은 자연수가 1이라는 점을 생각해 보자. 그러면 b) 나 d) 처럼 표기하는 것은 문제가 있다: 최소값이 자연수의 영역을 넘어가 버린다! 이 모든 것을 종합해볼 때, a) 가 가장 무난한 표기 방법이라고 볼 수 있다.

이제 첨자(subscript)를 통해 길이 N의 수열을 다루는 문제를 생각해보자. 그럼 문제는 수열의 첫 번째 원소에 어떤 첨자를 붙이느냐가 되는데, a) 표기법에 따라 첨자를 1부터 시작하면 첨자의 범위는 1 ≤ i

ex) a[5] : 앞에 a[0], a[1]… a[4] 의 다섯 개 원소가 있다.

따라서 프로그램에서 연속된 데이터들에 번호를 붙일 때, 0부터 붙이는 것이 좋다._M#]

결론: 프로그래밍에서의 첨자는 “이 원소 앞에 몇 개가 있다” 는 의미.

프로그래밍에서의 수열의 길이는 [a, b) 의 의미(←지금까지는 그냥 관습적으로 써왔는데 꼭 그래야만 하는 이유가 있었군요)다 ㄳ

2 thoughts on “왜 숫자는 0부터 세어야 하는가

  1. 그런 뜻이 있었네요! 제가 프로그래밍을 갓 붙잡기 시작했을 때, 무심결에 1부터 헤아리는걸로 알고 코딩을 하다가 에러가 나서 당황했던 기억이 나네요; 아- 위대한 선인의 말씀보다는 결론의 요약에 감사드립니다^^

Comments are closed.