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
'Programming Practice > Python' 카테고리의 다른 글
프로그래머스 <이어 붙인 수> python (0) | 2025.04.17 |
---|---|
프로그래머스 <원소들의 곱과 합> Python (0) | 2025.04.17 |
프로그래머스 <등차수열의 특정한 항만 더하기> Python (0) | 2025.04.17 |
Programmers <코드 처리하기> Python (0) | 2025.04.17 |
programmers <ad제거하기> (0) | 2025.04.17 |