정처기 실기 Python 코딩 문제 — 슬라이싱과 자료구조 추적

정처기 2026-07-20 16:05:40 정처기Python슬라이싱자료구조실기

글 목록 →

정보처리기사 실기의 Python 코딩 문제는 C·Java보다 코드가 짧지만, 슬라이싱과 자료구조의 세밀한 규칙에서 갈린다. 문법이 간결한 만큼 한 글자 차이로 출력이 바뀌므로, 규칙을 정확히 알아야 한다.

슬라이싱 — a[start:stop:step]

리스트 슬라이싱은 a[시작:끝:간격] 세 자리로 읽는다. 끝 인덱스는 포함하지 않는다. 생략하면 시작은 0, 끝은 길이, 간격은 1이 기본이다.

a = [1, 2, 3, 4, 5]

print(a[1:4])    # ① [2, 3, 4]
print(a[:3])     # ② [1, 2, 3]
print(a[2:])     # ③ [3, 4, 5]
print(a[::2])    # ④ [1, 3, 5]
print(a[::-1])   # ⑤ [5, 4, 3, 2, 1]
print(a[-2:])    # ⑥ [4, 5]
  • ① 1번부터 4번 앞까지 → 인덱스 1,2,3 → [2, 3, 4].
  • ② 처음부터 3번 앞까지 → [1, 2, 3].
  • ③ 2번부터 끝까지 → [3, 4, 5].
  • ④ 간격 2로 건너뛰기 → [1, 3, 5].
  • ⑤ 간격 -1은 역순[5, 4, 3, 2, 1]. 문자열 뒤집기 단골이다.
  • ⑥ 음수 인덱스는 뒤에서 센다. -2는 뒤에서 둘째 → [4, 5].

핵심은 끝 인덱스 미포함음수 인덱스, 그리고 step이 음수면 뒤에서 앞으로 간다는 것.

얕은 복사 함정 — 리스트는 참조다

a = [1, 2, 3]
b = a          # ① 같은 객체를 가리킴
b.append(4)
print(a)       # [1, 2, 3, 4]

c = a[:]       # ② 슬라이싱으로 복사
c.append(5)
print(a)       # [1, 2, 3, 4]  (c만 바뀜)
  • b = a는 리스트를 복사하지 않는다. 같은 객체를 두 이름이 가리키므로 b를 바꾸면 a도 바뀐다.
  • a[:]새 리스트를 만든다. 그래서 c를 바꿔도 a는 그대로다.

“왜 a까지 바뀌나”를 묻는 문제의 답은 항상 리스트가 참조로 대입되기 때문이다.

딕셔너리와 반복

d = {'a': 1, 'b': 2, 'c': 3}
print(d['b'])          # 2
print('a' in d)        # True (키를 검사)

total = 0
for v in d.values():
    total += v
print(total)           # 6

in를 검사한다는 점, .values()·.keys()·.items()로 무엇을 순회하는지가 출제 포인트다.

컴프리헨션과 range

nums = [i * i for i in range(1, 5)]
print(nums)            # [1, 4, 9, 16]

print(list(range(0, 10, 3)))  # [0, 3, 6, 9]

range(1, 5)는 1,2,3,4 (끝 미포함). 슬라이싱과 같은 규칙이다. 제곱을 담으면 [1, 4, 9, 16]. range(0, 10, 3)은 3씩 건너뛰어 0,3,6,9.

시험에서 실수하는 지점

  • 끝 인덱스 미포함a[1:4]는 4번을 안 넣는다. range도 동일.
  • 정수 나눗셈7 / 2는 3.5(실수), 7 // 2는 3(몫), 7 % 2는 1(나머지). ///를 헷갈리면 틀린다.
  • 문자열도 슬라이싱된다"PYTHON"[1:4]"YTH". 리스트와 규칙이 같다.
  • 얕은 복사 — 대입은 복사가 아니다. 복사하려면 a[:]a.copy().

Python 문제는 코드가 짧아 방심하기 쉽지만, “끝은 포함 안 함”과 “대입은 참조 공유”라는 두 규칙을 놓치면 출력이 어긋난다. 슬라이싱은 세 자리를 또박또박 읽고, 리스트를 다룰 땐 같은 객체인지 새 객체인지부터 따지면 된다.

댓글

이 글에 대한 의견은 아래 댓글로 남겨주세요 (GitHub 계정 필요). 로그인 없이 남기고 싶다면