https://school.programmers.co.kr/learn/courses/30/lessons/118666
구현 문제임.
처음에는 가독성을 좋게 하려고 배열로 만들어서 풀려고 했는데
주어진 시간에 그걸 하느라 시간 너무 쓸거 같아서, 그냥 dictionary로 구현함.
참고로 dictionary는 O(1)에 구할 수 잇다! (무의식적으로 O(N)으로 느꼇엇음)
내 코드
def solution(survey, choices):
N=len(survey)
result={
"R":0,"T":0,"C":0,"F":0,"J":0,"M":0,"A":0,"N":0,
}
for i in range(N):
if choices[i]==4:
continue
elif choices[i]>4:
result[survey[i][1]]+=abs(choices[i]-4)
else:
result[survey[i][0]]+=abs(choices[i]-4)
print(result)
# 정산
answer=""
if result["R"]<result["T"]:
answer+="T"
else:
answer+="R"
if result["C"]<result["F"]:
answer+="F"
else:
answer+="C"
if result["J"]<result["M"]:
answer+="M"
else:
answer+="J"
if result["A"]<result["N"]:
answer+="N"
else:
answer+="A"
return answer
abs는 추가적인 세부사항 고려하기 싫어서 씀. 실수할 여지를 줄이기 위해 → 따로 공부할때는 더 최적화하자
그냥 맘편히 dictionary 사용해서 구현한 문제, 가독성은 조금 떨어지긴함. GPT는 어떻게 풀지 궁금하다
GPT 코드
def solution(survey, choices):
score = {
"R": 0, "T": 0,
"C": 0, "F": 0,
"J": 0, "M": 0,
"A": 0, "N": 0
}
for s, c in zip(survey, choices):
if c == 4:
continue
if c < 4:
score[s[0]] += 4 - c
else:
score[s[1]] += c - 4
answer = ""
answer += "R" if score["R"] >= score["T"] else "T"
answer += "C" if score["C"] >= score["F"] else "F"
answer += "J" if score["J"] >= score["M"] else "M"
answer += "A" if score["A"] >= score["N"] else "N"
return answer
그냥 나랑 똑같이 풀었고, 가독성 측면에서 내가 배울 부분이 있다.