IPO(Input Process Output) 모델은 프로그램을 분석하거나 설명하는데 사용하는 가장 기본적인 모델입니다. 프로그램으로 들어오는 입력 자료의 구조와 형태, 처리 내용과 방식, 출력 자료의 구조와 형태를 명확하게 분석하거나 설계하는 것은 안정적인 프로그램의 시작이라 할 수 있습니다. [49-50] 다음과 같은 문제를 해결하기 위해 프로그램을 작성하였다. 물음에 답하시오. 무게가 서로 다른 개의 물건이 있다. 각 물건은 1부터 까지 번호가 매겨져 있다. 우리는 일부 물건 쌍에 대해서 양팔 저울로 어떤 것이 무거운 것인지를 측정한 결과표를 가지고 있다. 이 결과표로부터 직접 측정하지 않은 물건 쌍의 비교 결과 를 알아낼 수도 있고 알아내지 못할 수도 있다. 예를 들어, 총 6개의 물건이 있고, ..
이번 글에서는 함수가 코드의 핵심 역할을 하는 문제들을 골라 보았습니다. C언어를 기반으로 프로젝트를 수행하다보면 개인적으로 자주 적용하는 프로그래밍 기법 중에 하나가 바로 모듈화 프로그래밍입니다. 모듈화 프로그래밍은 기능 단위로 코드를 나누어 작성하는 것으로 개별 기능을 함수 단위로 나눌 수도 있고 소스 코드 자체를 분할 할 수도 있습니다. C++과 같은 OOP(객체지향프로그래밍) 언어에서는 클래스를 사용해서 기능과 데이터등도 분리하여 묶을 수 있지만 C언어 에서는 데이터를 바라보는 범위(Scope)가 함수 내부인가 외부인가로 단순하게 나누어 지고 함수 외부의 경우 같은 소스인가 아닌가 정도로 나뉘어 지므로 C언어에서의 모듈화는 함수로 기능 나누기가 그 시작이 될 수 있습니다. 실제로 프로그램 작성 과..
복합 대입 연산자는 +=, -=, *=, /= 처럼 산술연산자(+, -, *, /, %)나 비트연산자(>>, 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)은 단순히 "계산법"으로 정리할 수도 있지만 사전에서는 "어떤 문제를 해결하기 위해 정해진 일련의 절차나 방법"으로 정의하고 있습니다. 알고리즘에는 입력이 있고 검증 가능한 처리 과정과 출력이 있는데 정보 올림피아드의 여러 문제들은 이러한 알고리즘의 검증 과정이라고 이해해도 크게 무리가 되지 않을것 같습니다.이러한 프로그램 분석 과정은 보다 효율적인 프로그램을 구현하는 밑바탕이 될 것입니다. 입출력이 작고 외부 연관성이 작은 프로그램이라면 알..
C언어에서 함수 만큼이나 중요한 요소가 있을까 싶을 정도로 C언어에서 꼭 이해가 필요한 영역입니다. 함수를 사용하기 위해서는 선언(Declaration)과 정의(Definition)가 있어야 하는데 사용할 함수가 동일한 소스 코드에 위치하는 내부 함수의 경우에는 선언부를 생략하고 정의만 하기도 하지만 선언부를 소스 코드 상단이나 헤더 파일에 기술하고 하단부에 함수의 몸체(Body)를 정의하는 방식을 주로 사용합니다. void swap(int *i1, int *i2); int main() { int a = 10; int b = 20; swap(&a, &b); printf("\na = %d , b = %d", a, b); } void swap(int *i1, int *i2) { int tmp; tmp = *..
이번 문제를 통해서는 C언어 연산자(Operator)의 종류와 연산자별 우선 순위(Precedence)와 결합 방향(Associativity, 결합성, 연관성)을 다룰까 합니다. 연산 우선 순위는 서로 다른 연산자가 섞여 있는 경우 어떤 연산자를 먼저 수행할 것인지를 다루는 것으로 "a + b * c"인 경우 b*c를 먼저 수행하고 그 결과와 a를 더하는 작업을 나중에 수행하는 것과 같습니다. 결합 방향은 동일한 순위 레벨(+와 -는 같은 수위이고 *과 /도 동일 순위)을 가진 연산자가 섞여 있는 경우 연산 순서를 좌->우로 할지 우->좌로 수행할 지를 결정합니다. 예를 들어 "a + b+ c"는 좌->우 결합성을 가져서 a+b 결과에 c를 더합니다. 그런데 캐스팅, 주소추출등의 연산자는 우->좌 방향으..
정보 처리 과정을 가장 단순한 구조로 설명할 때 입력(Input)-처리(Process)-출력(Output)으로 말하는 것처럼 프로그램에 있어 입력과 출력 과정은 프로그램의 정체성을 나타내는 매우 중요한 부분입니다. 요즘이야 스마트폰으로 다양한 센서 정보를 받기도 하지만 전통적인 C언어의 표준 입력은 키보드이고 C언어에서는 표준 입력에 대해서 stdin이라는 파일 포인터를 제공합니다. 프로그램에서 프린터나 인터넷과 같은 통신으로 출력을 내보낼 수도 있지만 C언어에서는 표준 출력은 화면이고 C언어에서는 표준 출력에 대해서 stdout이라는 파일 포인터를 제공합니다. C언어에서는 stdin, stdout, stderr과 같은 시스템 파일포인터와 함께 표준 입출력을 위한 라이브러리 함수를 제공하는데 표준 입력에..
2015년도 정보올림피아드 지역 예선 문제는 다시 봐도 참 출제를 잘 했다 싶습니다. 틀린 문제를 통해서도 중요한 학습을 하게 할 뿐만아니라 출제된 문제들을 통해서 C언어의 주요한 부분을 만날 수 있기 때문입니다. 이번에는 C언어의 기본 문법에 대한 문제들을 다루어 볼까 합니다. 18. 다음 중 변수의 이름으로 사용할 수 없는 것은? ① thisway ② int_char ③ star*star ④ that_way ⑤ _6_ 위의 문제는 C언어의 변수명 작성 규칙을 다룬 것으로 아래와 같이 아주 단순합니다. 변수명으로 사용할 수 있는 문자는 영문 대문자(A~Z), 소문자(a~z), 숫자(0~9), 그리고 언더스코어(_) 입니다.사용 가능한 문자 이외의 어떠한 문자도 사용할 수 없습니다(공백등의 특수 문자도 ..