Programming/SWEA

[SWEA 6311].[파이썬 프로그래밍 기초(1) 파이썬의 기본 구조와 기초 문법] 9. 내장함수 4

토토모에요 2021. 7. 19. 14:10
728x90
반응형

SW Expert Academy에서 학습용으로 문제를 가져왔습니다. 문제가 될 시 수정, 삭제하겠습니다.

https://swexpertacademy.com/main/main.do

문제 : "ADCBBBBCABBCBDACBDCAACDDDCAABABDBCBCBDBDBDDABBAAAAAAADADBDBCBDABADCADC"와 같은 문자열이 주어지고, A는 4점, B는 3점, C는 2점, D는 1점이라고 할 때 문자열에 사용된 알파벳 점수의 총합을 map 함수와 람다식을 이용해 구하십시오.

input

output

184

생각나는대로 써 본 code

a="ADCBBBBCABBCBDACBDCAACDDDCAABABDBCBCBDBDBDDABBAAAAAAADADBDBCBDABADCADC"
a_list=list(a)
count=0

for i in a_list:
    if i=="A":
        count+=4
    elif i=="B":
        count+=3
    elif i=="C":
        count+=2
    elif i=="D":
        count+=1

print(count)

map함수와 람다식을 이용하지 않아도 pass할 수 있다. 리스트로 문자열을 따로따로 넣은다음 for문으로 count값에 가중치만큼 더하게하면 충분히 pass가 된다.

정답 code

a = "ADCBBBBCABBCBDACBDCAACDDDCAABABDBCBCBDBDBDDABBAAAAAAADADBDBCBDABADCADC"
a_list = list(a)
b = list(map(lambda x : ord('E') - ord(x) , a))
print(sum(b))

여기서 람다함수는 간편하게 함수를 만들어주는 역할을 해준다고 보면 되고 ord는 특정 문자를 아스키코드 값으로 변환해주는 함수이다. 그러므로 A,B,C... 각 간격이 1씩 차이나므로 여기서 나와있는 문자는 A,B,C,D이므로 문자 E를 사용하여 E-D, E-C, E-B, E-A값으로 점수화 시킨다. 그 후 전체값을 더하면 원하는 값을 얻을 수 있다.

반응형