본문 바로가기
Programming Practice/Python

프로그래머스 <주사위 게임2> Python

by TAMIK 2025. 4. 17.
728x90

Programmers <주사위 게임2> 문제

문제 설명

1부터 6까지 숫자가 적힌 주사위가 세 개 있습니다. 세 주사위를 굴렸을 때 나온 숫자를 각각 a, b, c라고 했을 때 얻는 점수는 다음과 같습니다.

세 숫자가 모두 다르다면 a + b + c 점을 얻습니다.
세 숫자 중 어느 두 숫자는 같고 나머지 다른 숫자는 다르다면 (a + b + c) × (a2 + b2 + c2 )점을 얻습니다.
세 숫자가 모두 같다면 (a + b + c) × (a2 + b2 + c2 ) × (a3 + b3 + c3 )점을 얻습니다.
세 정수 a, b, c가 매개변수로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.

제한사항
a, b, c는 1이상 6이하의 정수입니다.

내 풀이

def solution(a, b, c):
    if a == b == c:
        return a**6 * 3**3
    elif a==b or a==c or b==c:
        return (a + b + c) * (a**2 + b**2 + c**2)
    else:
        return a + b + c

 

 

 

 

그리고 멋진 set을 활용한 다른 분의 풀이

def solution(a, b, c):
    check = len(set([a, b, c]))
    if check == 1:
        return 3 * a * 3 * (a**2) * 3 * (a**3)
    elif check == 2:
        return (a + b + c) * (a**2 + b**2 + c**2)
    else:
        return (a + b + c)

 

check = len(set([a, b, c]))

입력받은 3 개의 정수를 요소로 갖는 list 생성 [a,b,c]
-> 이 리스트를 집합(set)으로 변환. ※집합은 중복 요소 허용 X. 그래서 중복 요소는 하나로 처리 됨.
len()은 집합의 요소 개수 반환.
즉, a, b, c 세 수의 서로 다른 값의 개수 나타냄.
결과적으로 check변수에는 입력받은 세 수 중에서 서로 다른 수의 개수 저장하게 됨.

check == 1

a, b, c 모두 값이 동일하다는 뜻.

그래서 return 값에 a, b, c중 하나 골라서 하나로만 계산하는 것. 이 분은 a를 사용하심.

그래서 값이 동일 하기 때문에 a + b + c = a * 3이라서 3 * a와 같은 형식으로 계산해주신 것 같음.

 

근데 지수에서 a x a^2 x a^3은 a^(1+2+3) = a^6과 같기 때문에 27 * a**6으로 더 간소화시킬 수 있을 듯.

728x90