728x90
문제 설명
1부터 6까지 숫자가 적힌 주사위가 네 개 있습니다.
네 주사위를 굴렸을 때 나온 숫자에 따라 다음과 같은 점수를 얻습니다.
1. 네 주사위에서 나온 숫자가 모두 p로 같다면 1111 × p점을 얻습니다.
2. 세 주사위에서 나온 숫자가 p로 같고 나머지 다른 주사위에서 나온 숫자가 q(p ≠ q)라면 (10 × p + q)2 점을 얻습니다.
3. 주사위가 두 개씩 같은 값이 나오고, 나온 숫자를 각각 p, q(p ≠ q)라고 한다면 (p + q) × |p - q|점을 얻습니다.
4. 어느 두 주사위에서 나온 숫자가 p로 같고 나머지 두 주사위에서 나온 숫자가 각각 p와 다른 q, r(q ≠ r)이라면 q × r점을 얻습니다.
5. 네 주사위에 적힌 숫자가 모두 다르다면 나온 숫자 중 가장 작은 숫자 만큼의 점수를 얻습니다.
네 주사위를 굴렸을 때 나온 숫자가 정수 매개변수 a, b, c, d로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.
https://school.programmers.co.kr/learn/courses/30/lessons/181916
제한 사항
a, b, c, d는 1 이상 6 이하의 정수입니다.
예제
# 1
a, b, c, d = 2, 2, 2, 2,
result = 2222
# 2
a, b, c, d = 4, 1, 4, 4
result = 1681
# 3
a, b, c, d = 6, 3, 3, 6
result = 27
# 4
a, b, c, d = 2, 5, 2, 6
result = 30
문제 풀이
def solution(a, b, c, d):
L = [a, b, c, d]
D = dict()
# 주사위 개수 세기
for i in L:
if i in D:
D[i] += 1
else:
D[i] = 1
D = sorted(D, key=lambda x:D[x])
# 주사위에서 나온 수가 모두 같을 때
if len(D) == 1:
return 1111 * a
# 주사위에서 나온 수가 2종류일 때
elif len(D) == 2:
# 3개의 수가 같을 때
if L.count(D[0]) in [1, 3]:
return (10 * D[1] + D[0]) ** 2
# 수가 2개씩 같을 때
else:
return (D[0] + D[1]) * abs(D[0] - D[1])
# 주사위에서 나온 수가 3종류일 때
elif len(D) == 3:
return D[0] * D[1]
# 주사위에서 나온 수가 모두 다를 때
else:
return min(L)
주사위 개수를 세는 방법은 일전에 풀었던 백준 문제와 같이, Counter 함수를 활용할 수 있습니다.
https://jyzinn.tistory.com/141
파이썬을 독학하시는 분들에게 도움이 되길 바라며,
혹 더 좋은 방법이 있거나 오류가 있다면 편하게 말씀 부탁드립니다.
728x90