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

그냥 나랑 똑같이 풀었고, 가독성 측면에서 내가 배울 부분이 있다.

  1. 두 개 이상의 배열이 같은 인덱스끼리 의미가 있을때 zip()을 사용하자.
  2. 조건 표현식 A if Condition else B 를 사용하자.