본문 바로가기

Algorithm/Implementation

(Python3) - 프로그래머스(코딩 기초 트레이닝) : 주사위 게임 3

반응형

https://school.programmers.co.kr/learn/courses/30/lessons/181916

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

hash map과 분기문을 작성해본 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

1. 주사위 dices를 선언 후 a,b,c,d 값을 담아 오름차순으로 정렬해줍니다.

2. key에는 주사위 값, value에는 빈도 수를 저장할 frequency_dict을 선언해 dices의 원소를 순회하며 값을 넣어줍니다. 

3. 숫자의 종류 category_size 변수를 선언 해 frequency_dict의 길이를 저장합니다.

📔 풀이과정

category_size에 따라 점수를 계산합니다.

1. category_size 가 1일 때

모든 숫자가 같기 때문에 1111*dices[0]이 점수입니다.

 

2. category_size 가 2일 때

같은 숫자가 3개 다른 숫자가 1개인 경우와 

같은 숫자가 2개씩 쌍으로 나오는 경우에 따라 점수를 p, q에 저장해 계산해줍니다.

 

3. category_size 3일 때

2개가 같고 나머지는 다르므로 빈도수가 1또는 3인 값을 찾아 q, r에 저장한 뒤 점수를 계산합니다.

 

4. category_size 4일 때

모든 숫자가 다르므로 최솟값인 dices[0]이 점수입니다.

📔 정답 출력 | 반환

각 분기별 점수를 반환합니다.


📕 Code

📔 Python3

def solution(a, b, c, d):
    dices = [a,b,c,d]
    dices.sort()
    
    frequency_dict = {}
    for number in dices:
        frequency_dict[number] = frequency_dict.get(number, 0) + 1
    category_size = len(frequency_dict)
    if category_size == 1:
        return 1111*dices[0]
    if category_size == 2:
        p, q = 0,0
        for key, value in frequency_dict.items():
            if value == 3:
                p = key
            elif value == 1:
                q = key
            else:
                p = dices[0]
                q = dices[2]
                return (p+q) * abs(p-q)
        return (10*p+q)**2
    if category_size == 3:
        keys = [key for key, value in frequency_dict.items() if value != 2]
        q, r = keys[0], keys[1]
        return q * r
                                
    return dices[0]

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.