아이티윌_데이터 분석 55기/문제풀이_Python

#1-2. 1일차 퀴즈에 대한 문제풀이

ecosso 2026. 5. 11. 17:04

# 1. 아래 두 리스트를 사용하여 월-일 형태로 출력(단, 월은 항상 두자리)
vmonth = ['12', '2', '11', '1', '7']
vday   = ['21', '28', '30', '31', '31']

 

더보기

[ 내 답변 ]

 

func1 = lambda x,y : x + '-' + y
list(map(func1, vmonth, vday))

list(map(func1, vmonth, vday))
Out  [58]: ['12-21', '2-28', '11-30', '1-31', '7-31']

 

[ 문제풀이 ]

 

f1 = lambda x, y : '%02d' % int(x) + '-' + y
f1(vmonth, vday) # 에러발생
list(map(f1, vmonth, vday))

list(map(f1, vmonth, vday))
Out[14]: ['12-21', '02-28', '11-30', '01-31', '07-31']


# 2. 다음의 리스트 생성 후 연산
ename = ['smith','allen','king'] 
jumin = ['8812111223928','8905042323343','90050612343432']
tel=['02)345-4958','031)334-0948','055)394-9050','063)473-3853']
vid=['2007(1)','2007(2)','2007(3)','2007(4)']

# 1) ename에서 i를 포함하는지 여부 확인
# 2) jumin에서 6번째 자리만 추출
# 3) tel에서 다음과 같이 국번 XXX 치환 (02)345-4958 => 02)XXX-4958)
# 4) vid 에서 각각 년도(vyear)와 분기(vqt)를 따로 저장

 

더보기

[ 내 답변 ]

 

1) ename에서 i를 포함하는지 여부 확인

ename.count('i')

ename.count('i')
Out  [74]: 0


func2 = lambda x : x.count('i')
list(map(func2, ename))

list(map(func2, ename))
Out  [76]: [1, 0, 1]

 

 2) jumin에서 6번째 자리만 추출

func3 = lambda x : x[6]
list(map(func3, jumin))

list(map(func3, jumin))
Out  [80]: ['1', '2', '1']


 3) tel에서 다음과 같이 국번 XXX 치환 (02)345-4958 => 02)XXX-4958)

국번 = lambda x : x.split(')')[1].split('-')[0]
국번치환 = lambda x : x.replace(국번(x), 'XXX')
list(map(국번치환, tel))

list(map(국번치환, tel))
Out  [102]: ['02)XXX-4958', '031)XXX-0948', '055)XXX-9050', '063)XXX-3853']


 4) vid 에서 각각 년도(vyear)와 분기(vqt)를 따로 저장

vyearfunc = lambda x : x.split('(')[0]
vqtfunc = lambda x : x.split('(')[1].split(')')[0]

vyear = list(map(vyearfunc, vid))
vqt = list(map(vqtfunc, vid))

vyear
Out  [110]: ['2007', '2007', '2007', '2007']

vqt
Out  [111]: ['1', '2', '3', '4']

 

[ 문제풀이 ]

 

# 1) ename에서 i를 포함하는지 여부 확인

'i' in ename # false (ename 리스트 원소 중 i가 있는지 여부)
'smith' in ename # true (ename 리스트 원소 중 smith가 있는지 여부)
'i' in smith # 문자열의 포함여부

list(map(f2, ename))
Out[25]: [True, False, True]

 

f2 = lambda x : 'i' in x
list(map(f2, ename))


# 2) jumin에서 6번째 자리만 추출 -> 7번째로 수정

jumin[6] # 리스트에서 7번째 원소를 추출
'8812111223928'[6] # 문자열에서 7번째 문자를 추출

f3 = lambda x : x[6]
list(map(f3, jumin))

list(map(f3, jumin))
Out[30]: ['1', '2', '1']

 

# 3) tel에서 다음과 같이 국번 XXX 치환 (02)345-4958 => 02)XXX-4958)

'02)345-4958'.split(')')[1].split('-')[0]
'02)345-4958'.replace('02)345-4958'.split(')')[1].split('-')[0], 'XXX')

f4 = lambda x : x.replace(x.split(')')[1].split('-')[0],'XXX')
list(map(f4, tel))

list(map(f4, tel))
Out[35]: ['02)XXX-4958', '031)XXX-0948', '055)XXX-9050', '063)XXX-3853']


# 4) vid 에서 각각 년도(vyear)와 분기(vqt)를 따로 저장

'2007(1)'[0:4]
'2007(1)'[5]

f5 = lambda x : x[0:4]
vyear = list(map(f5, vid))

f6 = lambda x : x[5]
vqt = list(map(f6, vid))

f5 = lambda x : x[0:4]

list(map(f5, vid))
Out[37]: ['2007', '2007', '2007', '2007']

f6 = lambda x : x[5]

list(map(f6, vid))
Out[39]: ['1', '2', '3', '4']

 


# 3. 다음의 리스트 생성 후 연산  
vsal = ['1,100','1,200','2,200','3,000','5,000']
vcomm = [ 300, 200, 100, 500, 800]

# 1) 10%  인상된 연봉을 구하세요
# 2) sal + comm값을 구하세요

 

더보기

[ 내 답변 ]

 

 1) 10%  인상된 연봉을 구하세요
func4 = lambda x : int(str(x).replace(',',''))*1.1
list(map(func4, vsal))

list(map(func4, vsal))
Out  [149]: [1210.0, 1320.0, 2420.0, 3300.0000000000005, 5500.0]


 2) sal + comm값을 구하세요
func5 = lambda x,y : int(str(x).replace(',','')) + y
list(map(func5, vsal, vcomm)) 

list(map(func5, vsal, vcomm)) 
Out  [151]: [1400, 1400, 2300, 3500, 5800]

 

[ 문제풀이 ]

 

# 1) 10%  인상된 연봉을 구하세요

int('1,100'.replace(',','')) * 1.1

f7 = lambda x : int(x.replace(',','')) * 1.1
vsal = list(map(f7, vsal))

list(map(f7, vsal))
Out[53]: [1210.0, 1320.0, 2420.0, 3300.0000000000005, 5500.0]

 

# 2) sal + comm값을 구하세요

vsal + vcomm # 에러 발생

f8 = lambda x, y : int(x) + y
list(map(f8, vsal, vcomm))

list(map(f8, vsal, vcomm))
Out[58]: [1510, 1520, 2520, 3800, 6300]

 

+) 

# ** 형 변환 함수
# int, float, str : 상수에만 적용 가능

int(3.00) # 가능
int([3.00, 5.00]) # 리스트 적용 불가

from pandas import Series
int(Series([3.00,5.00]))

# ** 포맷 변경
# 상수에만 적용 가능
# 리스트 데이터가 문제가 아니라 해당 함수 자체가 상수에만 적용이 가능하다.
'%02d' % 1 # 가능
'%02d' % [1,2] # 리스트 적용 불가
'%02d' % Series([1,2]) # 시리즈 적용 불가

# ** 문자열 메서드
# 문자열 상수에만 적용 가능
'abc'.upper() # 가능
['abc','ccc'].upper() # 리스트 적용 불가
Series['abc','ccc'].upper() # 시리즈 적용 불가