알고리즘과 DB 일부 문제만 정리하였습니다.
최근 기출문제(2019년부터)는 하단 링크를 참고해 주세요.
정보처리산업기사 실기 출제 유형 및 최근 기출 문제 정리(19년 1회부터 21년 1회)
정보처리 산업기사 실기 시험은 2017년 한 번 개정되고 내년에 NCS로 다시 개정을 앞두고 있습니다. 이 글에서는 2019년 1회부터 가장 최근에 있었던 2021년 1회까지 어떤 문제가 출제되었는지 정리
developer-rooney.tistory.com
알고리즘 - 자바
다음 Java 언어로 구현한 프로그램을 분석하여 그 실행 결과를 적으시오. (6점)
<코드>
public class Test {
public static void main(String[] args) {
int a[] = new int[8];
int d = 11, n = 0;
do {
a[n++] = d % 2;
d /= 2;
} while ( d > 0 );
for (n = 7; n >=0; n--) {
System.out.printf("%d", a[n]);
}
}
}
정답
0 0 0 0 1 0 1 1
해설
이 문제는 8개의 값이 들어갈 수 있는 정수 배열 a에 do ~ while문을 통해 값을 넣어주고 for문으로 입력된 값을 역순으로 출력하는 문제입니다.
정수 d = 11, n = 0 으로 초기화되어 있는데 do ~ while문에서 a[n++]에 d를 2로 남았을 때 나머지 값을 입력해 주고, d가 0보다 클 때까지만 2씩 나누며 반복합니다.
우선, 몇 번 반복되는지 알기 위해 조건 d> 0 에 해당되는 조건을 확인합니다. d는 정수로 선언되어 있으므로 나눴을 때 소수점 뒷자리는 버리고 정수 부분만 저장하면 되는데 d의 첫 값 11과, 11을 2로 나눴을 때 나오는 값을 순차적으로 보면 11, 5, 2, 1이 나옵니다.
즉, 4번 반복이 이뤄지고 정수 배열 a의 a[0], a[1], a[2], a[3]에만 값이 들어갑니다.
이제 배열 a의 세 번째 인덱스까지 들어갈 값을 살펴봅시다.
a[n++]는, n의 초기값이 0이므로 첫 회전 시 a[0]이 되고 1씩 증가하며 반복합니다. 이 순서대로 a[3]까지 d % 2 값을 넣으면
a[0] = 11 % 2 → 1 저장;
a[1] = 5 % 2 → 1 저장;
a[2] = 2 % 2 → 0 저장;
a[3] = 1 %2 → 1 저장;
위처럼 저장됩니다.
배열은 총 8칸이므로 a[3] 이후의 나머지 인덱스에는 자바의 정수 배열 특성상 0이 이미 저장되어 있어 아래와 같습니다.
a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] |
1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 |
출력 부분에서는 n이 7에서 시작하여 0과 같거나 클 때까지 1씩 감소하며 반복하므로 a배열의 값을 역순으로 출력하면 됩니다.
알고리즘 - C언어
다음 C언어의 <코드>와 <출력>을 보고 프로그램을 분석하여 괄호 (1) ~ (3)에 가장 적절한 답을 적으시오. (9점)
<코드>
#include <stdio.h>
#define s 6
void bubble_sort(int list[]) {
int j, k, p, tmp;
for (j = 1; j < s; j++) {
for (k = 0; k < s - j; k++) {
if ( ( 1 ) > list[k + 1]) {
tmp = list[k];
list[k] = list[k + 1];
list[k + 1] = tmp;
}
for (p = 0; p < s; p++) {
printf("%d", list[p]);
}
printf("\n");
}
}
}
main() {
int list[s] = { 9, 4, 3, 6, 8, 1 };
int i;
for (i = 0; i < s; i++)
printf("%d", ( 2 ) );
printf("\n");
( 3 )(list);
}
<출력>
* 버블 정렬 과정에 대한 출력이므로 일부 생략하였습니다.
943681
493681
439681
436981
436891
(생략)
134689
정답
(1) list[k]
(2) list[i]
(3) bubble_sort
해설
함수 이름이 bubble_sort이고 출력 부분에서 오름차순 정렬되어 가는 과정을 보면 버블 정렬인 것을 알 수 있습니다. 버블 정렬은 오름차순일 때, 첫 번째 인덱스를 첫 기준으로 삼아 기준이 되는 수와 바로 뒤에 있는 수를 비교하여 기준이 되는 수가 뒤에 있는 수보다 작을 경우 교환을 하며 마지막 인덱스까지 정렬을 진행합니다.
이는 bubble_sort 함수의 이중 for문 속 if문을 통해 알 수 있는데 변수 tmp를 통해 list[k]와 list[k + 1] 간의 교환이 이뤄지므로 (1)에 들어갈 답은 list[k]입니다.
(2)번 답은 제일 처음 실행되는 기존 배열에 들어간 값을 순서대로 출력하는 부분이므로 list[i]가 들어가야 되고, (3)에는 위에서 정의한 함수 bubble_sort를 이용한 정렬이 필요한 부분입니다.
데이터베이스
다음 <학생> 테이블과 <성적> 테이블을 참고하여 각 질문에 대한 SQL문을 완성하시오. (10점)
<학생>
학번 | 이름 | 나이 |
1655000 | 김민서 | 25 |
1855011 | 박종현 | 23 |
1900021 | 이진성 | 22 |
<성적>
학번 | 공통 | 교양 | 평균 |
1655000 | 94 | 90 | 92 |
1855011 | 88 | 95 | 91 |
1900021 | 65 | 80 | 77 |
(1) <학생> 테이블에서 학번이 "19"로 시작하고 나이가 22인 튜플을 검색하는 SQL을 작성하시오.
(2) <성적> 테이블에서 학번과 평균을 검색하되, 평균을 기준으로 오름차순 정렬하는 SQL문을 작성하시오.
(3) <학생> 테이블의 학생 중에서 성적 자료가 없는 튜플을 검색하는 SQL문을 작성하시오.
정답
(1) SELECT * FROM 학생 WHERE 학번 LIKE '19%' AND 나이 = 22;
(2) SELECT 학번, 평균 FROM 성적 ORDER BY 평균 ASC;
(3) SELECT * FROM 학생 WHERE 학번 NOT IN(SELECT 학번 FROM 성적);
'정보처리산업기사 > 실기 기출문제' 카테고리의 다른 글
정보처리 산업기사 실기 2020년 제1회 기출문제 정리 (0) | 2021.07.08 |
---|---|
정보처리 산업기사 실기 2019년 제3회 기출문제 정리 (0) | 2021.07.08 |
정보처리 산업기사 실기 2019년 제1회 기출문제 정리 (0) | 2021.07.07 |
정보처리 산업기사 실기 2018년 제3회 기출문제 정리 (2) | 2021.07.07 |
정보처리 산업기사 실기 2018년 제2회 기출문제 정리 (0) | 2021.07.07 |