11. 모의고사 1회 (프로그래밍기능사 실기)

header


모의고사 1회 Part 1

문제 1

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

경로 상대 경로
[작업폴더]
/srv/app/api/v2

[상대 경로]
../../../static/css

문제 2

다음 각 기능에 해당하는 Linux 터미널 명령어를 <보기>에서 골라 쓰시오.

Linux 명령어
<보기>
grep   cp   cat   rmdir   chmod   ls   mv   pwd   diff   find
① 텍스트 파일에서 특정 문자열 패턴을 검색하는 명령어입니다.
② 파일이나 디렉터리를 복사할 때 사용하는 명령어입니다.

문제 3

<ORDERS> 테이블에 100자의 가변길이를 가진 ‘memo’라는 속성을 추가하는 SQL문을 작성하시오.

SQL DDL ALTER

모의고사 1회 Part 2

문제 4

다음은 <교수> 테이블과 <강의> 테이블을 조인(JOIN)한 결과이다. SQL의 괄호(①, ②)에 알맞은 항목을 적어 SQL문을 완성하시오.

SQL JOIN LEFT JOIN
<교수>

교번 | 이름   | 전공   | 직급
-----|--------|--------|------
201  | 강태호 | 컴퓨터 | 교수
202  | 박지수 | 수학   | 조교수
203  | 윤민준 | 영어   | 강사
204  | 이하나 | 물리   |

<강의>

교번 | 이름   | 과목명   | 학점
-----|--------|----------|------
201  | 강태호 | 자료구조 | 3
202  |        | 선형대수 | 3
203  | 윤민준 |          |
203  | 윤민준 | 영어회화 | 2

SELECT a.교번, 이름, 과목명, 학점
FROM 교수 a LEFT JOIN 강의 b
( ① ) a.교번 = b.( ② )

문제 5

다음 <INVENTORY> 테이블에서 품목별(item) 입고량(quantity)의 합계가 500 이상인 ‘품목명’, ‘최소입고량’, ‘최대입고량’을 조회하는 SQL문을 완성하시오. 괄호(①, ②)에 알맞은 항목을 쓰시오.

SQL AS HAVING
SELECT item, MIN(quantity) ( ① ) 최소입고량, MAX(quantity) ( ① ) 최대입고량
FROM INVENTORY
GROUP BY item
( ② ) SUM(quantity) >= 500

문제 6

다음 Y1과 Y2 테이블에 대해 SQL문을 실행했을 때 출력되는 결과를 쓰시오.

SQL IN AVG
<Y1>

 P  | Q
----|----
 B  | 12
 D  |  7
 F  |  3
 H  |  9

<Y2>

 P  | Q
----|----
 A  |  5
 D  | 14
 E  |  8
 H  |  6

SELECT AVG(Q) AS result
FROM Y2
WHERE P IN (SELECT P FROM Y1);
힌트: Y1의 P 값은 {B, D, F, H}이므로, Y2에서 이에 포함되는 행만 선택됩니다.

모의고사 1회 Part 3

문제 7

다음 JAVA로 구현한 프로그램을 분석하여 그 실행 결과를 쓰시오.

Java Math
public class Solution {
    public static void main(String[] args) {
        int ans = (int)Math.pow(3, Math.floor(Math.PI));
        System.out.printf("%d", ans);
    }
}
힌트: Math.PI ≈ 3.14159..., Math.floor()는 소수점 이하를 버리며, Math.pow(a, b)는 ab를 반환합니다.

문제 8

다음은 문자열에 숫자가 하나라도 포함되어 있는지, 문자열의 길이가 8 이상인지 검사하기 위한 Python 프로그램이다. 괄호(①, ②)에 들어갈 알맞은 코드를 쓰시오.

Python 문자열 매직 메서드
def is_valid_pw(pw):
    return (
        any(c.( ① )() for c in pw)
        and len(pw).( ② )(8)
    )

passwords = ['hello123', 'ab', 'secure99pass']
for pw in passwords:
    print(is_valid_pw(pw))
힌트: ①은 문자가 숫자인지 판별하는 메서드이며, ②는 >= 연산을 메서드로 표현한 것입니다.

문제 9

다음 JAVA로 구현한 프로그램을 분석하여 그 실행 결과를 쓰시오.

Java try-finally
public class Solution {
    int value = 0;
    int run() {
        try {
            return 10;
        } finally {
            value = 20;
        }
    }
    public static void main(String[] args) {
        Solution obj = new Solution();
        System.out.print(obj.run());
    }
}
힌트: try 블록에서 return을 만나면, finally 블록이 실행된 후 반환값이 전달됩니다. 단, finally에서 반환값을 변경하지 않으면 원래 값이 반환됩니다.

모의고사 1회 Part 4

문제 10

다음 JAVA로 구현한 프로그램을 분석하여 그 실행 결과를 쓰시오.

Java static 다형성
public class Solution {
    static class Shape {
        static String type() { return "Shape"; }
        String color() { return "white"; }
    }
    static class Circle extends Shape {
        static String type() { return "Circle"; }
        String color() { return "red"; }
    }
    public static void main(String[] args) {
        Shape obj = new Circle();
        System.out.println(obj.type() + obj.color());
    }
}
힌트: static 메서드는 참조 타입(Shape)에 바인딩되고, 인스턴스 메서드는 실제 객체 타입(Circle)에 바인딩됩니다.

문제 11

다음 Python으로 구현한 프로그램을 분석하여 그 실행 결과를 쓰시오.

Python set dictionary
nums = [2, 4, 6]
dct = {i: i * 3 for i in nums}
s = set(dct.values())
nums[0] = 10
dct[4] = 5
s.add(10)
print(len(s & set(dct.values())))
힌트: &는 두 집합의 교집합 연산입니다. 딕셔너리 값 변경이 기존 set에 영향을 주는지 주의하세요.

문제 12

다음 Python 프로그램에 대하여 다음 각 물음에 답하시오.

Python 문자열 split
 1 | def filter_data(data_list):
 2 |     trimmed = data_list[0:3]
 3 |     output = []
 4 |     for item in trimmed:
 5 |         output.append(item + '-Done')
 6 |     return output
 7 | items = ['x', 'y', 'z', 'w', 'v']
 8 | result1 = filter_data(items)
 9 | result2 = result1[2].split('o')
10 | print(result2[1])
① 오류가 발생하는 Line의 번호를 쓰시오.
② 오류를 정상적으로 수정하여 프로그램이 실행되었을 경우의 실행 결과를 쓰시오.

핵심 요약

경로 & Linux 핵심 포인트

  • 상대 경로 계산 : ..를 만나면 현재 경로에서 한 단계 위로 이동
  • grep : 파일 내 문자열 패턴 검색, cp : 파일/디렉터리 복사

SQL 핵심 포인트

  • ALTER TABLE ~ ADD : 테이블에 새 속성 추가, VARCHAR(n)은 가변길이 문자
  • LEFT JOIN ~ ON : 왼쪽 테이블의 모든 행을 포함하는 조인
  • AS : 별칭 부여, HAVING : 그룹화 결과에 조건 지정 (GROUP BY 이후)
  • IN (서브쿼리) : 서브쿼리 결과에 포함되는 행 검색

Java 핵심 포인트

  • Math.floor(Math.PI) : 3.14... → 3.0 (소수점 이하 버림)
  • try-finally : finally는 반드시 실행되지만, try의 return 값을 변경하지 않음
  • static 메서드 : 참조 타입에 바인딩 (오버라이딩 X, 하이딩 O)
  • 인스턴스 메서드 : 실제 객체 타입에 바인딩 (다형성 적용)

Python 핵심 포인트

  • isdigit() : 문자가 숫자인지 판별하는 문자열 메서드
  • __ge__(n) : >= 연산의 매직 메서드 표현 (예: len(s).__ge__(8)len(s) >= 8)
  • set 교집합 : s1 & s2로 두 집합의 공통 원소 추출
  • split() : 문자열을 구분자 기준으로 분리하여 리스트 반환