→ 슬라이스나 첨자로 글자를 고르는 문항이 15개 중 9개다. s[a:b] 는 a 부터 b 앞까지, s[::-2] 는 뒤에서 두 칸씩 — 첨자 줄을 그려 세는 습관 하나가 절반을 정한다.
E01 진단의 5번(_THIISING)과 13번(CNNLRPYT)이 이 장이고 둘 다 맞았다면 슬라이싱과 딕셔너리 순회는 됐다는 뜻이다. 남은 것은 집합의 중복 제거와 얕은 복사(2026년 1회 12번)처럼 실무에서 잘 안 밟는 함정이다.
문항 수는 이 노트의 문제 데이터에서 ch=E07 인 것을 센 값이다(2026-09-14). 기출 코드는 grandlife.co.kr 복원에서 옮겼고, 15문항 전부 Python 3.12 로 실행해 정답을 확인했다. 입력이 필요한 2026-1회 14번은 HumanDev 를 넣어 실행했다.
02한눈에
왜 이걸 하나 — 시험 전날 규칙 9개를 다시 본다.
슬라이스s[a:b] 는 첨자 a 부터 b 앞까지. s[a:] 끝까지, s[:b] 처음부터. s[::k] 는 k 칸씩, s[::-1] 역순, s[::-2] 뒤에서 두 칸씩. 음수 첨자 −1 은 마지막.
문자열 메서드len · count(x) · split()(공백 · 구분자로 나눠 리스트) · join · upper · lower · strip · replace · find. 문자열은 불변이라 s += "x" 는 새 문자열.
리스트append · pop()(마지막) · pop(0) · insert · sort()(제자리) · sorted()(새 리스트) · reversed. a, b = b, a 로 교환. range(a, b, k) 도 b 앞까지.
딕셔너리d[k] 조회 · 대입, d.get(k, 기본), d.keys() · values() · items(), for k, v in d.items(). 순회는 넣은 순서(3.7+). max(d, key=d.get) 은 값이 최대인 키.
집합중복 없음 · 순서 없음. add · remove · update. & 교집합 · | 합집합 · - 차집합. set(리스트) 로 중복 제거. 출력 순서는 묻지 않는 것이 보통.
컴프리헨션[x * 2 for x in a if x % 2]. 딕셔너리 {k: v for …}, 집합 {x for …}. 조건이 뒤에 있으면 거름, 앞에 있으면 삼항.
복사b = a 는 같은 객체. b = a[:] · list(a) 는 얕은 복사 — 겉은 새 리스트, 안의 리스트는 공유. b[i] += … 는 안쪽 리스트를 제자리에서 늘린다.
타입 · 클래스type(100) 은 int, type("") 은 str. bool 은 int 의 하위. 클래스는 __init__(self, …), 속성은 self.x, 클래스 변수는 모든 인스턴스가 공유. 상속 class B(A), super().f().
출력print(a, b) 는 공백으로 이어 붙임, end='' 면 줄바꿈 없음, sep 으로 구분자. 리스트를 찍으면 [1, 2] 꼴 그대로, 튜플은 (3, 6).
03밑바닥
왜 이걸 하나 — 규칙 9개는 첨자 줄 하나와 쪽지 그림 하나로 전부 그려진다.
3-1. 슬라이스는 「a 부터 b 앞까지」다
문자열 위에 첨자 줄을 0 1 2 … 로 적고, s[a:b] 는 a 에서 시작해 b 바로 앞에서 멈춘다. 2026년 2회 5번의 str[:4] 는 0~3 → _THI, str[6:8] 은 6~7 → IS, str[18:] 은 18부터 끝 → ING, 붙여서 _THIISING. 2023년 2회 5번(engneing)도 같은 규칙으로 조각 셋을 잇는다.
스텝이 붙으면 건너뛴다. lst[::-2] 는 뒤에서부터 두 칸씩이라 range(10) 에서 9 · 7 · 5 · 3 · 1 이고, 각각 뒤에 A 를 붙여 9A7A5A3A1A(2026년 1회 10번). 음수 스텝은 시작이 끝이고 끝이 시작이라는 것만 기억하면 된다.
글자 하나를 고르는 것은 첨자다. 2024년 1회 12번은 단어마다 word[1](둘째 글자)을 이어 붙여 Seynaau, 2026년 2회 13번은 키의 마지막 글자 key[-1] 과 값의 첫 글자 location[0] 을 번갈아 붙여 CNNLRPYT 다. −1 이 마지막이라는 것과 딕셔너리는 넣은 순서로 돈다는 것이 그 둘의 전부다.
3-2. 문자열 메서드는 새 값을 돌려주고 원본은 안 바뀐다
문자열은 불변이라 upper() · replace() · split() 은 새 값을 돌려주고 원본은 그대로다. 2024년 2회 8번은 text.count("3") 이 3, text.count("a") 이 3 이라 슬라이스 조각과 섞어 ab3ca3. 2026년 1회 14번은 입력 HumanDev 를 split() 하고 join 으로 붙인 뒤 [::-1] 로 뒤집고(veDnamuH) o · n · g 를 빼 veDamuH 다.
공백으로 두 값을 나눠 받는 관용구 a, b = input().split() 의 빈칸은 split 이다(2023년 3회 16번). 문자열 메서드는 「무엇을 돌려주나」(문자열인가 리스트인가 정수인가)를 알면 다음 줄이 읽힌다 — split 은 리스트, count 는 정수, join 은 문자열.
3-3. 집합은 중복을 지우고, 딕셔너리는 키로 찾는다
집합에 같은 것을 두 번 넣으면 하나만 남는다. 2023년 1회 15번은 add('중국') 이 이미 있어 아무 일도 없고, remove('일본') 으로 하나 빠진 뒤 update({'홍콩', '한국', '태국'}) 에서 한국이 겹쳐 최종 원소가 한국 · 중국 · 베트남 · 홍콩 · 태국 다섯이다. 문제가 「순서는 고려하지 않는다」고 한 것은 집합에 순서가 없기 때문이다.
2025년 2회 17번은 딕셔너리 컴프리헨션으로 {1: 2, 2: 4, 3: 6} 을 만들고 값의 집합 {2, 4, 6} 을 저장해 둔 뒤, doubled[2] = 7 로 값을 바꾸고 saved 에 99 를 넣는다. 교집합은 {2, 6} 이라 길이 2 — saved 는 만들 때의 값을 복사한 것이라 나중 변경이 안 따라오고, numbers 를 바꿔도 이미 만든 doubled 와는 무관하다는 것이 함정이다.
딕셔너리 순회는 items() 로 키와 값을 함께 꺼낸다. 2025년 3회 20번은 enumerate 로 안쪽 리스트마다 (합, 길이) 튜플을 만들어 {0: (15, 5), 1: (10, 3), 2: (18, 5), 3: (9, 2)} 를 찍고, 빈칸 여덟 개가 그 숫자들이다. 튜플 안의 순서(합이 먼저)를 코드에서 확인한다.
3-4. 대입은 같은 것을 가리키고, [:] 는 겉만 새것이다
b = a 는 같은 리스트를 두 이름으로 부르는 것이라 한쪽을 바꾸면 다른 쪽도 바뀐다. b = a[:] 는 새 리스트를 만들지만 안에 든 리스트 객체는 그대로 공유한다(얕은 복사). 2026년 1회 12번의 b = m[:] 뒤 b[i + 1] += b[i] 는 안쪽 리스트를 제자리에서 늘리므로 m 의 안쪽도 함께 커져 길이 합이 1 + 2 + 3 + 4 = 10 이다.
리스트 교환 values[i], values[-i - 1] = values[-i - 1], values[i] 는 임시 변수 없이 자리를 바꾼다. 2024년 3회 2번은 앞뒤를 바꿔 6 5 4 3 2 1 을 만든 뒤 짝수 첨자 합(6 + 4 + 2)에서 홀수 첨자 합(5 + 3 + 1)을 빼 3 이다. 매 교환 뒤의 리스트를 다시 적는 것이 이 문제의 절차다.
타입 검사(2024년 3회 14번)는 type(value) == type(100) 이 int 인지, type("") 이 str 인지를 본다. "100.0" 은 문자열이라 길이 5, 100.0 은 float 이라 20, 튜플도 20 → 45. 클래스 문제(2025년 1회 17번)는 트리를 리스트로 만들고 홀수 레벨(1 · 3 …)의 값만 재귀로 더해 13 이다.
통과 기준은 넷이다. 첫째, 첨자 줄을 그려 s[a:b] · s[::-k] · s[-1] 을 30초 안에 읽는다. 둘째, 문자열 메서드가 무엇을 돌려주는지(문자열 · 리스트 · 정수) 말한다. 셋째, 집합의 중복 제거 · 무순서와 딕셔너리 순회 순서를 안다. 넷째, b = a · b = a[:] · 안쪽 공유의 차이를 그림으로 그린다. 기출 15문항이 이 넷 안에 있다.
s[2:5] 는 첨자 2 부터 5 까지 네 글자다.5 앞에서 멈춘다 — 2 · 3 · 4 세 글자. range(a, b) 도 같다. 2026년 2회 5번의 str[6:8] 이 두 글자 IS 인 이유다.
b = a[:] 로 복사했으니 b 를 바꿔도 a 는 안 바뀐다.겉 리스트만 새것이다. 안에 리스트가 들어 있으면 그 리스트는 공유라 b[i] += … 가 a 의 안쪽도 바꾼다. 2026년 1회 12번의 10 이 그 결과다. 완전히 떼려면 copy.deepcopy.
04기출
왜 이걸 하나 — 첨자 줄과 중간 결과를 적으며 푸는 연습이다. 암산이 Python 오답의 첫째 원인이다.
슬라이스가 보이면 문자열 위에 첨자를 적고, 메서드가 이어지면 줄마다 중간 값을 적는다. 집합 · 딕셔너리는 연산마다 현재 내용을 다시 적는다.
2023-1회 · 15번Python
다음 Python 프로그램의 실행 결과에 남는 집합 원소를 쓰시오. 원소의 출력 순서는 고려하지 않는다.
세트(set)는 "중복을 자동으로 거르는 주머니". add('중국')은 이미 있어서 무시, remove('일본')로 제거, update는 여러 개 한꺼번에 추가(중복 '한국'은 무시). 최종 5개 원소. 확인 방법: 집합 원소 비교(순서 무관). (Python 3.12) 그랜드라이프 가답안 표기는 「한국, 중국, 베트남, 홍콩, 태국(순서 무관)」. 복원 출처는 grandlife.co.kr 회차별 복원 페이지(2026-09-14 대조). 공식 원문이 아니라 문장·변수명·값이 실제와 다를 수 있고, 문항 번호도 복원본마다 다르다.
2023-2회 · 5번Python
다음 Python 프로그램의 실행 결과를 쓰시오.
text = "engineer information processing"
first = text[:3]
second = text[4:6]
third = text[28:]
print(first + second + third)
정답engneing
b="eng"(0~2), c="ne"(4~5, 끝 인덱스 미포함!), d="ing"(29번부터 끝까지). 슬라이싱은 "끝 번호 직전까지"가 철칙. 공백도 한 칸을 차지하므로 인덱스를 셀 때 반드시 포함하세요. 복원된 코드를 실행해 위 출력을 그대로 얻었다. (Python 3.12) 그랜드라이프 가답안 표기는 「engneing」. 복원 출처는 grandlife.co.kr 회차별 복원 페이지(2026-09-14 대조). 공식 원문이 아니라 문장·변수명·값이 실제와 다를 수 있고, 문항 번호도 복원본마다 다르다.
2023-3회 · 16번Python
공백으로 구분해 입력한 두 값을 각각 저장하려고 한다. Python 코드의 ①에 들어갈 메서드 이름을 쓰시오.
first, second = input().( ① )()
first = int(first)
second = int(second)
print(first, second)
정답split
split = "가위로 자르기". 반대로 이어붙이기는 ','.join(리스트). split/join 짝은 Python 최다 빈출 메서드. 확인 방법: split 메서드. (Python 3.12) 그랜드라이프 가답안 표기는 「split」. 복원 출처는 grandlife.co.kr 회차별 복원 페이지(2026-09-14 대조). 공식 원문이 아니라 문장·변수명·값이 실제와 다를 수 있고, 문항 번호도 복원본마다 다르다.
2024-1회 · 12번Python
다음 Python 프로그램의 실행 결과를 쓰시오.
words = ["Seoul", "Kyeonggi", "Incheon", "Daejun", "Daegu", "Pusan"]
result = "S"
for word in words:
result += word[1]
print(result)
정답Seynaau
리스트의 각 문자열에서 지정 위치 글자만 뽑아 이어 붙이는 유형. for + 인덱싱 + 문자열 연결(+=)의 조합 — 각 단어 아래에 인덱스 번호를 적어가며 추적하세요. 복원된 코드를 Python 3.12 로 실행해 위 출력을 그대로 얻었다. 그랜드라이프 가답안 표기는 「Seynaau」. 복원 출처는 grandlife.co.kr 회차별 복원 페이지(2026-09-14 대조). 공식 원문이 아니라 문장·변수명·값이 실제와 다를 수 있고, 문항 번호도 복원본마다 다르다.
2024-2회 · 8번Python
다음 Python 프로그램의 실행 결과를 쓰시오.
text = "ab3ca3a3"
print(text[:2] + str(text.count("3")) + text[3:5] + str(text.count("a")))
정답ab3ca3
문자열 순회 + 슬라이스 비교(s[i:i+2] == "ab") 패턴. count() 메서드와 동일한 원리를 수동 구현한 유형. 복원된 코드를 Python 3.12 로 실행해 위 출력을 그대로 얻었다. 그랜드라이프 가답안 표기는 「ab3ca3」. 복원 출처는 grandlife.co.kr 회차별 복원 페이지(2026-09-14 대조). 공식 원문이 아니라 문장·변수명·값이 실제와 다를 수 있고, 문항 번호도 복원본마다 다르다.
2024-3회 · 2번Python
다음 Python 프로그램의 실행 결과를 쓰시오.
def reverse(values):
for i in range(len(values) // 2):
values[i], values[-i - 1] = values[-i - 1], values[i]
values = [1, 2, 3, 4, 5, 6]
reverse(values)
print(sum(values[::2]) - sum(values[1::2]))
정답3
Python 다중 할당 a[0], a[1] = a[1], a[0]은 임시 변수 없이 교환됩니다. 역순 [::-1]과 조합되면 각 단계 후의 리스트를 반드시 다시 적으세요. 복원된 코드를 Python 3.12 로 실행해 위 출력을 그대로 얻었다. 그랜드라이프 가답안 표기는 「3」. 복원 출처는 grandlife.co.kr 회차별 복원 페이지(2026-09-14 대조). 공식 원문이 아니라 문장·변수명·값이 실제와 다를 수 있고, 문항 번호도 복원본마다 다르다.
2024-3회 · 14번Python
다음 Python 프로그램의 실행 결과를 쓰시오.
def value_of(value):
if type(value) == type(100):
return 100
elif type(value) == type(""):
return len(value)
return 20
a = "100.0"
b = 100.0
c = (100, 200)
print(value_of(a) + value_of(b) + value_of(c))
정답45
isinstance(x, int)는 "x가 정수 타입인가" 검사. 리스트 안에 섞인 str/int/float를 타입별로 골라 처리하는 유형 — bool이 int의 하위 타입이라는 함정도 알아두면 좋습니다. 복원된 코드를 Python 3.12 로 실행해 위 출력을 그대로 얻었다. 그랜드라이프 가답안 표기는 「45」. 복원 출처는 grandlife.co.kr 회차별 복원 페이지(2026-09-14 대조). 공식 원문이 아니라 문장·변수명·값이 실제와 다를 수 있고, 문항 번호도 복원본마다 다르다.
2025-1회 · 17번Python
다음 Python 프로그램의 실행 결과를 쓰시오.
class Node:
def __init__(self, value):
self.value = value
self.children = []
def build(values):
nodes = [Node(value) for value in values]
for index in range(1, len(nodes)):
nodes[(index - 1) // 2].children.append(nodes[index])
return nodes[0]
def odd_level_sum(node, level=0):
own = node.value if level % 2 == 1 else 0
return own + sum(odd_level_sum(child, level + 1) for child in node.children)
root = build([3, 5, 8, 12, 15, 18, 21])
print(odd_level_sum(root))
정답13
순회 3형제: 전위(루트→왼→오), 중위(왼→루트→오), 후위(왼→오→루트). "루트를 언제 방문하나"만 다릅니다. 2025년 신유형 — 자료구조 기본기가 실기에 들어왔습니다. 복원된 코드를 Python 3.12 로 실행해 위 출력을 그대로 얻었다. 그랜드라이프 가답안 표기는 「13」. 복원 출처는 grandlife.co.kr 회차별 복원 페이지(2026-09-14 대조). 공식 원문이 아니라 문장·변수명·값이 실제와 다를 수 있고, 문항 번호도 복원본마다 다르다.
2025-2회 · 17번Python
다음 Python 프로그램의 실행 결과를 쓰시오.
numbers = [1, 2, 3]
doubled = {number: number * 2 for number in numbers}
saved = set(doubled.values())
numbers[0] = 99
doubled[2] = 7
saved.add(99)
print(len(saved & set(doubled.values())))
정답2
딕셔너리 = 이름표 달린 사물함, 세트 = 중복 제거 주머니. 교집합(&), 합집합(|), 차집합(−)과 len()의 조합 문제가 반복 출제됩니다. 복원된 코드를 Python 3.12 로 실행해 위 출력을 그대로 얻었다. 그랜드라이프 가답안 표기는 「2」. 복원 출처는 grandlife.co.kr 회차별 복원 페이지(2026-09-14 대조). 공식 원문이 아니라 문장·변수명·값이 실제와 다를 수 있고, 문항 번호도 복원본마다 다르다.
2025-3회 · 20번Python
다음 Python 프로그램의 출력에서 빈칸 ①부터 ⑧에 들어갈 값을 순서대로 쓰시오.
data = [
[3, 5, 2, 4, 1],
[4, 5, 1],
[4, 4, 1, 5, 4],
[4, 5]
]
result = {}
for index, values in enumerate(data):
result[index] = (sum(values), len(values))
print(result)
[출력] {0: (①, ②), 1: (③, ④), 2: (⑤, ⑥), 3: (⑦, ⑧)}
정답① 15 ② 5 ③ 10 ④ 3 ⑤ 18 ⑥ 5 ⑦ 9 ⑧ 2
딕셔너리 필수 도구: d[key] 조회/수정, d.get(key, 기본값), len(d), sum(d.values()), max(d, key=d.get). 출력 개수가 많은 문제는 하나씩 번호를 붙여 차분히. 복원된 코드를 Python 3.12 로 실행해 위 출력을 그대로 얻었다. 그랜드라이프 가답안 표기는 「① 15 ② 5 ③ 10 ④ 3 ⑤ 18 ⑥ 5 ⑦ 9 ⑧ 2」. 복원 출처는 grandlife.co.kr 회차별 복원 페이지(2026-09-14 대조). 공식 원문이 아니라 문장·변수명·값이 실제와 다를 수 있고, 문항 번호도 복원본마다 다르다.
2026-1회 · 10번Python
다음 Python 프로그램을 실행했을 때 출력되는 값을 쓰시오.
lst = list(range(10))
for c in lst[::-2]:
print(c, end='A')
print()
정답9A7A5A3A1A
[::-2] = "뒤에서부터 2칸씩 건너뛰며" → 9,7,5,3,1. end='A'는 줄바꿈 대신 A를 붙임 — 마지막에도 A가 붙는다는 것까지 정확히! 복원된 코드를 실행해 위 출력을 그대로 얻었다. (Python 3.12) 그랜드라이프 가답안 표기는 「9A7A5A3A1A」. 복원 출처는 grandlife.co.kr 회차별 복원 페이지(2026-09-14 대조). 공식 원문이 아니라 문장·변수명·값이 실제와 다를 수 있고, 문항 번호도 복원본마다 다르다.
2026-1회 · 12번Python
다음 Python 프로그램을 실행했을 때 출력되는 값을 쓰시오.
def f(a):
m = [[x] for x in a]
b = m[:]
for i in range(len(b) - 1):
b[i + 1] += b[i]
return sum(len(x) for x in m)
print(f([1, 2, 3, 4]))
정답10
✔ 재검증 완료: 흥달쌤 시트·정처기감자 일치로 확정 (얕은 복사 시 내부 리스트는 참조 공유 → 10). b = a[:]는 새 리스트 복사(얕은 복사) — 겉 리스트는 분리되지만 내부의 리스트 객체는 여전히 공유된다는 것까지가 이 문제의 핵심. 복원된 코드를 Python 3.12 로 실행해 위 출력을 그대로 얻었다. 그랜드라이프 가답안 표기는 「10」. 복원 출처는 grandlife.co.kr 회차별 복원 페이지(2026-09-14 대조). 공식 원문이 아니라 문장·변수명·값이 실제와 다를 수 있고, 문항 번호도 복원본마다 다르다.
2026-1회 · 14번Python
다음 Python 프로그램에 HumanDev를 입력했을 때 출력되는 값을 쓰시오.
i = input()
x = []
for word in i.split():
x.append(word)
y = ''.join(x)
z = ''.join(c for c in y[::-1] if c not in 'ong')
print(z)
정답veDamuH
역순([::-1]) → "veDnamuH" → n 제거 → "veDamuH". 문자열 문제는 각 단계의 중간 결과를 반드시 적으면서 진행 — 암산은 실수의 지름길. 복원된 코드를 Python 3.12 로 실행해 위 출력을 그대로 얻었다. 그랜드라이프 가답안 표기는 「veDamuH」. 복원 출처는 grandlife.co.kr 회차별 복원 페이지(2026-09-14 대조). 공식 원문이 아니라 문장·변수명·값이 실제와 다를 수 있고, 문항 번호도 복원본마다 다르다.
2026-2회 · 5번Python
다음 Python 프로그램의 실행 결과를 쓰시오.
str = "_THIS_IS_KIM_SPEAKING"
a = str[:4]
b = str[6:8]
c = str[18:]
ans = a + b + c
print(ans)
정답_THIISING
인덱스는 0부터다. str[:4] 는 0~3 → _THI, str[6:8] 은 6~7 → IS, str[18:] 은 18번째부터 끝까지 → ING. 이어 붙이면 _THIISING. 파이썬 3.12 로 실행해 확인했다. 맨 앞 밑줄을 빠뜨리면 틀린다. 복원 출처는 grandlife.co.kr 2026-2회 복원 풀이(2026-09-14 대조). 공식 원문이 아니라 문장·변수명·수치가 실제와 다를 수 있다.
2026-2회 · 13번Python
다음 Python 프로그램의 실행 결과를 쓰시오. 딕셔너리는 작성된 순서대로 순회한다고 가정한다.
class LocationDict:
locations = {
"NYC": "New York",
"LON": "London",
"PAR": "Paris",
"TKY": "Tokyo"
}
obj = LocationDict()
result = ""
for key, location in obj.locations.items():
result += key[-1] + location[0]
print(result, end="")
정답CNNLRPYT
key[-1] 은 키의 마지막 글자, location[0] 은 값의 첫 글자다. NYC/New York → CN, LON/London → NL, PAR/Paris → RP, TKY/Tokyo → YT. 이어 붙이면 CNNLRPYT. 파이썬 3.12 로 실행해 확인했다. end="" 라 줄바꿈도 없다. 복원 출처는 grandlife.co.kr 2026-2회 복원 풀이(2026-09-14 대조). 공식 원문이 아니라 문장·변수명·수치가 실제와 다를 수 있다.
예상 1회 · 4번Python빈출 원리: 딕셔너리 + 정렬
다음 코드의 출력을 쓰시오.
d = {'a': 3, 'b': 1, 'c': 2}
s = sorted(d, key=d.get)
print(s[0], d[s[-1]])
정답b 3
sorted(d, key=d.get)은 값 기준으로 키를 정렬 → ['b','c','a'] (값 1,2,3 순). s[0]='b', s[-1]='a'(마지막), d['a']=3. print의 콤마는 공백 출력 — "b 3". 2025 3회 Q20 딕셔너리 유형의 심화판.
예상 1회 · 7번Python빈출 원리: 컴프리헨션 + 세트
다음 코드의 출력을 쓰시오.
a = [x for x in range(1, 10) if x % 3 == 0]
b = set(a + [3, 9, 12])
print(len(a), len(b), sum(a))