IT/정보처리기사

[정처기] 실기 파이썬 문제 모음 (20~24년 2회)

ruming 2024. 8. 3. 11:08

2020~2024년 2회 정처기 실기 파이썬 문제 및 해설

문제가 없는 건 출력 결과를 쓰는 걸로 생각해주세요.

 

 

24년 2회

def func(x, y):
	result = 0
	for i in range(len(x)):
		sub = x[i:i+len(y)]
		if sub == y:
			result += 1
	return result

str = "abdcabcabca"
p1 = "ca"
p2 = "ab"
print(f'ab{func(str, p1)}', f'ca{func(str, p2)}')

 

더보기
더보기
더보기

ab3 ca3

 

func 함수는 str 문자열에서 p1과 p2가 몇 개 있는지 세는 함수입니다.

str에서 ca와 ab는 각각 3번이 있고, f 포매팅을 이용해 개수를 출력합니다.

출력할 때 ab와 ca 위치가 바뀌었음을 주의해야 합니다.

ab + 'ca' 개수 + ca + 'ab' 개수

 

24년 1회

a = ["Seoul", "Kyeonggi", "Incheon", "Daejun", "Daegu", "Pusan"]
str01 = "S"
for i in a:
  str01 = str01 + i[1]
print(str01)

 

더보기
더보기
더보기

Seynaau

 

리스트의 1번째 인덱스를 str01에 붙이는 문제입니다.

for문은 리스트의 요소를 돌며 각 리스트의 1번째 인덱스에 저장된 문자를 S 뒤에 붙입니다.

Seoul Kyeonggi Incheon Daejun Daegu Pusan

S+e+y+n+a+a+u -> Seynaau

 

*21년 1회 문제와 유사합니다.

 

 

23년 3회

다음은 Python 프로그램에 대한 문제이다. 빨간색 박스로 가려진 '예약어' 를 알맞게 작성하시오. (단, 첫 번째 라인의 '5 10'은 사용자로 부터 입력받은 값에 해당한다.)

x, y = input("x, y의 값을 공백으로 구분하여 입력: ").[예약어]()
print("x의 값:", int(x))
print("y의 값:", int(y))

 

[실행결과]

x, y의 값을 공백으로 구분하여 입력: 5 10
x의 값: 5
y의 값: 10

 

더보기
더보기
더보기

split

 

split 함수의 기본 구분자는 공백입니다.

 

 

23년 2회

다음 Python 코드에 알맞는 출력값을 작성하시오.

a = "engineer information processing"
b = a[:3]
c = a[4:6]
d = a[28:]

e=b+c+d

print(e)

 

더보기
더보기
더보기

engneing

 

a[:3] = eng (0번째부터 2번째 인덱스까지)

a[4:6] = ne (4~5 인덱스)

a[28:] = ing (28~마지막 인덱스)

e는 b+c+d를 모두 연결한 engneing이 됩니다.

 

 

23년 1회

다음 파이썬 코드의 알맞는 출력값을 작성하시오.

a={'한국','중국','일본'}
a.add('베트남')
a.add('중국')
a.remove('일본')
a.update(['한국','홍콩','태국'])
print(a)

 

더보기
더보기
더보기

{'한국','중국','베트남','홍콩','태국'}

 

a.add('베트남')                         → {'한국','중국','일본','베트남'}

a.add('중국')                                {'한국','중국','일본','베트남'}   (중복)
a.remove('일본')                          {'한국','중국','베트남'}
a.update(['한국','홍콩','태국'])      {'한국','중국','베트남','홍콩','태국'}   (중복 제외하고 추가)

 

*20년 2회 문제와 유사합니다.

 

22년 3회

TestList = [1,2,3,4,5]
TestList = list(map(lambda num : num + 100, TestList)))

print(TestList)

 

더보기
더보기
더보기

[101,102,103,104,105]

 

각 요소에 100씩 더하는 lambda함수를 map으로 리스트 전체 요소에 적용

 

 

22년 2회

다음은 파이썬 코드이다. 알맞는 출력값을 작성하시오.

a="REMEMBER NOVEMBER"
b=a[:3]+a[12:16]
c="R AND %s" % "STR";
print(b+c)

 

더보기
더보기
더보기

REMEMBER AND STR

 

a[:3] = REM

a[12:16] = EMBE

c = R AND STR     (%s로 포매팅 STR이 들어감)

b+c = REMEMBER AND STR

 

 

22년 1회

def exam(num1, num2=2):
  print('a=', num1, 'b=', num2)
exam(20)

 

더보기
더보기
더보기

a= 20 b= 2

 

*파이썬 버전에 따라 띄어쓰기가 달라진다고 합니다.

exam 함수에서 num2는 인자가 들어오지 않을 시 기본값을 2로 주겠다는 뜻입니다.

따라서 exam(20)을 호출했을 때 num1에는 20이, num2는 2가 들어갑니다.

 

 

21년 3회

a,b = 100, 200 
print(a==b)

 

더보기
더보기
더보기

True

 

파이썬에서는 여러 개의 변수를 한 번에 초기화할 수 있습니다.

a에는 100, b는 200을 대입했기 때문에 a==b는 False.

 

참고로 각 언어마다 True/False를 출력하는 방식이 다릅니다.

자바 : true/false

파이썬 : True/False

C : 1/0

 

 

21년 2회

a = 100
result = 0
for i in range(1,3):
   result = a >> i
   result = result + 1
print(result)

 

더보기
더보기
더보기

26

 

비트시프트 문제입니다.

for문은 1부터 2까지 총 두 번 돌게 됩니다. a의 비트를 오른쪽으로 한 칸 밀고 1을 더하는 계산을 2번 반복합니다.

 

첫번째 반복

100을 이진수로 변환하면 1100100입니다.

*이진수로 변환할 때 2의 제곱들을 쭉 써두고 100이 되도록 숫자를 더하면 쉽게 구할 수 있습니다.

64 32 16 8 4 2 1
1 1 0 0 1 0 0

오른쪽으로 한 칸 밀면 110010이고, 이는 십진수로 50입니다. (32+16+2 = 50)

64 32 16 8 4 2 1
0 1 1 0 0 1 0

여기에 1을 더하면 51이 됩니다.

64 32 16 8 4 2 1
0 1 1 0 0 1 1

 

두번째 반복

51은 이진수로 110011이고, 오른쪽으로 한 칸 밀면 11001이 됩니다.

64 32 16 8 4 2 1
0 0 1 1 0 0 1

11001은 십진수로 25(16+8+1), 여기에 1을 더하면 26이 되므로 result는 26이 됩니다.

 

 

 

21년 1회

class good :
	list = ["seoul", "kyeonggi","inchon","daejeon","daegu","pusan"]

g = good()
str01 = ''
for i in g.list:
	str01 = str01 + i[0]
    
print(str01)

 

더보기
더보기
더보기

skiddp

 

str01에 리스트의 0번째 인덱스의 문자를 저장하는 코드입니다.

seoul kyeonggi inchon daejeon daegu pusan

 

s+k+i+d+d+p → skiddp

 

*24년 1회 문제와 유사합니다.

 

 

20년 4회

lol = [[1,2,3],[4,5],[6,7,8,9]]
print(lol[0])
print(lol[2][1])
for sub in lol:
	for item in sub:
		print(item, end = '')
	print()

 

더보기
더보기
더보기

[1,2,3]

7

123

45

6789

 

이차원 리스트가 저장된 형태는 다음과 같습니다. 굵은 글자가 리스트의 요소입니다.

인덱스 0 1 2 3
0 1 2 3  
1 4 5    
2 6 7 8 9

 

lol[0]      → 0번째 리스트 전체 출력 

lol[2][1]  → 2번째 리스트의 1번째 요소 출력

for문은 2차원 리스트 전체를 돌면서 요소를 공백 없이 출력합니다. (end=''로 출력문자 지정)

리스트 하나를 출력하고 print()로 개행을 합니다.

123 (공백없이 출력 후 개행)

45

6789

 

 

20년 2회

>>> asia={"한국", "중국", "일본"}
>>> asia.add("베트남")
>>> asia.add("중국")
>>> asia.remove("일본")
>>> asia.update(["홍콩", "한국", "태국"])
>>> print(asia)

 

더보기
더보기
더보기

{"한국", "중국", "베트남", "홍콩", "태국"}

 

add("베트남")                                    {"한국", "중국", "일본", "베트남"}

add("중국")                                        {"한국", "중국", "일본", "베트남"}   (중복)

remove("일본")                                  {"한국", "중국", "베트남"}

update(["홍콩", "한국", "태국"])         {"한국", "중국", "베트남", "홍콩", "태국"}  (중복 제외 업데이트)

 

23년 1회 문제와 유사합니다.