반응형

0단계 문제인데 어떻게 풀지 고민하는데 시간이 조금 걸렸다 

정답률이 낮은 이유가 있었던 문제 ㅎㅎ

 

 

 


 

문제

 


코드


def solution(a, b, c, d):
    
    lst = [a, b, c, d]
    answer = 0
    
    cnt_dict = dict()
    for e in lst:
        if e not in cnt_dict.keys():
            cnt_dict[e] = 0
        cnt_dict[e] += 1
    
    # 주사위 수
    keys_list = list(cnt_dict.keys())
    # 주사위 수가 나온 횟수
    value_list = list(cnt_dict.values())

    # 경우의 수 : 4
    if len(cnt_dict) == 1:
        answer = 1111 * a
        return answer
        
    # cnt_dict가 2이면 
    # 경우의 수 : 3, 1  혹은 2, 2
    if len(cnt_dict) == 2:
        for i in range(2):
            p = keys_list[i]
            q = keys_list[i-1]
            if value_list[i] == 3:
                answer = (10 * p + q) ** 2
                return answer
                
            if value_list[i] == 2:
                answer = (p + q) * abs(p - q)
                return answer

    
    if len(cnt_dict) == 3:    
        for i in range(3):
            p = keys_list[i]
            q = keys_list[i-1]
            r = keys_list[i-2]
            if value_list[i] == 2:
                answer = q * r
                return answer

    if len(cnt_dict) == 4:
        answer = min(keys_list)
        return answer
    
    
    return answer

 


코드 설명

cnt_dict라는 딕셔너리에는

key 값에 "주사위 수", value 값에 "주사위 수가 나온 횟수" 가 저장이 됩니다.

 

예를 들어 주사위를 굴렸을 때 1이 3번 나오고, 2가 2번 나왔다면

cnt_dict = {1:3, 2:2} 

가 들어가게 된다.

 

- cnt_dict 의 길이가 1일 경우, 4번 던졌을 때 1개의 값이 나온 것이다.

- cnt_dict 의 길이가 2일 경우, 경우의 수는 2가지이다.

   1) 2번, 2번 같은 숫자가 나왔거나 

   2) 3번, 1번(혹은 1번, 3번) 같은 숫자가 나왔다.

   value_list에 cnt_dict의 values를 리스트 형태로 넣어서 조건문을 비교하였다.

- cnt_dict 의 길이가 3일 경우, 2개가 같은 숫자이고 1개 1개 숫자가 다르게 나온 것이다.

- cnt_dict 의 길이가 4일 경우, 다 다른 숫자가 나온 것이다.

 

각 상황일 때 문제 설명에서 원하는 계산식을 적용해서 answer 변수에 담아주었다.

그 다음에 answer를 구했기 때문에 return answer 해서 함수에서 값을 리턴해주었다.

 

 

 

 

 

 


 

반응형
복사했습니다!