반응형

알고리즘과 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 성적);

반응형

+ Recent posts