Re: 18.5문제 관련 질문합니다.
, 도장_ 관리자님이 작성책에 제시된 코드가 더 바람직한 코드입니다.
문제에서는 0과 73 사이의 숫자에 대해 처리하라고 되어 있습니다. 즉, 입력 범위가 지정되어 있습니다.
문의하신 것처럼 if i > 73은 예외 처리를 위한 코드입니다.
코드를 작성할 때는 의도가 더 중요합니다. 대부분의 코드는 정상적인 동작을 가정하고, 정상적인 범위에서 동작하는 것이 정상적인 의도일 것입니다. 문제에 제시된 기능을 하는 코드가 함수로 되어 있다면 이 함수는 대부분 0~73 사이의 값에 대해 처리할 것을 전제로 하게 됩니다. 다시 말해 정상적인 코드 동작은 0~73 사이의 값에 대해 처리하고, 73을 초과했을 때만 종료하게 하는 것이 좋습니다.
83과 같은 비정상적인 값, 즉 프로그램에서 가정한 값의 범위를 벗어나는 값에 대해서는 비효율적으로 동작하는 것이 맞지만, 대부분은 정상적인 값의 범위가 입력되고, 그 범위에 대해 동작하는 코드가 더 효율적입니다.
정상적인 범위의 값이 100번 전달되고, 범위를 벗어난 값이 1번 전달되는 것이 보통의 전제일 것입니다. 이런 경우에는 책에 제시된 코드가 더 효율적입니다.
그러나 코드에는 정답이 없으니 원하는 대로 코딩해도 됩니다. 올바르게 동작하기만 하면 됩니다. 이 문제에서는 알고리즘의 효율에 차이가 없기 때문이기도 합니다. 알고리즘 효율에 대해서는 <누구나 자료 구조와 알고리즘>(길벗, 2018)을 추천합니다. 초보자도 읽기 쉽게 되어있으면서도 컴퓨터 공학에서 놓치면 안 되는 알고리즘 효율에 대한 분석을 제시하기 때문입니다. 쉽게 설명하는 알고리즘 책들이 대부분은 빅 오 표기법이나 알고리즘 효율 분석에 대해 부족한 경우가 많은데 반해, 이 책은 이 부분을 중점적으로 설명합니다.