티스토리 뷰

문제 링크 : 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
링크
«   2024/07   »
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 31
글 보관함