이번 글에서는 함수가 코드의 핵심 역할을 하는 문제들을 골라 보았습니다. C언어를 기반으로 프로젝트를 수행하다보면 개인적으로 자주 적용하는 프로그래밍 기법 중에 하나가 바로 모듈화 프로그래밍입니다. 모듈화 프로그래밍은 기능 단위로 코드를 나누어 작성하는 것으로 개별 기능을 함수 단위로 나눌 수도 있고 소스 코드 자체를 분할 할 수도 있습니다. C++과 같은 OOP(객체지향프로그래밍) 언어에서는 클래스를 사용해서 기능과 데이터등도 분리하여 묶을 수 있지만 C언어 에서는 데이터를 바라보는 범위(Scope)가 함수 내부인가 외부인가로 단순하게 나누어 지고 함수 외부의 경우 같은 소스인가 아닌가 정도로 나뉘어 지므로 C언어에서의 모듈화는 함수로 기능 나누기가 그 시작이 될 수 있습니다. 실제로 프로그램 작성 과..
프로그램 소스를 대하는 학생들의 입장에서는 올림피아드 문제들이 무슨 수수께기 푸는 놀이도 아니고 머리만 아픈 이 일을 굳이 왜 해야할까? 하는 사람들이 있을지도 모르겠습니다. 그렇지만 "프로그램 읽기(Reading source code)"는 프로그래머(개발자)에게는 숙명과 같은 일 입니다. 그렇지만 개발자의 생리 자체가 자신이 구상한 것을 프로그램 코드로 일단 작성하고 나면 다시 보려하지 않는 특성이 있습니다. 프로그램을 읽는 경우는 버그를 찾아야 하거나 다른 사람이 작성한 것을 수정해야 하는 경우, 또는 조직에 프로그램 리뷰 프로세스가 있는 경우 리뷰할 목적으로 읽는 정도입니다. 그러나, 프로그래밍 기술을 성장시키는 가장 좋은 방법 중에 하나는 잘 작성된 프로그램을 읽는 것입니다. 예를 들면 가장 널리..
복합 대입 연산자는 +=, -=, *=, /= 처럼 산술연산자(+, -, *, /, %)나 비트연산자(>>, 2) { tot += (n / 10 + 1) * i; } else { tot += (n / 10) * i; } a += i * (n % 10); i *= 10; n /= 10; } printf("%d\n", tot); ① 616 ② 617 ③ 618 ④ 619 ⑤ 620 위의 문제는 정수 연산과 복합 대입 연산자를 잘 알고 있다면 어렵지 않게 풀 수 있습니다. while문의 조건이 n이 0보다 클동안이므로 n의 값이 0이거나 음수면 루프를 빠져나갑니다. n의 값을 10으로 나누면서 루프를 수행하므로 결과적으로 n의 값이 2015, 201, 20, 2일 동안 총 4회 수행하면서 tot의 값을 더해 ..
프로그램을 많이 개발해본 경험자라면 정보 올림피아드의 프로그램 분석 문제가 그리 낯설지 않겠지만, 개발을 많이 하지 않은 사람이라도 다양한 알고리즘에 대한 잦은 경험은 나도 모르게 프로그래밍 실력을 향상 시킬 수 있는 좋은 기회가 됩니다. 알고리즘(Algorithm)은 단순히 "계산법"으로 정리할 수도 있지만 사전에서는 "어떤 문제를 해결하기 위해 정해진 일련의 절차나 방법"으로 정의하고 있습니다. 알고리즘에는 입력이 있고 검증 가능한 처리 과정과 출력이 있는데 정보 올림피아드의 여러 문제들은 이러한 알고리즘의 검증 과정이라고 이해해도 크게 무리가 되지 않을것 같습니다.이러한 프로그램 분석 과정은 보다 효율적인 프로그램을 구현하는 밑바탕이 될 것입니다. 입출력이 작고 외부 연관성이 작은 프로그램이라면 알..