반응형

알고리즘과 DB 일부 문제만 정리하였습니다.

 

최근 기출문제(2019년부터)는 하단 링크를 참고해 주세요.

 

정보처리산업기사 실기 출제 유형 및 최근 기출 문제 정리(19년 1회부터 21년 1회)

정보처리 산업기사 실기 시험은 2017년 한 번 개정되고 내년에 NCS로 다시 개정을 앞두고 있습니다. 해당 글은 2017년 개정된 이후 기출 문제 중에서 2019년 1회부터 가장 최근에 있었던 2021년 1회까

developer-rooney.tistory.com

 

알고리즘 - C언어

 

다음 C언어의 <코드>와 <출력>을 보고 괄호 (1) ~ (3)에 가장 적절한 답을 적으시오.(6점)

 

<코드>

#include <stdio.h>

main() {
    int i, j;
    for (i = 2; i <= 9; i++) {
        for(j = 1; j <= 9; j++) {
            printf("%d * %d = %d\n",  (1),(2),(3)  );
        }
    }
}

 

<출력>

 

2 * 1 = 2

2 * 2 = 4

2 * 3 = 6

   .

   .

(생략)

   .

3 * 1 = 3

3 * 2 = 4

   .

   .

(생략)

   .

9 * 8 = 72

9 * 9 = 81

 

정답

 

(1) i

(2) j

(3) i * j

 

해설

 

구구단 문제입니다. printf를 통해 출력하고 있고 세 개의 %d에 각각 어떤 값이 들어가야 하는지 맞춰야 합니다. 이중 for문 중 바깥 for문 i가 2부터 시작하기 때문에 몇 번째 단인지 나타내는 역할을 합니다. 따라서 (1)에는 i가 들어가고 j의 최종 값이 9이기 때문에 단에서 1부터 9까지 곱하는 역할을 하는 변수라는 것을 알 수 있기에 (2)에는 j가 들어갑니다. 마지막 %d에는 곱해진 값인 i * j(혹은 j * i)를 넣으면 됩니다.

 

 

알고리즘 - 자바

 

다음은 Java 언어로 1부터 100의 범위 안에 가장 큰 소수를 구하는 알고리즘을 구현한 것이다. 괄호 안에 들어갈 가장 적당한 답을 적으시오.(4점)

 

import java.lang.Math;

public class Test {
    public static void main(String[] args) {
        int p = 2;
        int n = 3;
        
        while(true) {
            double t = Math.sqrt(n);
            int m = (int)t;
            for (int i = 2; i <= m; i++) {
                int r = n % i;
                if (r == 0)
                    break;
                if (i == m)
                    p = (      );
            }
            n++;
            if (n > 100)
                break;
        }
        
        System.out.printf("%d\n" p);
    }
}

 

정답

 

n

 

해설

 

특정 범위의 숫자 중에서 가장 큰 소수를 구하는 알고리즘 문제는 순서도에서도 자주 출제되는 문제입니다. 소수란 1과 자기 자신으로만 나눠지는 수를 말하고 특정 수가 소수인지 알아볼 때는 그 수를 그 수의 제곱근까지만 나눠서 떨어지지 않으면 소수라고 볼 수 있습니다.

 

예를 들어, 16의 제곱근은 4이므로 16을 1에서 4까지 나눴을 때 중간에 나눠 떨어지면 소수가 아니고 나눠 떨어지지 않으면 소수입니다. 하지만 제곱근은 수에 따라 실수가 나올 수도 있기 때문에 정수로 변환하는 과정이 필요합니다.

 

우선 변수를 살펴봅니다. 정수 n과 p가 각각 2와 3으로 초기화되어 있습니다. n은 100까지 1씩 증가할 변수이고 p는 가장 큰 소수를 담을 변수입니다.

 

while(true)는 무한 루프를 의미합니다. 중간에 break는 이 무한 루프를 종료시키는 명령어인데 'r == 0' 이거나 'n > 100' 일 때 실행됩니다. r이 0과 같아지면 제곱근까지 나누던 도중 나누어 떨어졌다는 의미이므로 이미 소수가 아닌 걸로 판정되어 더 나눌 필요가 없어져 break로 빠져나가고 n > 100 일 경우는 문제에서 제시한 100 범위를 벗어나기 때문에 break로 빠져나갑니다.

 

while문의 실수 t에는 Math.sqrt(n)이 들어가는데 Math.sqrt(n)는 n의 제곱근을 구하는 메소드입니다. 이 수를 정수로 바꾸기 위해 m이라는 새로운 정수 변수를 선언하여 t를 정수로 캐스팅한 값 '(int)t' 를 담아 초기화해줍니다. 그리고 for문을 이용하여 n을 2부터 제곱근 m까지 나누게 되는데 이 부분에서 나머지를 남을 변수 int r 이 n & i 로 초기화됩니다. r이 0이면 나누어 떨어졌기 때문에 이미 소수가 아니고 계속 나눠서 마지막에 증가하는 값 i와 m이 같아지는 경우 그 수는 소수라고 판별되어 p에 소수인지 판별 중인 변수 n을 넣어주면 됩니다.

 

 

데이터베이스

 

1. 다음 <사원> 테이블의 구조를 참고하여 미완성된 SQL문을 완성하시오.(6점)

 

<사원>

직원코드 성명 직책 연봉
12345 루니 대리 3200
12346 램파드 사원 2800

 

<SQL문>

CREATE TABLE 사원(
직원코드 NUMBER NOT NULL,
성명 CHAR(10) UNIQUE,
직책 CHAR(10) (1)(직책(2)('사원','대리','과장','팀장')),
연봉 NUMBER
);

* 괄호는 직책 속성 코드에 (1)과 (2)입니다.

 

정답

 

(1) CHECK

(2) IN

 

해설

 

직책 속성에 특정 값만 들어갈 수 있도록 설정하는 체크 제약조건 문제입니다. 이 문제에서는 직책에 사원, 대리, 과장, 팀장만 들어갈 수 있게 하기 위해 사용하고 있습니다.

반응형

+ Recent posts