코드 문제를 못 풀면 합격이 어렵습니다
정처기 실기 20문항 중 코드 출력 문제는 보통 4–6문제, 배점으로 치면 30–40점 정도를 차지해요. 합격 기준이 60점인데, 여기서 대부분을 날리면 나머지 암기 문제를 다 맞춰도 턱없이 부족합니다.
반대로 말하면, 코드 문제만 안정적으로 맞추면 합격 확률이 확 올라간다는 뜻이기도 해요. 암기 과목은 운이 작용하지만, 코드는 패턴을 익히면 꽤 안정적으로 점수가 나오거든요.
어떤 언어가 나오나
시험에서는 C, Java, Python 세 언어가 나와요. 문제마다 언어가 다르고, 선택할 수 없습니다. 그래서 세 언어 모두 읽을 줄은 알아야 해요.
다만 "코딩을 할 줄 알아야 한다"는 게 아니에요. 주어진 코드의 실행 결과를 적는 것이 전부입니다. 코드를 직접 작성하는 문제는 거의 안 나와요.
| 언어 | 출제 빈도 | 특징 |
|---|---|---|
| C | 매회 1–2문제 | 포인터, 배열, 구조체 위주. 포인터가 어려우면 시간을 많이 잡아먹음 |
| Java | 매회 1–2문제 | 클래스, 상속, 오버라이딩 위주. 객체지향 개념이 섞여 나옴 |
| Python | 매회 1–2문제 | 리스트, 슬라이싱, 딕셔너리 위주. 상대적으로 읽기 쉬움 |
문제 유형별 접근법
유형 1: 변수 추적 (가장 기본)
a = 5
b = a + 3
a = b - 1
print(a, b)
이런 유형은 줄 단위로 변수 값을 옆에 적어가면서 따라가면 돼요.
실전 팁:
- 시험지 여백에 변수표를 만들어요.
a=? b=?를 줄마다 갱신 - 대입 순서를 헷갈리면 안 됩니다.
a = b는 b의 값을 a에 넣는 거예요 ++,--연산자(C/Java)는 전위/후위 차이를 꼭 구분하세요
유형 2: 반복문 추적
int s = 0;
for(int i = 1; i <= 5; i++) {
s += i;
}
printf("%d", s);
반복문은 표를 그리는 게 가장 확실해요.
| 반복 | i | s |
|---|---|---|
| 1회 | 1 | 1 |
| 2회 | 2 | 3 |
| 3회 | 3 | 6 |
| 4회 | 4 | 10 |
| 5회 | 5 | 15 |
답: 15
시험에서는 while, do-while, 중첩 for도 나와요. 중첩 반복문이 나오면 바깥 루프 한 바퀴마다 안쪽 루프를 전부 돌려야 하니까, 표를 크게 그려야 합니다.
유형 3: 함수 호출 + 재귀
def f(n):
if n <= 1:
return 1
return n * f(n - 1)
print(f(4))
재귀는 호출 스택을 직접 써보는 게 좋아요.
f(4) = 4 * f(3)
f(3) = 3 * f(2)
f(2) = 2 * f(1)
f(1) = 1
→ f(2) = 2, f(3) = 6, f(4) = 24
답: 24
재귀 문제에서 자주 실수하는 건 종료 조건을 놓치는 것이에요. if n <= 1이면 1을 반환한다는 걸 먼저 확인하고 역추적하세요.
유형 4: 배열/리스트 조작
a = [1, 2, 3, 4, 5]
print(a[1:4])
print(a[::-1])
Python 슬라이싱은 거의 매회 나와요. 핵심만 정리하면:
a[1:4]→ 인덱스 1부터 3까지 (4는 미포함).[2, 3, 4]a[::-1]→ 역순.[5, 4, 3, 2, 1]a[-1]→ 마지막 요소.5
유형 5: C 포인터 (가장 어려움)
int a = 10;
int *p = &a;
*p = 20;
printf("%d", a);
답: 20
포인터는 "주소를 저장하는 변수"라고 생각하면 돼요.
&a→ a의 주소*p→ p가 가리키는 곳의 값*p = 20→ p가 가리키는 곳(=a)에 20을 넣음
포인터 문제가 어렵게 느껴지면, 화살표 그림을 그려보세요. p → a처럼 누가 누구를 가리키는지 시각화하면 훨씬 수월합니다.
언어별 자주 나오는 함정
C
printf("%d", 10/3)→3(정수 나눗셈, 소수점 버림)char c = 'A'; printf("%d", c);→65(ASCII 값)int a[3] = {1, 2, 3}; printf("%d", *(a+1));→2(포인터 연산)
Java
String s = "abc"; System.out.println(s.length());→3- 상속에서
super.method()vsthis.method()구분 int a = 5; System.out.println(a++);→5(후위 증가: 출력 먼저, 증가는 후)
Python
print(10 // 3)→3(정수 나눗셈)print(10 % 3)→1(나머지)print("abc" * 2)→abcabc(문자열 반복)- 리스트
append와extend차이:append([4,5])→[1,2,3,[4,5]],extend([4,5])→[1,2,3,4,5]
실전에서 시간 관리
코드 문제는 한 문제당 5–7분이 적당해요. 20문항에 150분이니까, 코드 6문제에 40분 정도 쓰고 나머지 암기 문제에 시간을 남겨야 합니다.
막히는 코드 문제가 있으면:
- 3분 안에 감이 안 잡히면 일단 넘기세요
- 암기 문제를 먼저 다 풀고 돌아오세요
- 돌아와서 차분히 변수표를 그리면 의외로 풀리는 경우가 많아요
공부 순서 추천
- Python 먼저 — 문법이 가장 직관적이라 코드 읽기에 익숙해지기 좋아요
- Java — 클래스/상속 개념만 잡으면 출력 추적은 어렵지 않아요
- C 포인터 — 가장 어려우니 마지막에 집중 투자
세 언어를 "코딩"할 필요는 없어요. 읽고 실행 결과를 추적하는 연습만 하면 됩니다. 기출 코드 문제를 20–30문제 정도 손으로 풀어보면 패턴이 보이기 시작해요.