12. 연습문제 (프로그래밍기능사 실기)

header


연습문제 Part 1

문제 1

다음 <Product_A>, <Product_B> 테이블을 참고하여 SQL문의 실행 결과를 쓰시오.

SQL NOT IN SUM
<Product_A>

ID   | NAME
-----|----------
S1   | Monitor
S2   | Mouse
S3   | Keyboard

<Product_B>

ID   | PRICE
-----|------
S1   | 200
S2   | 15
S4   | 50
S5   | 80

SELECT SUM(PRICE) AS total_sum
FROM Product_B
WHERE ID NOT IN (SELECT ID FROM Product_A);

문제 2

다음 JAVA 프로그램의 실행 결과를 쓰시오.

Java static 다형성
public class Polymorphism {
    public static class Base {
        public int calc(int n) { return n * 2; }
        public static String getName() { return "Base"; }
    }
    public static class Derived extends Base {
        public int calc(int n) { return n * 3; }
        public String calc(String s) { return s + "!"; }
        public static String getName() { return "Derived"; }
    }
    public static void main(String[] args) {
        Base obj = new Derived();
        System.out.println(obj.calc(5) + obj.getName());
    }
}

문제 3

현재 작업 디렉터리가 다음과 같을 때, 제시된 상대 경로를 절대 경로로 변환하여 쓰시오.

경로 상대 경로
[현재 디렉터리]
/usr/local/bin

[상대 경로]
../../etc/config

문제 4

다음 설명에 해당하는 리눅스 명령어를 <보기>에서 골라 쓰시오.

Linux 명령어
<보기>
cat   rm   rmdir   mkdir   cp   mv   tail   head   more   who
① 파일의 내용을 화면에 출력하는 명령어이다.
② 디렉터리를 삭제할 때 사용하는 명령어이다.

문제 5

다음 Python 프로그램의 실행 결과를 쓰시오.

Python 리스트
items = ['apple', 'banana', 'cherry', 'date', 'apple']
target = items.count('apple')
items.pop(target)
last_one = items.pop()
new_items = ['egg', 'flour']
items.extend(new_items)
items.reverse()
print(items)

연습문제 Part 2

문제 6

다음은 ‘사용자A’에게 <STAFF> 테이블에 대한 SELECT 권한을 부여하고, 해당 사용자가 다른 사람에게도 권한을 부여할 수 있도록 하는 SQL문이다. 괄호(①, ②)에 알맞은 항목을 쓰시오.

SQL GRANT DCL
( ① ) SELECT ON STAFF TO 사용자A ( ② );

문제 7

다음 JAVA 프로그램의 실행 결과를 쓰시오.

Java 배열 참조
public class Test {
    public static class Node {
        public int value;
        public Node(int value) {
            this.value = value;
        }
    }
    public static void main(String[] args) {
        Node n1 = new Node(10);
        Node n2 = new Node(20);
        Node n3 = new Node(30);
        Node[] nodes = {n1, n2, n3};
        Node temp = nodes[0];
        nodes[0] = nodes[2];
        nodes[2] = temp;
        nodes[1].value = nodes[0].value;
        System.out.println(n1.value + "x" + n2.value + "y" + n3.value);
    }
}

문제 8

다음 Python 프로그램의 실행 결과를 쓰시오.

Python dictionary
scores = [
    [10, 20],
    [30, 40],
    [50, 60]
]
db = {}
idx = 1
for row in scores:
    sum_val = 0
    for val in row:
        sum_val += val
    db[idx] = sum_val
    idx += 1

result = db.get(2)
print(result)

문제 9

다음은 <BOOK_LIST> 테이블에서 ‘도서명’이 “데이터”로 시작하는 항목들을 ‘출판일’ 기준 내림차순으로 정렬하는 SQL문이다. 괄호(①, ②)에 알맞은 항목을 쓰시오.

SQL LIKE ORDER BY
SELECT * FROM BOOK_LIST
WHERE 도서명 LIKE ( ① )
ORDER BY 출판일 ( ② );

문제 10

‘setup.sh’ 파일에 대해 다음과 같은 권한을 8진법 숫자를 사용하여 한 줄의 명령어로 부여하시오.

Linux chmod
권한 설정 조건
소유자(User): 읽기, 실행
그룹(Group): 읽기
기타(Others): 실행

연습문제 Part 3

문제 11

다음 Python 프로그램의 실행 결과를 쓰시오.

Python 재귀 함수
def func(n):
    if n <= 1:
        return 1
    else:
        return n + func(n - 1)

print(func(4))

문제 12

<STUDENT(STU_ID, STU_NAME, MAJOR)> 테이블에 학번 ‘202601’, 이름 ‘홍길동’, 전공 ‘AI’인 데이터를 삽입하는 SQL문을 작성하시오.

SQL INSERT DML

문제 13

다음 Java 코드를 분석하여 각 물음에 답하시오.

Java 예외 처리 try-catch-finally
 1 | public class ExceptionTest {
 2 |     public static void main(String[] args) {
 3 |         int x = 100, y = 0, z = 5;
 4 |         int res1, res2;
 5 |         try {
 6 |             res1 = x / y;
 7 |             System.out.print(x);
 8 |         }
 9 |         catch (NumberFormatException e) {
10 |             res2 = x / z;
11 |             System.out.print(res2);
12 |         }
13 |         finally {
14 |             System.out.print(" done" + z);
15 |         }
16 |     }
17 | }
① 런타임 오류가 발생하는 행(Line) 번호를 쓰시오.
② catch문의 예외 타입을 'ArithmeticException'으로 수정했을 때의 출력 결과를 쓰시오.

문제 14

다음 작업 환경에서 제시된 상대 경로의 절대 경로를 쓰시오.

경로 Windows
[작업 폴더]
D:/Work/Project/Source

[상대 경로]
../Include/header.h

문제 15

다음 설명에 해당하는 리눅스 명령어를 <보기>에서 골라 쓰시오.

Linux 명령어
<보기>
pwd   chmod   fsck   rm   cp   mv   ls   touch   grep   man
① 현재 작업 디렉터리의 절대 경로를 출력하는 명령어이다.
② 파일 시스템의 무결성을 점검하고 오류를 수정하는 명령어이다.

연습문제 Part 4

문제 16

다음 <Stock> 테이블을 보고 SQL문의 실행 결과(행의 개수)를 쓰시오.

SQL AND OR COUNT
<Stock>

CODE | QTY | PRICE
-----|-----|------
A1   | 50  | 1000
A2   | 10  | 5000
A3   | 100 | 2000
A4   | 5   | 8000
A5   | 80  | 1500

SELECT COUNT(*) FROM Stock
WHERE QTY > 40 AND PRICE >= 1500 OR QTY <= 5;

문제 17

문자 형태의 숫자를 정수로 변환하여 계산하는 다음 Java 코드의 괄호(①)에 들어갈 공통 메소드와 최종 출력 결과를 쓰시오.

Java Character 형변환
public class Main {
    public static void main(String[] args) {
        char c1 = '4';
        int v1 = Character.( ① )(c1);
        char c2 = '+';
        int v2 = Character.( ① )(c2);
        char c3 = '8';
        int v3 = Character.( ① )(c3);
        System.out.print(v1 * v2 + v3);
    }
}

문제 18

다음 Python 프로그램의 실행 결과를 쓰시오.

Python 재귀 함수
def process(a, b, res):
    if a >= b:
        return res
    a += 2
    res += a
    return process(a, b, res)

x, y, z = 0, 4, 0
z = process(x, y, z)
print('x=', x, 'z=', z)

문제 19

<MEMBER> 테이블에서 ‘거주지’ 컬럼의 값을 중복 없이 한 번씩만 출력하는 SQL문을 작성하시오.

SQL DISTINCT

문제 20

다음 Java 프로그램의 실행 결과를 쓰시오.

Java printf 포맷
public class FormatTest {
    public static void main(String[] args) {
        double val = 12.5678;
        System.out.printf("%.1f", val);
    }
}

연습문제 Part 5

문제 21

다음 Python 프로그램의 실행 결과를 쓰시오.

Python 정렬 문자열
def sort_logic(data):
    data = list(data)
    n = len(data)
    for i in range(n):
        for j in range(i + 1, n):
            if data[i].upper() < data[j].upper():
                data[i], data[j] = data[j], data[i]
    return "".join(data)

word = "pAsSCal"
print(sort_logic(word))

문제 22

다음 조건에 맞는 SQL문을 완성하기 위해 괄호(①~③)에 들어갈 키워드를 쓰시오.

SQL BETWEEN NOT LIKE ORDER BY
조건
• <MEMBER> 테이블에서 나이가 20세 이상( ① ) 30세 이하인 회원을 검색한다.
• 이름을 기준으로 오름차순( ② ) 정렬한다.
• 주소가 "서울"로 시작하지 않는( ③ ) 회원을 필터링한다.
SELECT * FROM MEMBER
WHERE AGE BETWEEN 20 ( ① ) 30
  AND ADDRESS ( ③ ) '서울%'
ORDER BY NAME ( ② );

문제 23

다음은 <EMPLOYEE> 테이블에서 SALARY가 5000 이상인 직원의 ID, NAME을 추출하여 <HIGH_PAY>라는 이름의 뷰를 생성하는 SQL문이다. 괄호(①~③)에 알맞은 키워드를 쓰시오.

SQL VIEW CREATE
CREATE VIEW HIGH_PAY
( ① ) ( ② ) ID, NAME
FROM EMPLOYEE
( ③ ) SALARY >= 5000;

문제 24

다음 Java 코드의 실행 순서를 Line 번호로 나열하시오. (예: 1, 2, 3…)

Java 예외 처리 실행 순서
 1 | public class OrderTest {
 2 |     public static void main(String[] args) {
 3 |         int[] arr = {1, 2};
 4 |         try {
 5 |             int n = 5 / 0;
 6 |             System.out.println(arr[5]);
 7 |         }
 8 |         catch (ArithmeticException e) {
 9 |             System.out.println("Error 1");
10 |         }
11 |         catch (ArrayIndexOutOfBoundsException e) {
12 |             System.out.println("Error 2");
13 |         }
14 |         finally {
15 |             System.out.println("End");
16 |         }
17 |     }
18 | }

문제 25

다음 Python 프로그램의 실행 결과를 쓰시오.

Python 문자열 리스트
text_list = "python-is-easy".split("-")
limit = 10
val_list = list(range(1, limit, 3))
val_list.remove(4)
print(text_list[0].find('y') + val_list[1])

핵심 요약

SQL 핵심 포인트

  • NOT IN (서브쿼리) : 서브쿼리 결과에 포함되지 않는 행 검색, SUM/AVG 등 집계 함수와 결합 가능
  • GRANT ~ WITH GRANT OPTION : 권한 부여 시 재부여 권한까지 함께 부여
  • LIKE : %(0개 이상 문자), _(정확히 1개 문자), NOT LIKE로 부정 검색
  • INSERT INTO ~ VALUES : 테이블에 새로운 튜플 삽입
  • AND/OR 우선순위 : AND가 OR보다 먼저 평가, 필요 시 괄호로 명시
  • DISTINCT : 중복 행 제거하여 고유 값만 출력
  • CREATE VIEW ~ AS SELECT : 가상 테이블(뷰) 생성, WHERE로 조건 지정
  • BETWEEN A AND B : A 이상 B 이하 (경계값 포함)

Java 핵심 포인트

  • static 메서드 vs 인스턴스 메서드 : static은 참조 타입(하이딩), 인스턴스는 실제 객체 타입(오버라이딩)
  • 배열 참조 교환 : 배열 요소의 참조를 교환해도 원본 객체(n1, n2, n3) 자체는 변하지 않음
  • try-catch-finally : 예외 타입이 일치해야 catch 실행, finally는 항상 실행
  • Character.getNumericValue() : 숫자 문자는 해당 정수 반환, 비숫자 문자는 -1 반환
  • printf("%.nf") : 소수점 이하 n자리까지 반올림 출력
  • 예외 처리 실행 순서 : try → 예외 발생 → 일치하는 catch → finally 순으로 실행

Python 핵심 포인트

  • 리스트 메서드 : count()(개수), pop(i)(제거·반환), extend()(확장), reverse()(역순)
  • dict.get(key) : 딕셔너리에서 key에 해당하는 value 반환 (없으면 None)
  • 재귀 함수 : 종료 조건과 반환값 누적 패턴 이해, 매개변수 전달 시 원본 불변 (정수)
  • 문자열 정렬 : .upper()로 비교 기준 통일, 교환 시 원래 대소문자 유지
  • split() / find() : 구분자 기준 분리, 문자열 내 첫 번째 인덱스 반환
  • range(start, stop, step) : start부터 stop 미만까지 step 간격의 수열 생성

경로 & Linux 핵심 포인트

  • 상대 경로 → 절대 경로 : ..를 만나면 한 단계 위로 이동, 남은 경로를 이어 붙임
  • Windows 경로 : 드라이브 문자(D:)로 시작, 구분자는 / 또는 \ 사용
  • pwd : 현재 작업 디렉터리 출력, fsck : 파일 시스템 무결성 점검
  • cat : 파일 내용 출력, rmdir : 빈 디렉터리 삭제
  • chmod (8진법) : 읽기(4)+쓰기(2)+실행(1)을 소유자/그룹/기타 순으로 지정