회고
딕셔너리를 이용해서 해당 값들을 맵핑해서 가지고 오고, 그 값들을 비교하면서 해당 문제를 풀었다. 그러다 보니 너무 하드코딩을 했다. 그리고 가독성이 떨어진다. 나만 이해하는 코드가 된것이다.
다른 사람의 코드를 보면서 좀 더 리펙토리을 하든, 아니면 새롭게 코드를 짜든 내 코드를 좀더 보완해야 겠다.
Lv1 성격유형검사하기
문제
https://school.programmers.co.kr/learn/courses/30/lessons/118666?language=python3
# a, b 요소 중 값이 더 큰 값을 리턴해주는 함수이다.
# 만약 값이 같다면 알파벳 순으로 더 빠른 요소를 리턴해준다.
# 값이 하나만 있다면 해당 값을 리턴해 준다.
def check_answer(a, b, result_list):
if a in result_list.keys() and b in result_list.keys():
# 두개의 요소 중 더 큰값을 리턴해준다.
if result_list[a] >= result_list[b]:
return a
else:
return b
elif a in result_list.keys():
return a
elif b in result_list.keys():
return b
else:
return a
def solution(survey, choices):
choice_list ={
1 :"매우비동의",
2 :"비동의",
3 :"약간 비동의",
4 :"모르겠음",
5 :"약간 동의",
6 :"동의",
7 :"완전동의"
}
score_choice_list = {
"매우비동의" : 3,
"비동의" : 2,
"약간 비동의" : 1,
"모르겠음" : 0,
"약간 동의" : 1,
"동의" : 2,
"완전동의" : 3
}
result_list = {}
# 반복문을 돌면서 해당 choices가 choice_list에 어디에 해당하는지 어느 대답유형에 확인 하는지 확인한다.
for i in range(len(survey)):
# if문을 이용해서 4보다 작은경우에 [매우비동의, 비동의, 약간 비동의] 에 해당한다.
if choices[i] < 4:
# 해당 데이터가 이미 존재한다면 해당데이터에 점수를 더해주는 코드이다.
if survey[i][0] in result_list:
result_list[survey[i][0]] += score_choice_list[choice_list[choices[i]]]
# 그렇지 않은 경우라면 새로운 요소에 점수를 맵핑해서 딕셔너리로 만드는 코드이다.
else:
result_list[survey[i][0]] = score_choice_list[choice_list[choices[i]]]
# if문을 이용해서 4보다 큰경우에 [약간동의, 동의, 완전동의] 에 해당한다.
elif 4 < choices[i]:
if survey[i][1] in result_list:
result_list[survey[i][1]] += score_choice_list[choice_list[choices[i]]]
else:
result_list[survey[i][1]] = score_choice_list[choice_list[choices[i]]]
answer = ""
# result_list에는 "R"에 해당하는 값, "T"에 해당하는 값 식으로 들어온다.
# result_list = {"R":3,"T":1,"C":2.......}
# result_list에 결과로 들어온 요소들을 가지고서 해당 요소들 중 더 큰 값을 구하는 코드이다.
answer += check_answer("R","T", result_list)
answer += check_answer("C","F", result_list)
answer += check_answer("J","M", result_list)
answer += check_answer("A","N", result_list)
return answer
a = solution(survey,choice)
print(a)