인사말
안녕하세요. 이 글을 읽고 계신다면 정보처리기사 또는 정보처리산업기사 수험생이실 것 같습니다.
여러 좋은 서적에서 이론을 잘 설명하고 있지만, 코딩 문제의 경우 같은 문제를 여러 번 풀다 보면 답이 머리에 기억되어 새로운 문제가 필요하게 되는 순간이 옵니다.
그럴 때 더 많은 문제를 풀어보고 도움이 되게 하고자 여러 C언어, JAVA, Python 문제를 변형 시키고 직접 컴파일하여 답을 확인하면서 문제를 만들었습니다.
정보처리 실기를 공부하시는 모든 수험생 여러분, 목표하는 모든 것이 이루어지는 그날까지 응원하겠습니다. 화이팅!
목표를 향해 열심히 노력하시고, 좋은 결과 있기를 기원합니다!
정보처리기사 실기 언어 코딩 기출변형 문제
1. 출력 값을 작성하시오.
#include <stdio.h>
#include <string.h>
void func(char *m[], int n) {
for (int i = 1; i < n; i++) {
char *prev = *(m + i - 1);
char *current = *(m + i);
if (strcmp(prev, current) == 0) {
printf("O");
} else {
printf("N");
}
}
for (char **ptr = m; ptr < m + n; ptr++) {
printf("%s", *ptr);
}
printf("\n");
}
int main() {
char *m[3] = {"A", "A", "A"};
func(m, 3);
return 0;
}
정답
OOAAA
2. 출력 값을 작성하시오.
#include <stdio.h>
#include <string.h>
void func(char *m[], int n) {
for (int i = 1; i < n; i++) {
if (strcmp(m[i - 1], m[i]) == 0) {
printf("Y");
} else {
printf("X");
}
}
for (int i = 0; i < n; i++) {
printf("%s", m[i]);
}
printf("\n");
}
int main() {
char *m[3];
m[0] = "A";
m[1] = "A";
m[2] = "A";
func(m, 3);
return 0;
}
정답
YYAAA
3. 출력 값을 작성하시오.
#include <stdio.h>
void test(int *ls, int n) {
for (int i = 0; i < n / 2; i++) {
int temp = ls[i];
ls[i] = ls[n - i - 1];
ls[n - i - 1] = temp;
}
}
int main() {
int ls[] = {1, 2, 3, 4, 5, 6};
int n = sizeof(ls) / sizeof(ls[0]);
test(ls, n);
int sum_even = 0, sum_odd = 0;
for (int i = 0; i < n; i++) {
if (i % 2 == 0) {
sum_even += ls[i];
} else {
sum_odd += ls[i];
}
}
printf("%d\n", sum_even - sum_odd);
return 0;
}
정답
3
4. 출력 값을 작성하시오.
#include <stdio.h>
int increase(int *local_x) {
static int x = 0;
x += 2;
*local_x += x % 3;
return x + *local_x;
}
int main() {
int x = 1;
int sum = 0;
for (int i = 0; i < 4; i++) {
x *= i + 1;
sum += increase(&x);
}
printf("%d\n", sum);
return 0;
}
정답
137
5. 출력 값을 작성하시오.
#include <stdio.h>
struct Node {
int data;
struct Node* link;
};
void swap(struct Node* p) {
while (p && p->link) {
int temp = p->data;
p->data = p->link->data;
p->link->data = temp;
p = p->link->link;
}
}
int main() {
struct Node a = {1, NULL};
struct Node b = {2, NULL};
struct Node c = {3, NULL};
a.link = &c;
c.link = &b;
swap(&a);
struct Node* ptr = &a;
while (ptr) {
printf("%d ", ptr->data);
ptr = ptr->link;
}
return 0;
}
정답
3 1 2
6. 출력 값을 작성하시오.
#include <stdio.h>
#include <string.h>
int test(void *v, char type) {
if (type == 's') {
return strlen((char *)v);
} else if (type == 'i') {
return 101;
} else {
return 20;
}
}
int main() {
char a[] = "100.0";
float b = 100.0;
double c[2] = {100.0, 200.0};
int result = test(a, 's') + test(&b, 'f') + test(c, 'd');
printf("%d\n", result);
return 0;
}
정답
45
7. 출력 값을 작성하시오.
#include <stdio.h>
#include <setjmp.h>
jmp_buf jump_buffer;
void func() {
longjmp(jump_buffer, 1);
}
int main() {
int sum = 0;
int result = setjmp(jump_buffer);
if (result == 0) {
func();
} else if (result == 1) {
sum = sum + 1;
} else {
sum = sum + 10;
}
sum = sum + 100;
printf("%d\n", sum);
return 0;
}
정답
101
8. 출력 값을 작성하시오.
#include <stdio.h>
typedef struct B {
int x;
int (*getX)(struct B *);
} B;
int getX_B(B *b) {
return b->x * 2;
}
typedef struct A {
B base;
} A;
int getX_A(A *a) {
return a->base.x * 3;
}
int main() {
A b1 = { .base = { .x = 7, .getX = (int (*)(B *))getX_A} };
A b2 = { .base = { .x = 7, .getX = (int (*)(B *))getX_A} };
B *ptrB1 = (B *)&b1;
B *ptrB2 = (B *)&b2;
ptrB1->x = 3;
printf("%d %d %d %d\n", ptrB1->getX(ptrB1), ptrB1->x, getX_A(&b2), b2.base.x);
return 0;
}
정답
9 3 21 7
9. 출력 값을 작성하시오.
#include <stdio.h>
typedef struct Printer {
void (*printInteger)(struct Printer *, int);
void (*printObject)(struct Printer *, void *);
void (*printNumber)(struct Printer *, double);
} Printer;
void printInteger(Printer *p, int a) {
printf("A%d\n", a);
}
void printObject(Printer *p, void *a) {
printf("B%s\n", (char *)a);
}
void printNumber(Printer *p, double a) {
printf("C%f\n", a);
}
typedef struct Container {
void *value;
void (*print)(struct Container *);
} Container;
void printContainer(Container *c) {
Printer printer = {printInteger, printObject, printNumber};
if (c->value != NULL) {
printer.printInteger(&printer, *(int *)c->value);
} else {
printer.printObject(&printer, c->value);
}
}
int main() {
int num = 0;
Container c = {&num, printContainer};
c.print(&c);
return 0;
}
정답
A0
10. 출력 값을 작성하시오.
#include <stdio.h>
void modify(int** ptr, int length) {
for(int index = 0; index < length; index++) {
*(*ptr + index) = (*(*ptr + index) + index) % length;
}
}
void update(int* value, int* source) {
*value = source[*value % 5];
}
int main() {
int data[] = {3, 1, 4, 1, 5};
int* base = data;
int** pointerToBase = &base;
int count = 6;
modify(pointerToBase, 5);
update(&count, data);
printf("%d\n", count);
return 0;
}
정답
2