티스토리 뷰

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/181916

 

프로그래머스

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

programmers.co.kr

 

문제 설명

주사위 4개를 굴렸을 때 나온 숫자에 따라 점수 계산하기

1. 주사위 4개가 모두 같은 숫자일때  -> 1111 * q

2. 3개의 주사위에서 같은 숫자, 1개 주사위에서 다른 숫자일때 -> (10 * p + q)^2

3. 주사위 2개씩 같은 숫자 -> (p+q) * |p-q|

4. 주사위 2개가 같은숫자(p), 나머지 두 주사위에서 각각 다른 숫자일때 -> q * r(q, r은 각각 다른 숫자)

5. 주사위 4개가 모두 다른 숫자일때 가장 작은수 

 

Q. LEVEL 0의 난이도이지만, 2023년 09월 기준 정답률이 45% 정도이다.

 

접근했던 방법

1. python3 dic 자료형을 이용한다.

  Key : 주사위를 굴려 나온 숫자 / Value : 나온 횟수 

  Ex) 주사위 값이 6일때 -> keyValue={6:1}

 

2. keyValue Dic형의 길이값을 통해 경우의 수 추론

 - 길이가 4일때 : 4개다 다른 숫자 

 - 길이가 1일때 : 4개다 같은 숫자

 - 길이가 3일때 : 2개가 같고, 각각 다른 숫자 (1개 , 1개)

 - 길이가 2일때 

    - 1) 2개씩 각각 같은 숫자 ex) 6, 6, 3, 3

    - 2) 3개가 같고, 1개가 다른 숫자 ex) 4, 4, 4, 1

 

3. Value값을 순회하며 확인하긴 시간이 오래 소요되므로 ValueKey 형태로 Dic 생성.

 --> Dic의 경우 Key값이 중복될때 마지막 값으로 덮어쓰므로, key 값은 list 형태로 사용.

   ex) 주사위를 굴려 나온 숫자가 2, 2, 4, 4 일때 ValueKey = :{2:[2, 4]}

 

따라서 최종 소스코드

최종 소스코드

최종 소스코드

# 주사위 게임3
def solution(a, b, c, d):
answer = 0
keyValue = {}
valKeyDic = {}
for i in (a, b, c, d):
if keyValue.get(i) == None:
keyValue[i] = 1
else:
keyValue[i] = keyValue[i] + 1
for key, value in keyValue.items():
if valKeyDic.get(value) != None:
valKeyDic.get(value).append(key)
else:
valKeyDic[value] = [key]
print('valKeyDic : ', valKeyDic)
if len(keyValue) == 1: # 4개 다 같은 숫자
answer = 1111 * a
elif len(keyValue) == 2:
if valKeyDic.get(3) != None: # 3개 같은숫자
p = valKeyDic[3][0]
q = valKeyDic[1][0]
answer = (10 * p + q) * (10 * p + q)
elif valKeyDic.get(2) != None: # 2개, 2개 같은 숫자
p = valKeyDic[2][0]
q = valKeyDic[2][1]
answer = (p + q) * abs(p - q)
elif len(keyValue) == 3:
q = valKeyDic[1][0]
r = valKeyDic[1][1]
answer = q * r
elif len(keyValue) == 4: # 4개 다 다른경우
answer = min(a, b, c, d)
return answer

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함