지우너

[정보처리기사 실기] 파이썬 본문

Records/정보처리기사

[정보처리기사 실기] 파이썬

지옹 2024. 9. 27. 22:43

파이썬에서 나오는 내용: 출력형식, 자료구조(list, dict, set), 문자열 슬라이스(-1은 뒤에서부터 시작), Range 함수

(문법, 객체지향도 나오긴 하지만 그건 C / Java 공부한 걸로 풀 수 있음)

 

2023 정처기 1회(4월 시행) 15번 문항

asia = {'한국', '중국', '일본'}
asia.add('베트남')
asia.remove('일본')
asia.update({'한국', '홍콩', '태국'})
print(asia)
더보기

정답

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

* 순서는 실행할 때마다 변경되므로 관계없으며, 5개의 요소가 중괄호와 작은 따옴표 안에 들어가 있으면 인정


풀이

add()를 하면 asia set에 '베트남'이 추가된다. asia = {'한국', '중국', '일본', '베트남'}

remove()를 하면 asia set에 '일본'이 삭제된다. asia = {'한국', '중국', '베트남'}

update()를 하면 여러 개의 요소를 한 번에 삽입할 수 있다. '한국'은 이미 들어있는 요소. set은 중복을 허용하지 않기 때문에 '홍콩'과 '태국'만 set에 추가된다. asia = {'한국', '중국', '베트남', '홍콩', '태국'}

print(asia)를 하면 set을 의미하는 중괄호로 요소들이 둘러 쌓여서 출력된다. set 안에 문자 요소들은 작은 따옴표로 묶어줘야 한다.

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

 

<add() vs update()>

add()는 1개의 요소만 추가가 가능하다

update는 여러 개의 요소를 추가할 수 있으나, 이터러블 자료만 가능하다. 즉, 리스트, set, 문자열 등 만 매개변수로 넣을 수 있는 것

예를 들어 list=[1, 2, 3]에 4, 5를 추가하고 싶다고 하자.

이때 update(4, 5)라고 적을 시 에러가 난다. 4, 5를 리스트에 넣어 update([4, 5])를 해주어야 한다.

 

(번외) 리스트에 리스트를 삽입하고 싶은 경우 list1.append(list(list2)) 이런 식으로 해주면 된다고 함.

 

[Q&A] 영상답변 | 파이썬 출력형태 - 꼭 들어주세요.

a = [1, 2, ['AB', 'CDE', ['FGH', 'IJK']]]
print(a[0])
print(a[1])
print(a[2])
print(a[2][0])
print(a[2][1])
print(a[2][2])
print(a[2][2][0])
print(a[2][2][1])
print(a[2][2][0][0])
print(a[2][2][0][1])
print(a[2][2][0][2])
더보기

정답

1

2

['AB', 'CDE', ['FGH', 'IJK']]

AB

CDE

['FGH', 'IJK']

FGH

IJK

F

G

H


풀이

a리스트의 구조를 그림으로 표현하면 아래와 같다

따라서 아래는 노란색 영역을 의미

a[0]=1

a[1]=2

a[2]=['AB', 'CDE', ['FGH', 'IJK']]

가 된다. 리스트이기 때문에 대괄호와 리스트 속 요소가 문자라면 작은 따옴표가 꼭 있어야 한다.

 

아래는 빨간색 영역을 의미(배열 속 배열을 가리키고 있으므로)

a[2][0]=AB

a[2][1]=CDE

a[2][2]=['FGH', 'IJK']

 

아래는 파란색 영역을 의미 배열 속 배열 속 배열

a[2][2][0]=FGH

a[2][2][1]=IJK

 

아래는 [2][2][0]인 'FGH' 문자열의 0, 1, 2번째 원소를 말함

a[2][2][0][0]=F

a[2][2][0][1]=G

a[2][2][0][2]=H

 

numbers = [1, 2, 3, 4, 5]
total=sum([n for n in numbers if n%2==1])
print(total)
더보기

정답

9


풀이

[n for n in numbers if n%2==1]는 [n (for n in numbers if n%2==1)] 이렇게 묶을 수 있다

numbers의 원소를 꺼내와서 저장한다는 의미이다.

1%2==1 이므로 저장한다

2%2!=1이므로 저장x

3%2==1 이므로 저장

4%2!=1이므로 저장x

5%2==1 이므로 저장

따라서 [n for n in numbers if n%2==1]의 결과는 [1, 3, 5]가 된다. 결과로 나온 이 리스트를 sum함수의 매개변수로 넣는다.

 

sum([1, 3, 5]) 1+3+5=9

sum연산의 결과는 무조건 원소 1개가 나오기 때문에  대괄호 없이 9를 출력한다.

 

numbers = [1, 2, 3, 4, 5]
result = [n*2 for n in numbers if n%2==0]
print(result)
더보기

정답

[4, 8]


풀이

[n*2 for n in numbers if n%2==0]도 위의 문제처럼 [n*2 (for n in numbers if n%2==0)] 이렇게 묶을 수 있다.

1%2!=0 이므로 저장x

2%2==0 이므로 저장

3%2!=0 이므로 저장x

4%2==0 이므로 저장

5%2!=0 이므로 저장x

따라서 결과로 저장되는 n값은 2, 4가 된다.

그런데 n*2라고 쓰여있으니 각각의 원소에 2를 곱한 값을 원소로 저장한다.

따라서 result = [4, 8] 이 된다.

 

print(result)를 하면 [4, 8]이 출력된다. result의 원소는 여러개가 될 수 있으므로 print 할 때 대괄호를 꼭 붙여줘야 한다.

(+) result = [n*2 for n in numbers if n%3==0]인 경우를 보면 numbers에서 n에 저장될 수 있는 원소는 3 뿐이다.

n*2가 되어 result의 원소로 저장된다고 하니 result=[6]이 된다.

print(result) 의 결과는 [6]이다. 6이 아니라 [6]이라고 대괄호를 포함하여 적어야 한다.

그 이유는 조건에 따라 result의 개수가 여러 개가 될 수도 있기 때문.

 

[파이썬] 문제풀이 특강 01

1번

x, y = 100, 200
print(x==y)

 

더보기

정답

False

 

출력값이 0일지, false일지 False일지 개인적으로 좀 헷갈렸던 문제

 

2번

while(True):
	print('A')
	print('B')
	print('C')
	continue
	print('D')

 

더보기

정답

A

B

C

가 무한반복됨

 

3번

a=["대", "한", "민", "국"]
for i in a:
	print(i)

 

더보기

정답

 

4번

class arr:
	a=["Seoul", "Kyeonggi", "Inchon", "Daejoen", "Daegu", "Busan"]
str=''
for i in arr.a:
	str=str+i[0]
print(str)

 

더보기

정답

SKIDBB

 

5번

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

 

더보기

정답

[1, 2, 3]

7

1 2 3

4 5

7 8 9

 

print(data[0])은 대괄호로 감싸져 있고, 각각의 원소가 쉼표로 구분되어 있어야 함.

print(data[2][1])은 원소만 출력해야 함(대괄호가 있으면 안 됨)

이중 for문으로 출력한 print(item, end=" ")는 공백으로 각각의 원소가 구분되어 있어야 함

 

6번 입력받은 문제에서 앞에서 3글자, 뒤에서 3글자 추출하여 출력하는 프로그램.

string=input("7문자 이상 문자열 입력")
m=(㉠)
print(m)

// 입력값: Hello World
// 출력값: Helrld

 

더보기

정답

string[0:3]+string[-3:0]

 

string [0:3]+string[8:]도 가능한 답이긴 하지만, 문자열 길이에 따라 정답이 아니게 될 수도 있으므로 가급적 위와 같이 적을 것을 권함!

 

[파이썬] 문제풀이 특강 02

7번

a=[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
print(a[:7:2])

 

더보기

정답

[0, 20, 40, 60]

 

대괄호로 감싸져 있어야 하고, 각각의 원소가 쉼표로 구분되어 있어야 함

리스트를 슬라이스하면 결과값도 리스트라는 사실을 기억할 것

 

8번

a=100
list_data=['a', 'b', 'c']
dic_data={'a':90, 'b':95}
print(list_data[0])
print(dic_data['a'])

 

더보기

정답

a

90

 

9번

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

 

더보기

정답

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

 

순서는 상관없음

중괄호 필수. 각 원소가 쉼표로 구분되어야 함.

원소(문자열)이 작은 따옴표로 감싸져 있어야 함.

 

10번

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

 

더보기

정답

26


풀이

A<<B 는 A(2B)과 같음

A>>B는 A/(2B)과 같음

 

for i in range(1, 3) 은 for (i=1; i<3; i++) 를 의미

i=1일 때,

result =100 >> 1  // 100/(21) 이므로 result=50

result=result+1 // result=51

 

i=2일 때

result=100>>2 // (a값은 그대로 이므로 100) 100/(22) result=25

result=result+1 // result=26

 

print(result) // 26

 

11번

def cs(n):
	s=0
	for num in range(n+1):
		s+=num
	return s
print(cs(11))

 

더보기

정답

66


풀이

print(cs(11))

 

cs(11) 호출

s=0

for num in range(11+1) // for num in range(12)이므로 for(i=0; i<12; i++)와 동일

s+=num // num은 0~11까지 이므로 0~11까지의 수를 모두 더해주면 된다.

0+1+2+3+4+5+6+7+8+9+10+11 = 66

return s // s=66

 

print(66) // 66

 

12번

class FourCal:
	def Setdata(sel, fir, sec):
		sel.fir=fir
		sel.sec=sec
	def add(sel):
		result = sel.fir+sel.sec
		return result

a = FourCal()
a.Setdata(4, 2)
print(a.add())

 

더보기

정답

6


풀이

a=FourCal() // FourCal 객체 선언

a.Setdata(4, 2) // a.fir=4, a.sec=2로 설정

print(a.add()) // a.add() 호출

 

a.add()

result = a.fir+a.sec // 4+2 =6

return result // a를 호출한 곳에 6 반환

 

print(6) // 6