정보처리기사 실기 Python 기출문제 정리
목차
2020년 기출문제
문제 1: 2020년 2회차 - 집합(Set) 연산
문제:
countries = {'일본', '중국', '한국'} # 초기 국가 집합 생성
countries.add('베트남') # '베트남' 추가
countries.add('중국') # '중국'은 이미 있으므로 추가되지 않음
countries.remove('일본') # '일본' 제거
countries.update(['홍콩', '한국', '태국']) # '홍콩', '한국', '태국' 추가 (중복은 무시)
print(countries) # 최종 집합 출력
해설:
add(): 집합에 요소 추가 (중복 시 무시)remove(): 집합에서 요소 제거update(): 여러 요소를 한 번에 추가 (리스트, 튜플, 집합 등 가능)- 집합은 중복을 허용하지 않음
답: {'중국', '베트남', '태국', '홍콩', '한국'}
실행 과정:
- 초기:
{'일본', '중국', '한국'} add('베트남'):{'일본', '중국', '한국', '베트남'}add('중국'): 변화 없음 (중복)remove('일본'):{'중국', '한국', '베트남'}update(['홍콩', '한국', '태국']):{'중국', '한국', '베트남', '홍콩', '태국'}
문제 2: 2020년 4회차 - 2차원 리스트와 중첩 반복문
문제:
lol = [[1, 2, 3], [4, 5], [6, 7, 8, 9]] # 2차원 리스트 생성
print(lol[0]) # 첫 번째 리스트 출력: [1, 2, 3]
print(lol[2][1]) # 세 번째 리스트의 두 번째 요소 출력: 7
for sub in lol: # lol의 각 하위 리스트 순회
for item in sub: # 하위 리스트 내의 각 요소 순회
print(item, end='') # 요소 출력, 줄바꿈 없이
print() # 각 하위 리스트마다 줄바꿈
해설:
lol[0]: 첫 번째 요소인[1, 2, 3]출력lol[2][1]: 세 번째 리스트([6, 7, 8, 9])의 인덱스 1 요소인7출력- 중첩 반복문: 외부 반복문은 각 하위 리스트를, 내부 반복문은 각 요소를 순회
end='': 줄바꿈 없이 출력print(): 각 하위 리스트 출력 후 줄바꿈
답:
[1, 2, 3]
7
123
45
6789실행 과정:
print(lol[0])→[1, 2, 3]출력print(lol[2][1])→7출력- 첫 번째 하위 리스트
[1, 2, 3]:123출력 후 줄바꿈 - 두 번째 하위 리스트
[4, 5]:45출력 후 줄바꿈 - 세 번째 하위 리스트
[6, 7, 8, 9]:6789출력 후 줄바꿈
2021년 기출문제
문제 3: 2021년 1회차 - 클래스 변수와 문자열 인덱싱
문제:
class Good: # 클래스 정의
li = ["seoul", "kyeonggi", "inchon", "daejeon", "daegu", "pusan"]
# 클래스 변수: 지역 이름 리스트
g = Good() # Good 클래스의 인스턴스 생성
str01 = '' # 결과를 저장할 문자열 변수
for i in g.li: # 리스트의 각 지역 이름 순회
str01 = str01 + i[0] # 각 문자열의 첫 글자만 이어붙이기
print(str01) # 최종 문자열 출력
해설:
- 클래스 변수: 모든 인스턴스가 공유하는 변수
g.li: 인스턴스를 통해 클래스 변수 접근i[0]: 각 문자열의 첫 번째 문자 (인덱스 0)- 문자열 연결:
str01 = str01 + i[0]
답: skiddp
실행 과정:
- "seoul" → 's'
- "kyeonggi" → 'k'
- "inchon" → 'i'
- "daejeon" → 'd'
- "daegu" → 'd'
- "pusan" → 'p'
- 최종:
"skiddp"
문제 4: 2021년 2회차 - 비트 시프트 연산
문제:
a = 100 # 초기값 설정
result = 0 # 결과 변수 초기화
for i in range(1, 3): # i = 1부터 2까지 반복 (range는 끝 제외)
result = a >> i # a를 i만큼 오른쪽으로 비트 시프트
result = result + 1 # 시프트 결과에 1 더하기
print(result) # 마지막 반복의 결과 출력
해설:
>>: 오른쪽 비트 시프트 연산자 (나누기 2의 거듭제곱과 동일)100 >> 1: 100을 2로 나눈 값 = 50100 >> 2: 100을 4로 나눈 값 = 25range(1, 3): 1부터 2까지 (3은 제외)
답: 26
실행 과정:
- i = 1:
result = 100 >> 1= 50result = 50 + 1= 51
- i = 2:
result = 100 >> 2= 25result = 25 + 1= 26
- 최종 출력:
26
비트 시프트 설명:
100(이진수:1100100)100 >> 1=50(이진수:110010)100 >> 2=25(이진수:11001)
문제 5: 2021년 3회차 - 비교 연산자
문제:
a, b = 100, 200 # 변수 a는 100, b는 200으로 초기화
print(a == b) # a와 b가 같은지 비교하여 결과 출력
해설:
- 다중 할당:
a, b = 100, 200은a = 100,b = 200과 동일 ==: 같음 비교 연산자100 == 200은False
답: False
2022년 기출문제
문제 6: 2022년 2회차 - 기본값 매개변수
문제:
def exam(num1, num2=2): # num2는 기본값 2를 가지는 매개변수
print('a=', num1, 'b=', num2) # 두 인자의 값을 출력
exam(20) # num1만 전달 → num2는 기본값 사용
해설:
- 기본값 매개변수: 함수 호출 시 인자를 전달하지 않으면 기본값 사용
num2=2:num2의 기본값은 2exam(20):num1=20,num2=2(기본값 사용)
답: a= 20 b= 2
문제 7: 2022년 2회차 - 문자열 슬라이싱과 포맷팅
문제:
a = "REMEMBER NOVEMBER" # 문자열 a 선언
b = a[:3] + a[12:15] # b는 a에서 부분 문자열 추출 후 합치기
c = "R AND %s" % "STR" # 문자열 포맷팅: %s 자리에 "STR" 삽입
print(b + c) # b와 c를 이어붙여 출력
해설:
a[:3]: 인덱스 0부터 2까지 →"REM"a[12:15]: 인덱스 12부터 14까지 →"BER"b = "REM" + "BER"="REMEMBER"%s: 문자열 포맷팅,"STR"로 치환 →"R AND STR"b + c="REMEMBER" + "R AND STR"="REMEMBER AND STR"
답: REMEMBER AND STR
문자열 인덱스:
R E M E M B E R N O V E M B E R
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16문제 8: 2022년 3회차 - map과 lambda 함수
문제:
TestList = [1, 2, 3, 4, 5] # 초기 리스트
TestList = list(map(lambda num: num + 100, TestList)) # 각 요소에 100 더하기
print(TestList) # 변환된 리스트 출력
해설:
lambda num: num + 100: 익명 함수, 각 요소에 100을 더함map(): 각 요소에 함수를 적용하여 새로운 이터레이터 반환list(): 이터레이터를 리스트로 변환map(lambda num: num + 100, TestList):[101, 102, 103, 104, 105]
답: [101, 102, 103, 104, 105]
동작 과정:
lambda num: num + 100함수 정의map()으로 각 요소에 함수 적용:- 1 → 101
- 2 → 102
- 3 → 103
- 4 → 104
- 5 → 105
list()로 리스트 변환
2023년 기출문제
문제 9: 2023년 1회차 - 집합(Set) 연산
문제:
a = {'한국', '중국', '일본'} # 초기 집합 생성
a.add('베트남') # '베트남' 추가
a.add('중국') # '중국'은 이미 있으므로 무시됨
a.remove('일본') # '일본' 제거
a.update({'홍콩', '한국', '태국'}) # 여러 요소 한 번에 추가 (중복은 무시)
print(a) # 최종 집합 출력
해설:
- 2020년 2회차 문제와 유사한 유형
update(): 집합을 인자로 받아 여러 요소 추가- 집합은 중복을 허용하지 않음
답: {'한국', '중국', '베트남', '홍콩', '태국'}
실행 과정:
- 초기:
{'한국', '중국', '일본'} add('베트남'):{'한국', '중국', '일본', '베트남'}add('중국'): 변화 없음remove('일본'):{'한국', '중국', '베트남'}update({'홍콩', '한국', '태국'}):{'한국', '중국', '베트남', '홍콩', '태국'}
문제 10: 2023년 2회차 - 문자열 슬라이싱
문제:
a = "engineer information processing" # 문자열: 총 31자
b = a[:3] # 'eng'
c = a[4:6] # 'ne'
d = a[28:] # 'ing'
e = b + c + d # 'eng' + 'ne' + 'ing'
print(e)
해설:
a[:3]: 인덱스 0부터 2까지 →"eng"a[4:6]: 인덱스 4부터 5까지 →"ne"a[28:]: 인덱스 28부터 끝까지 →"ing"- 문자열 연결:
"eng" + "ne" + "ing"="engneing"
답: engneing
문자열 인덱스:
e n g i n e e r i n f o r m a t i o n p r o c e s s i n g
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30문제 11: 2023년 3회차 - 입력 처리 (빈칸 채우기)
문제:
조건 : 빈칸에 들어갈 알맞은 말을 쓰시오.
입력 : 3,7
출력 :
파이썬 입출력에 대한 문제입니다.
3 7
3 + 7 = 10print("파이썬 입출력에 대한 문제입니다.")
num1, num2 = input()._________________() # 공백 기준으로 두 값을 입력받음
num1 = int(num1)
num2 = int(num2)
print(num1, num2) # 두 수를 출력
num3 = num1 + num2 # 합 계산
print(num1, "+", num2, "=", num3)
해설:
input(): 사용자 입력을 문자열로 받음split(): 문자열을 공백 기준으로 분리하여 리스트 반환- 다중 할당:
num1, num2 = input().split()로 두 값을 분리 - 입력 "3 7"을
split()하면["3", "7"]이 되고, 각각num1,num2에 할당
답: split
실행 과정:
input(): "3 7" 입력split():["3", "7"]로 분리num1, num2 = "3", "7"int()변환:num1 = 3,num2 = 7- 출력:
3 7 - 계산:
num3 = 3 + 7 = 10 - 출력:
3 + 7 = 10
2024년 기출문제
문제 12: 2024년 1회차 - 리스트 순회와 문자열 인덱싱
문제:
a = ["Seoul", "Kyeonggi", "Incheon", "Daejun", "Daegu", "Pusan"] # 지역 이름 리스트
str = "S" # 초기 문자열
for i in a: # 리스트 a를 순회
str = str + i[1] # 각 단어의 두 번째 글자를 str에 추가 (i[1])
print(str) # 결과 출력
해설:
i[1]: 각 문자열의 두 번째 문자 (인덱스 1)- 문자열 연결: 각 단어의 두 번째 글자를 순서대로 이어붙임
답: Seynaau
실행 과정:
- 초기:
str = "S" - "Seoul" →
str = "S" + "e"="Se" - "Kyeonggi" →
str = "Se" + "y"="Sey" - "Incheon" →
str = "Sey" + "n"="Seyn" - "Daejun" →
str = "Seyn" + "a"="Seyna" - "Daegu" →
str = "Seyna" + "a"="Seynaa" - "Pusan" →
str = "Seynaa" + "u"="Seynaau"
문제 13: 2024년 2회차 - 문자열 패턴 매칭과 f-string
문제:
def fnCalculation(x, y): # 문자열 x에서 부분 문자열 y의 등장 횟수를 계산
result = 0 # 결과 카운트 초기화
for i in range(len(x)): # 문자열 x의 모든 인덱스를 순회
temp = x[i:i+len(y)] # x의 현재 위치부터 y의 길이만큼 슬라이스
if temp == y: # 슬라이스가 y와 일치하면
result += 1 # 카운트 증가
return result # 총 횟수 반환
a = "abdcabcabca" # 전체 문자열
p1 = "ab" # 찾을 첫 번째 패턴
p2 = "ca" # 찾을 두 번째 패턴
out = f"ab{fnCalculation(a, p1)}ca{fnCalculation(a, p2)}" # f-string으로 포맷팅
print(out) # 결과 출력
해설:
fnCalculation(x, y): 문자열 x에서 부분 문자열 y가 나타나는 횟수 계산- 슬라이싱:
x[i:i+len(y)]로 y의 길이만큼 부분 문자열 추출 - f-string:
f"ab{fnCalculation(a, p1)}ca{fnCalculation(a, p2)}"형식
답: ab3ca3
실행 과정:
fnCalculation("abdcabcabca", "ab"):- i=0:
"ab"=="ab"→ count = 1 - i=4:
"ab"=="ab"→ count = 2 - i=7:
"ab"=="ab"→ count = 3 - 결과: 3
- i=0:
fnCalculation("abdcabcabca", "ca"):- i=5:
"ca"=="ca"→ count = 1 - i=8:
"ca"=="ca"→ count = 2 - i=10:
"ca"=="ca"→ count = 3 - 결과: 3
- i=5:
f-string:
f"ab{3}ca{3}"="ab3ca3"
문자열 인덱스:
a b d c a b c a b c a
0 1 2 3 4 5 6 7 8 9 10문제 14: 2024년 3회차 - 리스트 뒤집기와 슬라이싱
문제:
def func(lst): # 리스트를 뒤집는 함수
for i in range(len(lst) // 2): # 절반만 순회
lst[i], lst[-i-1] = lst[-i-1], lst[i] # 앞뒤 요소를 swap
lst = [1, 2, 3, 4, 5, 6] # 원본 리스트
func(lst) # 리스트를 뒤집음
print(sum(lst[::2]) - sum(lst[1::2])) # 짝수 인덱스 합 - 홀수 인덱스 합
해설:
func(lst): 리스트를 제자리에서 뒤집음 (in-place)range(len(lst) // 2): 절반만 순회 (중앙을 기준으로 앞뒤 교환)lst[i], lst[-i-1] = lst[-i-1], lst[i]: 두 요소 교환 (swap)lst[::2]: 짝수 인덱스 (0, 2, 4, ...)lst[1::2]: 홀수 인덱스 (1, 3, 5, ...)
답: 3
실행 과정:
func(lst)실행:- i=0:
lst[0]과lst[-1]교환 →[6, 2, 3, 4, 5, 1] - i=1:
lst[1]과lst[-2]교환 →[6, 5, 3, 4, 2, 1] - i=2:
lst[2]과lst[-3]교환 →[6, 5, 4, 3, 2, 1] - 최종:
[6, 5, 4, 3, 2, 1]
- i=0:
lst[::2]:[6, 4, 2]→ 합 = 12lst[1::2]:[5, 3, 1]→ 합 = 9결과:
12 - 9 = 3
유형별 정리
1. 집합(Set) 연산
- 2020년 2회차:
add(),remove(),update() - 2023년 1회차: 동일 유형 반복 출제
핵심 개념:
- 집합은 중복을 허용하지 않음
add(): 단일 요소 추가update(): 여러 요소 추가 (리스트, 튜플, 집합 등)remove(): 요소 제거
2. 리스트와 반복문
- 2020년 4회차: 2차원 리스트와 중첩 반복문
- 2021년 1회차: 클래스 변수 리스트 순회
- 2024년 1회차: 리스트 순회와 문자열 인덱싱
- 2024년 3회차: 리스트 뒤집기
핵심 개념:
- 2차원 리스트 인덱싱:
list[i][j] - 중첩 반복문: 외부 반복문 → 내부 반복문
- 리스트 슬라이싱:
lst[::2],lst[1::2] - 리스트 뒤집기:
lst[i], lst[-i-1] = lst[-i-1], lst[i]
3. 문자열 처리
- 2022년 2회차: 문자열 슬라이싱과 포맷팅
- 2023년 2회차: 문자열 슬라이싱
- 2024년 2회차: 문자열 패턴 매칭
핵심 개념:
- 문자열 슬라이싱:
str[start:end],str[:end],str[start:] - 문자열 포맷팅:
%s, f-string - 문자열 인덱싱:
str[i](i번째 문자) - 문자열 연결:
+연산자
4. 함수와 람다
- 2022년 2회차: 기본값 매개변수
- 2022년 3회차:
map()과lambda - 2024년 2회차: 사용자 정의 함수
핵심 개념:
- 기본값 매개변수:
def func(a, b=2): lambda: 익명 함수 정의map(): 각 요소에 함수 적용- 함수 정의와 호출
5. 비트 연산
- 2021년 2회차: 오른쪽 비트 시프트 (
>>)
핵심 개념:
>>: 오른쪽 비트 시프트 (나누기 2의 거듭제곱)100 >> 1= 50 (100 ÷ 2)100 >> 2= 25 (100 ÷ 4)
6. 입출력
- 2023년 3회차:
input()과split()
핵심 개념:
input(): 사용자 입력 받기split(): 문자열 분리- 다중 할당:
a, b = input().split()
7. 비교 연산자
- 2021년 3회차:
==연산자
핵심 개념:
==: 같음 비교!=: 다름 비교- 다중 할당:
a, b = 100, 200
핵심 개념 요약
1. 자료구조
집합(Set):
s = {1, 2, 3}
s.add(4) # 요소 추가
s.remove(2) # 요소 제거
s.update([5, 6]) # 여러 요소 추가
리스트(List):
lst = [1, 2, 3]
lst[0] # 인덱싱
lst[1:3] # 슬라이싱
lst[::2] # 짝수 인덱스
lst[1::2] # 홀수 인덱스
2차원 리스트:
lst = [[1, 2], [3, 4]]
lst[0][1] # 첫 번째 리스트의 두 번째 요소
2. 문자열 처리
슬라이싱:
s = "Hello World"
s[:5] # "Hello"
s[6:] # "World"
s[0:5] # "Hello"
인덱싱:
s[0] # 'H'
s[-1] # 'd' (마지막 문자)
포맷팅:
"%s" % "text" # "text"
f"{value}" # f-string
3. 함수
기본값 매개변수:
def func(a, b=2):
return a + b
func(10) # 12 (b는 기본값 2 사용)
func(10, 5) # 15
람다 함수:
lambda x: x + 1 # 익명 함수
map(lambda x: x*2, [1, 2, 3]) # [2, 4, 6]
4. 반복문
for 문:
for i in range(1, 3): # 1, 2
print(i)
for item in lst: # 리스트 순회
print(item)
중첩 반복문:
for sub in lst:
for item in sub:
print(item)
5. 연산자
비트 시프트:
100 >> 1 # 50 (100 ÷ 2)
100 >> 2 # 25 (100 ÷ 4)
비교 연산자:
a == b # 같음
a != b # 다름
6. 입출력
입력:
input() # 문자열 입력
input().split() # 공백 기준 분리
int(input()) # 정수 입력
출력:
print(value) # 기본 출력
print(value, end='') # 줄바꿈 없이 출력
학습 팁
1. 집합 연산
- 중복 제거에 유용
add(),remove(),update()메서드 숙지- 집합은 순서가 없음 (Python 3.7+에서는 삽입 순서 유지)
2. 문자열 슬라이싱
- 인덱스는 0부터 시작
[start:end]: start 포함, end 제외- 음수 인덱스: 뒤에서부터 카운트
3. 리스트 처리
- 2차원 리스트:
list[i][j]형식 - 슬라이싱:
[::2](짝수),[1::2](홀수) - 리스트 뒤집기: 절반만 순회하며 교환
4. 함수와 람다
- 기본값 매개변수는 뒤에 위치
lambda는 간단한 함수 정의에 유용map()은 각 요소에 함수 적용
5. 비트 연산
>>는 나누기 2의 거듭제곱과 동일100 >> n=100 ÷ (2^n)
출제 경향 분석
자주 출제되는 유형
집합 연산 (2020년 2회, 2023년 1회)
add(),remove(),update()메서드- 중복 제거 개념
문자열 슬라이싱 (2022년 2회, 2023년 2회)
- 인덱싱과 슬라이싱
- 문자열 연결
리스트 처리 (2020년 4회, 2024년 1회, 2024년 3회)
- 2차원 리스트
- 리스트 순회
- 리스트 뒤집기
함수 (2022년 2회, 2022년 3회, 2024년 2회)
- 기본값 매개변수
- 람다 함수
- 사용자 정의 함수
입출력 (2023년 3회)
input()과split()
체크리스트
기본 문법
- 변수 할당과 다중 할당
- 자료형 (리스트, 집합, 문자열)
- 인덱싱과 슬라이싱
- 연산자 (비교, 비트 시프트)
자료구조
- 리스트 생성과 접근
- 2차원 리스트
- 집합 연산 (
add,remove,update) - 문자열 처리
제어문
-
for반복문 - 중첩 반복문
-
range()함수
함수
- 함수 정의와 호출
- 기본값 매개변수
-
lambda함수 -
map()함수
입출력
-
input()함수 -
split()메서드 -
print()함수
작성일: 2026-01-30
범위: 2020년~2024년 정보처리기사 실기 Python 기출문제
총 문제 수: 14문제
'BackEnd > 정보처리기사' 카테고리의 다른 글
| 정보처리기사 실기 예상 문제 - IT용어 100문제 2탄 (0) | 2026.02.12 |
|---|---|
| 정보처리기사 실기 예상 문제 - IT용어 100문제 1탄 (0) | 2026.02.12 |
| C언어 기출문제 정리 (2022년~2024년) - 정보처리기사 (0) | 2026.02.09 |
| 정보처리기사 실기 예상 문제 모음 - 네트워크/시스템 (0) | 2026.02.05 |
| 정보처리기사 실기 SQL 기출 정리 (2020~2024) (0) | 2026.02.04 |