05의 개발 계발

[페어프로그래밍] 230404 최빈값 구하기 본문

내일배움캠프 AI/페어프로그래밍

[페어프로그래밍] 230404 최빈값 구하기

생각하는 코댕이 2023. 4. 4. 14:24
728x90

최빈값 구하기


페어프로그래밍 결과 코드

# 페어프로그래밍으로 제작한 코드
def solution(array):
	# 우리는 각 원소의 숫자와 갯수 즉, 세트값을 저장해야한다. → dict사용!
    # 각 원소의 숫자와 갯수를 딕셔너리에 key와 value로 저장하자!
	count_dict = {}  
    for num in array:
        # dict 키 판별, 없으면 value가 1 , 있으면 value에 +1
        if num in count_dict:
            count_dict[num] += 1
        else:
            count_dict[num] = 1
    # 빈도수(value) 최댓값, 즉 value값이 제일 큰 key값을 return 해줘야 한다!
    max_count = max(count_dict.values())
    # 최빈값(key)이 여러개일 경우를 고려해서, 반복문을 돌려 최빈값의 리스트(mode_list)를 만든다!
    # 그리고 최빈값 리스트를 통해 하나인지 여러개인지 판별해야 한다!
    mode_list = []
    for key, count in count_dict.items():
        if count == max_count:
            mode_list.append(key)
    # 리스트의 길이를 비교하여 최빈값의 갯수를 판별하여 최빈값 또는 -1 return!
    if len(mode_list) == 1:
        return mode_list[0]
    else:
        return -1

리팩토링 코드

# 리팩토링(삼항연산자 리스트컴프리헨션 사용)
def solution(array):
    count_dict = {}  # 각 원소의 숫자와 갯수를 딕셔너리에 key와 value로 저장할 빈 딕셔너리!
    for num in array:
        # dict 키를 판별, 없으면 value가 1 , 있으면 value에 +1
        if num in count_dict:
            count_dict[num] += 1
        else:
            count_dict[num] = 1
    # 빈도수(value) 최댓값, 즉 value값이 제일 큰 key값을 return 해줘야 한다!
    max_count = max(count_dict.values())
    # 최빈값(key)이 여러개일 경우를 고려해서, 반복문을 돌려 최빈값의 리스트(mode_list)를 만든다!
    # 그리고 최빈값 리스트를 통해 하나인지 여러개인지 판별해야 한다!
    mode_list = [num for num in set(array) if count_dict[num] == max_count]
    # 리스트의 길이를 비교하여 최빈값의 갯수를 판별!
    # 삼항연산자로 리팩토링
    return mode_list[0] if len(mode_list) == 1 else -1

시사점 or 새로이 알게된 점

    # 리스트컴프리헨션
    # 1) 리스트 = [ 리스트의 요소가 되었으면 하는 값 for x in list 조건문 ]
    # 2) [ ]를 꼭 써야한다!

728x90