한눈에 보는 출제 패턴
같은 문제가 그대로 돌아온다
2025년 2회부터 2026년 2회까지, 매 회차 20문항 중 8~9문항이 예전 기출과 정답까지 같았습니다. 주로 2~6년 전 문제가 다시 나옵니다. 합격선이 12문항이니 기출만 확실히 해도 절반 이상입니다.
코드 문제가 크게 늘었다
Java·C·Python 출력값 문제가 2020년엔 회당 3~5문항이었는데 2023~2025년엔 8~9문항입니다. 2026년도 7문항. 전체의 40% 가까이가 코드입니다.
서술형은 사라졌다
"서술하시오" 문제는 2022년 1회(삭제 이상)가 마지막입니다. 지금은 용어 단답, 보기 고르기, 빈칸 채우기, 출력값 쓰기뿐이라 정확한 용어와 철자가 중요합니다.
회차별 코드 문항 수 (Java · C · Python)
막대에 마우스를 올리면 언어별 개수가 나옵니다. 누적: Java 57 · C 58 · Python 23문항
표로 보기
| 회차 | Java | C | Python | 합계 |
|---|
또 나온 문제
같은 문제 또는 같은 개념이 2번 이상 출제된 것만 모았습니다. 왼쪽 숫자는 출제 횟수(빨간 동그라미 = 3회 이상), 빨간 회차는 2025~2026년 출제입니다. 회차를 누르면 그 번호의 문제를 바로 풀 수 있고, 문제·해설 보기를 누르면 회차별 정답과 해설이 펼쳐집니다.
회차 표기: 20-3 = 2020년 3회
코드 문제 함정 패턴
코드는 매번 조금씩 바뀌지만 노리는 함정은 같습니다. 짧은 예시로 정리했습니다.
Java 57문항
메서드는 객체 따라, 필드는 변수 타입 따라
Base a = new Derivate(); // Base.x=3, Derivate.x=7 a.getX(); // 오버라이딩 → Derivate 것 실행 a.x; // 필드 → Base의 x = 3
static 메서드도 변수 타입(부모) 것이 실행됩니다.
24-3 → 52 · 25-2 → 5P부모 메서드 안에서 부른 메서드도 자식 것
부모의 paint()가 draw()를 부르면, 자식이 draw()를 오버라이딩했을 때 자식 draw()가 실행됩니다.
23-3 → BDCDD오버로딩은 컴파일 때, 선언 타입 기준
A 타입 변수로 부르면 A에 있는 시그니처만 후보입니다. 자식에만 있는 f(String)은 선택되지 않습니다. 제네릭 T는 Object로 취급됩니다.
26-1 → 2 · 24-3 → B0생성자: super()가 항상 먼저
자식 생성자는 첫 줄에서 부모 생성자를 부릅니다. this(…)로 다른 생성자에 넘기는 흐름까지 따라가세요. 부모 생성자 안에서 호출한 메서드도 오버라이딩된 자식 것입니다.
23-1 → 500 · 25-1 → 54 · 24-1 실행 순서 → 6 3 1 7 2== 는 주소, equals는 값
String s1 = "A", s2 = "A";
String s3 = new String("A");
s1 == s2 // true (같은 리터럴)
s1 == s3 // false
s1.equals(s3) // true
23-2 → truefalsetruetrue · 24-2 배열 == → NNN
예외: 맞는 catch 하나 + finally 항상
위에서부터 처음 맞는 catch 하나만 실행하고, finally는 무조건 실행합니다.
24-3 → 101 · 25-1 → 출력1출력5문자열 + 숫자는 왼쪽부터
9 + 2 + "2" + "3" // 11 + "2" + "3"26-1 → 1123
switch에 break가 없으면 끝까지
맞는 case부터 아래 case를 전부 실행합니다. C도 같습니다.
20-1 · 22-2 → -8 · 23-2(C) → BCDC 58문항
*p+n 과 *(p+n) 구분
char *p = "KOREA"; p+3 // "EA" (문자열) *(p+3) // 'E' *p+2 // 'K'+2 = 'M'20-4 · 23-3
포인터 배열과 이중 포인터
int *arr[3] = {&a, &b, &c}; // 12, 24, 36
*arr[1] + **arr + 1 // 24 + 12 + 1
21-3 → 37 · 24-2 · 24-3 · 25-2
구조체 포인터와 연결 리스트
p->x 는 (*p).x, p++ 는 다음 배열 원소. 연결 리스트는 next를 손으로 따라가며 그려 보세요. 앞에 끼워 넣는 리스트는 순서가 뒤집힙니다.
21-1 · 21-3 · 24-2 · 24-3 · 25-1 · 25-2 · 25-3 · 26-2 (8회!)값 전달은 원본이 안 바뀐다
void swap(int a, int b) {...} // 복사본만 바뀜
void f1(int *i) { *i = 50; } // 원본이 바뀜
24-2 · 26-2 → 50, 50, 2, 8
static 지역 변수는 값이 남는다
함수가 끝나도 0으로 돌아가지 않습니다. 호출할 때마다 2씩 늘면 2+4+6+8.
24-3 → 20비트·시프트와 연산자 우선순위
29 << 2 // 29 × 4 = 116 z & z >> 1 // >> 가 & 보다 먼저24-1 → 151 · 25-1 · 25-3 → 0
단골 알고리즘
팩토리얼 재귀, 소수 판별, 완전수(약수 합), 버블·선택 정렬, 스택·큐, 문자열 뒤집기, 2진수↔10진수 변환.
22-1 · 22-3 · 23-1 · 23-2 · 23-3 · 24-1 · 25-2Python 23문항
슬라이싱은 끝 인덱스 미포함
a = "engineer information processing" a[:3] # 'eng' a[4:6] # 'ne' list(range(10))[::-2] # 9 7 5 3 122-2 · 23-2 · 26-2 · 26-1 → 9A7A5A3A1A
set은 중복 X, 순서 X
add는 이미 있으면 무시, remove는 삭제, update는 여러 개 추가. 답은 원소 집합으로 씁니다.
20-2 · 23-1얕은 복사: m[:]는 바깥만 복사
m = [[1],[2],[3],[4]] b = m[:] # 안쪽 리스트는 공유 b[1] += b[0] # m[1]도 [2, 1]이 됨26-1 → 10
리스트 메서드
extend는 원소를 풀어서 추가, append는 통째로 하나 추가. pop은 꺼내고 삭제, reverse는 순서 뒤집기.
22-1출력 표기 그대로
print(a == b)는 False(첫 글자 대문자). split(), join(), "%s" 포맷, f-string, type(), enumerate도 나왔습니다.
SQL 키워드
SQL은 거의 매회 1~3문항. 빈칸에 들어갔던 키워드와 실행 결과를 묻는 형태가 대부분입니다. 키워드마다 예시와 실행 결과는 SQL 사전에 있어요.
한 번만 나온 문제 · 다음 차례 후보
최근 회차는 2~6년 전 문제를 다시 냅니다. 아래는 아직 한 번만 나온 것들이라, 다음에 돌아올 가능성이 있는 후보입니다. 출제 경향에서 본 추정이지 보장은 아닙니다.
공부 순서
- 또 나온 문제 목록을 정답 가리기를 켜고 두 바퀴. 동그라미 3회 이상부터.
- 코드 함정 패턴을 익힌 뒤 기출 풀기에서 회차별 코드 문제를 손으로 직접 따라가며 풀기. 매회 7~9문항이라 여기서 합격이 갈립니다.
- 계산 문제 연습: 서브넷(7회), 스케줄링 평균 대기시간(5회), 페이지 교체 부재 횟수(2회). 방식만 알면 매번 점수.
- SQL 키워드는 직접 써 보기. 철자 하나 틀려도 오답입니다.
- 남는 시간에 다음 차례 후보의 용어를 영어 약자까지 외우기.
정답은 복원 기출 기준이라 실제 시험지와 표현이 조금 다를 수 있고, 일부 문항은 정답을 두고 의견이 갈립니다.