IPO(Input Process Output) 모델은 프로그램을 분석하거나 설명하는데 사용하는 가장 기본적인 모델입니다. 프로그램으로 들어오는 입력 자료의 구조와 형태, 처리 내용과 방식, 출력 자료의 구조와 형태를 명확하게 분석하거나 설계하는 것은 안정적인 프로그램의 시작이라 할 수 있습니다. [49-50] 다음과 같은 문제를 해결하기 위해 프로그램을 작성하였다. 물음에 답하시오. 무게가 서로 다른 개의 물건이 있다. 각 물건은 1부터 까지 번호가 매겨져 있다. 우리는 일부 물건 쌍에 대해서 양팔 저울로 어떤 것이 무거운 것인지를 측정한 결과표를 가지고 있다. 이 결과표로부터 직접 측정하지 않은 물건 쌍의 비교 결과 를 알아낼 수도 있고 알아내지 못할 수도 있다. 예를 들어, 총 6개의 물건이 있고, ..
C언어에서는 문자열(String, 스트링) 타입을 지원하지 않습니다. char(signed char) 또는 unsigned char로 정의하는 문자의 배열이나 배열에 대한 포인터가 일반적으로 말하는 스트링이라 할 수 있습니다. 문자형 타입인 char은 1 바이트의 메모리 공간을 차지하는 타입으로 리터럴(상수)은 작은 따옴표(', apostrophe)로 a = 'A';와 같이 표현합니다. 대부분의 영문자, 숫자, 특수문자 등은 32~127 사이의 문자 값으로(아스키, ASCII) 표현 하는데 32 아래의 특수문자들은 눈에 보이지 않는 제어(컨트롤) 문자가 배정되어 있고 대표적인 제어문자로 C에서는 아래와 같이 표현할 수도 있습니다.'\a' : 알람음. 7'\b' : 백스페이스, 8'\f' : 폼피드, 12..
1. 1에서 10까지의 자연수를 모두 곱한 수를 X라고 하자. X를 8진수로 표기하면 제일 오른쪽에 연속으로 나타나는 0은 모두 몇 개일까?① 1 ② 2 ③ 4 ④ 6 ⑤ 8※ 1부터 N까지의 자연수를 모두 곱한 수를 N 팩토리얼이라하고 N!로 표기하는데 10!은 1부터 10까지를 모두 곱한 값입니다. 10!를 8진수로 변환해야 하는데 값도 크고(10!은 3,628,800) 시간을 단축할 필요가 있으므로 팩토리얼을 아래의 그림과 같이 적절하게 분해하는 것도 방법이겠습니다. 자연수인 10진수를 N진법으로 변환하는 과정은 10진수를 N으로 나누면서 그 나머지를 취하면 되는데 10!에서 8로 나누면 나머지는 0이고 몫은 8이 빠진 7! x 9 x 10이 됩니다. 또 8로 나누어야 하는데 2 x 4로 나누면 나..
C언어로 프로그램을 개발하면서 오류를 찾다가 의외의 장소에서 문제를 찾는 경우가 몇번 있었는데 바로 매크로 입니다. C언어에서는 "#define 매크로이름 매크로내용"의 형식으로 매크로를 정의하는데 이 매크로는 실행 과정에 영향을 미치는 것이 아니라 컴파일 과정에만 영향을 미칩니다. 컴파일러가 C 소스 코드를 본격적으로 컴파일하기에 앞서 전처리 과정을(precompile) 거치는데 이때 다루어지는 것이 #define문을 사용하는 매크로입니다. C언어에서는 #define 말고도 #include, #ifdef등의 전처리 문장이 있습니다. 2015년 정보 올림피아드 예선에서도 이 매크로를 다루었습니다. 위의 문제에서는 sq(x)라는 매크로를 정의했는데 이 매크로는 프로그램 실행 과정에 동작하는 것이 아니고 컴..
문제를 보니 올해 처음 참여한 아들이 C언어 공부를 좀더 열심히 했더라면 하는 아쉬움이 남습니다. C언어 기초만 잘 다졌어도 쉽게 맞출 수 있는 문제들이 꽤 있었는데 아쉬움이 있지만 C언어의 기초부터 잘 다져야 한다는 "교훈"을 마음에 새겼으면 하는 바램입니다. C언어 기초와 관련한 몇가지 문제를 풀어보면서 기초를 잘 다졌으면 합니다.18. 다음 중 변수의 이름으로 사용할 수 없는 것은?① thisway ② int_char ③ star*star ④ that_way ⑤ _6_C언어의 변수명은 다음과 같은 특성이 있습니다.영문과 숫자 그리고 밑줄(_ Underscore라 부릅니다)로 구성할 수 있습니다.영문 대문자와 소문자를 구별합니다(Case Sensitive라 합니다) C, C++, Java와 같은 프로..
데이터 정렬(Sort)과 탐색(Search)은 컴퓨터 시스템의 가장 기본적인 기능으로 데이터베이스, 웹 검색, 단순 입력창에 이르기까지 다양한 영역에서 사용하는 것이므로 꼭 알아두어야 할 개념입니다. 퍼스널 컴퓨터가 등장하기 이전 부터 데이터 정렬은 여러 형태로 발전되어 왔는데 예전에는 메모리가 크지 않은 환경이었으므로 이런 제약적인 환경에서도 활용할 수 있는 알고리즘부터 최대한 검색 시간을 줄이기 위하여 검색을 감안하여 정렬된 데이터로 보관하는 기법까지 다양한 알고리즘이 존재합니다. 이런 알고리즘의 복잡도는 O(빅오 Big-Oh)로 표시합니다.■ 버블 정렬(Bubble sort)한쪽 방향으로 이동하면서 인접한 두원소를 비교하여 그 방향 맨 끝에 가장 큰수 또는 가장 작은수를 배치하고 다음번에는 동일 방..
아들의 이번 질문은 머리를 "콩"하고 쥐고 박고 싶은 문제입니다, 시간이 들지만 조금 집중하면 프로그램을 읽고 답할 수 있는 수준의 문제인데 아직 C언어 초보인 것을 감안하면서 차분하게 설명해 보겠습니다. 다음 프로그램의 출력 결과는 무엇인가? int x[10],y[10]; int i,j; int n = 10; for (i = 0; i < n; i++) x[i] = i + 1; for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { y[j] = x[(i + j) % n]; } for (j = 0; j < n; j++) x[j] = y[j]; } printf("%d %d %d\n", x[3], x[6], x[9]); ① 10 3 6② 7 10 3③ 8 1 4④ 9 2 ..
아이 때문에 문제를 풀어보기는 하지만 "정말 어렵구나"하는 탄식이 절로 나옵니다. 이럴때는 머리 좋은 사람들이 얼마나 부러운지......그럼에도 불구하고 생각을 조금 집중하면 천재가 아니어도 풀수있는 문제들이 있습니다. 이번에 아이가 질문해온 문제는 아래와 같습니다. * 네 명의 선생님 A, B, C, D 와 다섯 명의 학생 E, F, G, H, I 가 세 개의 조로 나누어서 봉사활동을 하기로 하였다. 다음과 같은 조건으로 세 개의 조 1, 2, 3으로 나눈다고 할 때, 아래 질문에 답하시오.(1) 각 조는 반드시 세 명으로 구성되어야 한다.(2) 각 조에는 적어도 한 명의 선생님이 포함되어 있어야 한다.(3) E와 H는 같은 조에 배치되어야 한다.(4) D와 F는 같은 조에 배치되어서는 안된다.(5) ..
까까머리 아들의 질문에 답하는 정보올림피아드 문제 풀이입니다. 푸는 과정에 오류가 있거나 더 좋은 방법이 있다면 댓글로 달아 주세요! 정보 올림피아드 문제들은 이렇게 저렇게 해보다가 맞추는 방식보다는 논리적인 계산 과정을 찾기를 원하는 것이므로 문제를 푸는 사람 또한 그런 시각에서 풀이 방법을 찾아야 합니다. 모빌이 좌우가 균형을 이루려면 양쪽에 가해지는 힘이 동일해야 하며 각각에 가해지는 힘은 거리와 추의 무게를 곱하는 방식으로 구할 수 있습니다. 위 그림의 B, C처럼 다단계 모빌의 경우 그 상단에 가해지는 힘은 단순히 양쪽에 달린 추의 무게의 합입니다. 실제 모빌의 경우 실의 무게나 실을 매다는 막대기의 무게 및 강도 등의 변수가 있지만 문제 는 논리적인 사고 능력을 요구하는 것임을 잊지 말아야 합..