정보처리기사 실기에서 코드 해석 문제는 보통 3~4문제, 배점으로 치면 전체의 30% 가까이 됩니다. 코딩을 한 번도 안 해본 비전공자에게는 공포의 영역이지만, 실제로 출제되는 패턴은 한정되어 있습니다.
코드를 “작성”하라는 게 아닙니다. “이 코드의 실행 결과를 쓰시오”가 대부분입니다. 코드를 한 줄씩 따라가면서 변수값 변화를 추적하면 풀 수 있습니다.
C언어 빈출 패턴
포인터 연산 — 가장 자주 나오고 가장 많이 틀리는 유형입니다. *p는 p가 가리키는 값, &a는 a의 주소. p++는 주소가 자료형 크기만큼 증가합니다. int 배열에서 p++하면 4바이트 이동.
반복문과 조건문 추적 — for문의 초기값, 조건, 증감을 정확히 추적하세요. i=0; i<5; i++면 i는 0,1,2,3,4 총 5번 반복. i=1; i<=5; i++도 5번이지만 시작값이 다릅니다.
printf 서식 지정자 — %d(정수), %f(실수), %c(문자), %s(문자열). %5d는 5칸 확보 후 오른쪽 정렬, %-5d는 왼쪽 정렬. %.2f는 소수점 2자리. 이런 서식 문제가 꼭 나옵니다.
Java 빈출 패턴
상속과 오버라이딩 — 부모 클래스와 자식 클래스가 같은 이름의 메서드를 가지면, 객체 타입이 아니라 실제 생성된 인스턴스의 메서드가 호출됩니다. Parent p = new Child(); 에서 p.method()는 Child의 method를 실행합니다.
String 메서드 — substring(시작, 끝): 시작 인덱스 포함, 끝 인덱스 미포함. charAt(인덱스): 해당 위치 문자 반환. length(): 문자열 길이. 인덱스는 0부터 시작한다는 걸 잊지 마세요.
배열과 반복문 — 2차원 배열 arr[행][열]에서 행과 열을 바꿔 읽는 문제가 종종 나옵니다. arr[0][1]과 arr[1][0]을 헷갈리지 마세요.
Python 빈출 패턴
리스트 슬라이싱 — a[1:4]는 인덱스 1,2,3 (4 미포함). a[::-1]은 역순. a[::2]는 짝수 인덱스만. 이 규칙을 확실히 외우세요.
딕셔너리 — d = {“a”:1, “b”:2}에서 d[“a”]는 1. d.keys(), d.values(), d.items()의 반환값 형태를 알아두세요.
리스트 컴프리헨션 — [x*2 for x in range(5)]는 [0, 2, 4, 6, 8]. [x for x in range(10) if x%3==0]은 [0, 3, 6, 9]. 조건부 리스트 생성이 자주 출제됩니다.
코드 추적 요령
연습장에 변수 이름을 적고, 각 줄이 실행될 때마다 값을 업데이트하세요. 머릿속으로 하면 반드시 틀립니다. 손으로 추적하세요.
반복문은 표를 만들어서 추적합니다. i=0일 때 a는 몇, b는 몇. i=1일 때… 이렇게 한 줄씩. 귀찮아 보이지만 이게 가장 정확합니다.
코드 해석 문제는 프로그래밍 실력이 아니라 꼼꼼함으로 푸는 문제입니다. 패턴을 익히고, 손으로 추적하는 연습을 반복하세요. 10문제만 풀어보면 감이 옵니다.
비전공자가 코드 문제를 두려워하는 진짜 이유
코드 해석 문제를 처음 만났을 때, 저는 아예 손도 못 대겠더라고요. 영어로 된 코드가 화면을 가득 채우고 있으니 눈이 먼저 거부합니다. 그런데 한 달쯤 연습하고 나니까 깨달은 게 있습니다. 코드 해석은 “프로그래밍”이 아니라 “산수”에 가깝다는 거예요.
변수에 숫자를 넣고, 더하고 빼고, 조건에 따라 분기하고. 초등학교 수학 수준의 연산을 순서대로 따라가기만 하면 됩니다. 어려운 건 알고리즘이 아니라 “문법 기호”입니다. *가 곱하기인지 포인터인지, ==가 대입인지 비교인지. 이 기호들의 의미만 외우면 문제의 80%는 풀립니다.
언어별 최소한의 암기 사항
세 언어를 다 깊이 파려면 시간이 부족합니다. 각 언어에서 “이것만큼은 반드시” 알아야 하는 핵심을 추렸습니다.
C언어 필수 3가지: 포인터 기호(*와 &의 차이), printf 서식 지정자(%d, %f, %c, %s), 배열 인덱스가 0부터 시작한다는 것. 이 세 가지만 확실히 알아도 C언어 문제의 절반은 풀 수 있습니다.
Java 필수 3가지: 상속 시 오버라이딩이 적용되는 시점(런타임), String 메서드의 인덱스 규칙(0부터, substring의 끝 인덱스 미포함), 형변환(int → double 자동, double → int는 명시적 캐스팅 필요). 특히 오버라이딩 문제는 거의 매회 나옵니다.
Python 필수 3가지: 리스트 슬라이싱 규칙(시작 포함, 끝 미포함), 들여쓰기가 블록을 결정한다는 것, range(n)은 0부터 n-1까지라는 것. Python은 문법이 간결해서 비전공자가 가장 접근하기 수월한 언어입니다.
실전 시간 배분 전략
정보처리기사 실기 시험에서 코드 해석 문제에 너무 많은 시간을 쓰는 수험생이 많습니다. 코드가 길어 보이면 겁부터 먹고, 한 문제에 15분씩 쏟다가 다른 문제를 못 풀게 됩니다.
제 경험상, 코드 문제 하나에 최대 7분을 걸어놓으세요. 7분 안에 답이 나오지 않으면 일단 넘기고, 나중에 남는 시간에 다시 도전합니다. 대신 나머지 서술형 문제(SQL, 네트워크, 소프트웨어 공학)에 시간을 더 쓰는 게 총점에 유리합니다.
그리고 반드시 연습장을 쓰세요. 시험장에서 연습장을 나눠줍니다. 변수값 추적표를 연습장에 그리면서 풀면 실수가 확 줍니다. 머릿속으로 계산하겠다는 유혹을 이기는 게 코드 문제 풀이의 이걸 알면 절반은 된 겁니다.
코드 해석이 두렵다면, 오늘 기출 한 문제만 연습장에 추적해 보세요. 한 문제가 되면 두 문제가 되고, 일주일이면 감이 옵니다. 프로그래밍 실력이 아니라 꼼꼼함과 반복 연습의 영역입니다.